下面是一个简单的例子,演示了如何使用ScriptableObject和Unity的事件系统来实现逻辑和UI的分离:
csharp Copy code // 数据模型 [CreateAssetMenu(fileName = "New Item", menuName = "Inventory/Item")] public class ItemData : ScriptableObject { public int itemId; public string itemName; // 其他属性... } // 逻辑代码 public class InventoryManager : MonoBehaviour { public UnityEvent onItemAdded = new UnityEvent(); public List<ItemData> inventory = new List<ItemData>(); public void AddItem(ItemData item) { inventory.Add(item); onItemAdded.Invoke(); } } // UI代码 public class InventoryUI : MonoBehaviour { public Text itemNameText; public InventoryManager inventoryManager; private void Start() { inventoryManager.onItemAdded.AddListener(UpdateUI); } private void UpdateUI() { // 更新UI元素,例如显示物品名称 if (inventoryManager.inventory.Count > 0) { itemNameText.text = inventoryManager.inventory[inventoryManager.inventory.Count - 1].itemName; } } }
在这个例子中,ItemData
表示物品的数据模型,InventoryManager
负责处理背包逻辑,而InventoryUI
负责处理与UI相关的逻辑。通过使用Unity的事件系统,我们可以在物品添加到背包时通知UI进行更新,实现了逻辑和UI的分离。