制作配方
本课属于 Coddy Unity 学习旅程的“Unity 游戏架构”单元。第 63 课,共 64 课。
挑战
困难为 CraftingBench 添加配方。
- 添加可序列化的
Ingredient(公共item、amount)和Recipe(公共result、List<Ingredient> needs),以及公共List<Recipe> recipes。 - 在
Start中,让recipeButtons[i]调用Craft(i)。 public void Craft(int index):当所有所需材料都已拥有时,移除这些材料,添加一个成品,并记录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 在线编辑器