团结 - "新"自定义类实例未与其他实例

时间:2015-07-06 16:59:12

标签: class unity3d inventory

解决了我自己,我傻了

解决了我自己,我傻了

解决了我自己,我傻了

请参阅下面的答案。

这里的课程有问题,不确定原因。

在我的场景中,我有2个GameObjects从同一个预制件中实例化。每个都附加了一个InventoryManager脚本,在这个脚本中,我使用InventoryManager内部创建一个名为Inventory的类的新实例:

using UnityEngine;
using System.Collections;

public class InventoryManager : MonoBehaviour {

    public Inventory inventory;
    private ItemDatabase itemDatabase;

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

但无论出于何种原因,我的Inventory类中的任何List值都在两个实例化的GameObject之间共享。

这是库存类的高峰期:

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);

(添加方法确实存在,它有点长,所以我只会在请求时发布它)

它也会显示在gameobject2的广告资源中。

3 个答案:

答案 0 :(得分:1)

你是否看到inventoryCount也在你的第二个游戏对象上?如果那是你的指示,即gameobject2的items变量中有一个对象,则情况并非如此。 inventoryCount是静态的,并且在Inventory的所有实例中都是相同的。尝试从static

中删除inventoryCount关键字

答案 1 :(得分:0)

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

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

在上面,inventory不是你InventoryManager类的任何一个,GetComponent本身会返回它的类的实例。我相信你想在List<Item>属性中添加一个项目。所以代码应如下所示:

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

修改

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

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

希望这会有所帮助!!

答案 2 :(得分:0)

好吧所以我觉得自己总是太过分了,当然我会在发布之后解决这个问题。

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

问题在于我的用户界面显示错误的内容。