c# - 库存不良视觉问题
问题描述
我正在为我的手机游戏制作库存系统。当我点击播放按钮时,我会在我的库存中加载物品,当我拿起一件物品时,它会发生在我身上:
当我打开我的物品栏时,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);
}
...
}
谁能帮帮我?
解决方案
我发现 !而不是添加一个插槽,只需检查是否已经有一个,然后修改项目的数量。
推荐阅读
- maven - 具有完整 jar 名称的 Maven 复制依赖项
- python - 如何训练在线回归模型
- python - 使用 keras 进行训练总是在同一时期崩溃(或多或少)
- c# - 使用 NSwag.MSBuild 时的循环问题
- android - 在 xml 中设置翻译动画的持续时间
- java - 是否可以将浏览器的当前 URL 保存在 txt/csv 文件中?
- javascript - 分组复选框并有条件地显示输入字段
- azure - 列出 Azure 资源组、租户或订阅中的所有 DNS (FQDN)
- google-analytics - 通过谷歌分析报告API获取_gid值,可以吗?
- android - Android Kotlin SharedPreferences 保存错误