【发布时间】:2020-10-17 10:24:38
【问题描述】:
我正在为我的手机游戏制作库存系统。当我点击播放按钮时,我会在我的库存中加载物品,当我拿起一个物品时,它会发生在我身上:
Unity 在我打开物品栏时添加物品栏,在我拿起物品时添加新物品栏... 但是如果我先拿起物品然后打开我的库存,我就没有这个问题。
DisplayInventory.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class DisplayInventory : MonoBehaviour
{
public InventoryObject inventory;
public float X_SPACE_BETWEEN_ITEM;
public float Y_SPACE_BETWEEN_ITEM;
public float X_START;
public float Y_START;
public int NUMBER_OF_COLUMN;
Dictionary<InventorySlot, GameObject> itemsDisplayed = new Dictionary<InventorySlot, GameObject>();
private void Start()
{
CreateDisplay();
}
private void Update()
{
UpdateDisplay();
}
public void UpdateDisplay()
{
for (int i = 0; i < inventory.Container.Count; i++)
{
if (itemsDisplayed.ContainsKey(inventory.Container[i]))
{
itemsDisplayed[inventory.Container[i]].GetComponentInChildren<TextMeshProUGUI>().text = inventory.Container[i].amount.ToString("n0");
}
else
{
var obj = Instantiate(inventory.Container[i].item.prefab, Vector3.zero, Quaternion.identity, transform);
obj.GetComponent<RectTransform>().localPosition = GetPosition(i);
obj.GetComponentInChildren<TextMeshProUGUI>().text = inventory.Container[i].amount.ToString("n0");
itemsDisplayed.Add(inventory.Container[i], obj);
}
}
}
public void CreateDisplay()
{
for (int i = 0; i < inventory.Container.Count; i++)
{
var obj = Instantiate(inventory.Container[i].item.prefab, Vector3.zero, Quaternion.identity, transform);
obj.GetComponent<RectTransform>().localPosition = GetPosition(i);
obj.GetComponentInChildren<TextMeshProUGUI>().text = inventory.Container[i].amount.ToString("n0");
}
}
public Vector3 GetPosition(int i)
{
return new Vector3(X_START + (X_SPACE_BETWEEN_ITEM * (i % NUMBER_OF_COLUMN)), Y_START + ((-Y_SPACE_BETWEEN_ITEM * (i / NUMBER_OF_COLUMN))), 0f);
}
}
播放器.cs
public class Player : MonoBehaviour
{
...
public OpenCloseInventory openCloseInventory;
public InventoryObject inventory;
private void Awake()
{
openCloseInventory.inventory.SetActive(true);
inventory.Load();
openCloseInventory.inventory.SetActive(false);
}
...
}
谁能帮帮我?
【问题讨论】: