下面是一个简单的例子,演示了如何使用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的分离。
浙公网安备 33010602011771号