首页 > 解决方案 > 库存不良视觉问题

问题描述

我正在为我的手机游戏制作库存系统。当我点击播放按钮时,我会在我的库存中加载物品,当我拿起一件物品时,它会发生在我身上:

在此处输入图像描述

当我打开我的物品栏时,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);
    }
 
    ...

}

谁能帮帮我?

标签: c#unity3dinventory

解决方案


我发现 !而不是添加一个插槽,只需检查是否已经有一个,然后修改项目的数量。


推荐阅读