+
*
+
ココ先生
ゲーム開発の案内役
この記事では ショップ価格と強化コスト を、読んで終わりにせず、在庫数、再入荷までの時間、購入できるかを同じカードで表示します。
+
*
+
はじめちゃん
ゲームエンジン学習中
ショップ在庫と再入荷タイマーを分かりやすくするUI設計ガイド を読む前に、まずUnity のどこを見ればよいかを確認したいです。
在庫数、再入荷までの時間、購入できるかを同じカードで表示します。
売り切れならButtonも押せなくするのですね。
Buyで在庫を減らし、0になったら再入荷タイマーを始めます。

完成イメージ
在庫を減らす
Buyを呼ぶたびにstockを1つ減らします。
売り切れを見せる
在庫0では購入Buttonを無効にして再入荷秒数を出します。
再入荷する
タイマーが0になったらmaxStockまで戻します。
導入
ショップカードに在庫数と再入荷までの時間を表示し、売り切れ時は購入Buttonを押せなくします。
これから作るもの
CanvasにTMPのStockLabelとTimerLabel、ButtonのBuyButtonを置きます。
ステップ1: 購入時に在庫を減らす
public void Buy(){ if(stock<=0)return; stock--; if(stock==0) restockLeft=restockSeconds; RefreshUi(); }
ステップ2: 売り切れを再入荷する
void Update(){ if(stock>0)return; restockLeft-=Time.deltaTime; if(restockLeft<=0)stock=maxStock; RefreshUi(); }
完成版
using UnityEngine;using UnityEngine.UI;using TMPro; public class MerchantStock:MonoBehaviour{[SerializeField]TMP_Text stockLabel,timerLabel;[SerializeField]Button buyButton;[SerializeField]int maxStock=5;[SerializeField]float restockSeconds=20;int stock=5;float left;public void Buy(){if(stock<=0)return;stock--;if(stock==0)left=restockSeconds;Refresh();}void Update(){if(stock==0&& (left-=Time.deltaTime)<=0)stock=maxStock;Refresh();}void Refresh(){stockLabel.text=$"在庫 {stock}";timerLabel.text=stock==0?$"再入荷 {left:0}秒":"購入できます";buyButton.interactable=stock>0;}}
購入Buttonを無効にするのはいつですか?
stockが0の時にButton.interactableをfalseにします。
流れは「価格を見るを表示」から始めて、「Buy Buttonで進める」で操作を入れる、と覚えればよいですか?
その通りです。その後に「所持金と比べるを確認」で途中状態を見て、「購入後を更新で結果を見る」で結果を確認します。順番を固定すると、失敗した場所も見つけやすくなります。
つまり、いきなり完成システムにせず、状態名、表示、値の変化を小さくそろえるのですね。
はい。最後は「ショップ価格と強化コストをわかりやすく考える」の考え方で、難しい処理をプレイヤーに伝わる短い合図へ置き換えられるか確認しましょう。
この記事のまとめ
売り切れ、限定品、次回入荷表示を使って、買い逃し不安と価格比較の迷いを減らすためのショップUI設計を整理します。
大きな違いを生むのは、派手な性能よりも 毎日触れる環境を無理なく整えること です。見やすい画面と使いやすい道具がそろうと、学習や次の一歩を決めやすくなります。