クラフトレシピ
CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 63/64。
チャレンジ
難しいCraftingBench にレシピを設定しましょう。
- シリアライズ可能な
Ingredient(publicitem、amount)とRecipe(publicresult、List<Ingredient> needs)、および publicList<Recipe> recipesを追加します。 Startで、recipeButtons[i]がCraft(i)を呼び出すようにします。public void Craft(int index):必要な素材がすべてそろっている場合、それらを取り除き、結果を1つ追加し、Crafted Axeをログに出力します。Refreshによって、レシピを作成できる場合にのみボタンをクリック可能にします。
「プレイ」を押して、いかだを作りましょう。その後、「確認」を押します。
自分で試してみよう
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class CraftingBench : MonoBehaviour
{
[SerializeField] private Inventory inventory;
[SerializeField] private Button[] recipeButtons;
[SerializeField] private Button woodButton;
[SerializeField] private Button stoneButton;
[SerializeField] private TMP_Text inventoryText;
void OnEnable()
{
inventory.Changed += Refresh;
}
void OnDisable()
{
inventory.Changed -= Refresh;
}
void Start()
{
woodButton.onClick.AddListener(() => inventory.Add("Wood", 1));
stoneButton.onClick.AddListener(() => inventory.Add("Stone", 1));
// レシピ: レシピボタン i でレシピ i を作成する
Refresh();
}
void Refresh()
{
// レシピ: レシピボタンは、対応するレシピを作成できる間だけクリックできる
inventoryText.text = "Inventory: " + inventory.Describe();
}
}
Unityのゲームアーキテクチャのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド