Unity - "New" 自定义 class 实例未与其他实例分离

Unity - "New" custom class instance isn't separated from other instance

自己解决了,我傻

自己解决了,我傻

自己解决了,我傻

请参阅下面我的回答。

此处 classes 有问题,不确定原因。

在我的场景中,我从同一个预制件实例化了 2 个游戏对象。每个都附加了一个 InventoryManager 脚本,在这个脚本中,我正在使用 InventoryManager:

创建一个名为 Inventory 的新实例 class
using UnityEngine;
using System.Collections;

public class InventoryManager : MonoBehaviour {

    public Inventory inventory;
    private ItemDatabase itemDatabase;

    void Start () 
    {
        inventory = new Inventory (9);
    }
}

但无论出于何种原因,我的清单 class 中的任何列表值都在两个实例化的游戏对象之间共享。

这是库存的峰值class:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class Inventory
{
    public int ID;
    public List<Item> items = new List<Item>();
    public int maxSize;

    public static int inventoryCount;

    public Inventory(int size)
    {
        ID = inventoryCount;
        inventoryCount++;
        maxSize = size;
    }
}

基本上,当我添加一个新东西到

gameobject1.GetComponent<InventoryManager>().inventory.Add(item1);

(add 方法确实存在,它有点长所以如果需要我只会 post 它)

它也会出现在 gameobject2 的物品栏中。

您是否看到 inventoryCount 也在您的第二个游戏对象上上升?如果那是你的指标,表明 gameobject2 的 items 变量中有一个对象,但事实并非如此。 inventoryCount 是静态的,在 Inventory 的所有实例中都是相同的。尝试从 inventoryCount

中删除 static 关键字

让我们看看您现有的代码:

gameobject1.GetComponent<InventoryManager>().inventory.Add(item1);

上面的 inventory 不是您 InventoryManager 的任何成员 class 和 GetComponent 本身 return 其 class 的实例.我相信您想在 List<Item> 属性 中添加一个项目。所以代码应该如下所示:

gameobject1.GetComponent<InventoryManager>().Items.Add(item1);

编辑:

根据更新后的问题,建议的解决方案是

gameobject1.GetComponent<InventoryManager>().inventory.Items.Add(item1);

希望对您有所帮助!!

好吧,我觉得自己完全是个傻瓜,当然我会在发布后解决这个问题。

基本上,我犯了一个非常非常愚蠢的错误,即我的 UI 显示的是表面价值,而不是使用检查器来查看库存中的实际情况。

问题是我的 UI 显示了错误的内容。