解决了我自己,我傻了
解决了我自己,我傻了
解决了我自己,我傻了
请参阅下面的答案。
这里的课程有问题,不确定原因。
在我的场景中,我有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的广告资源中。
答案 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显示的是面值,而不是使用检查器来查看库存中的实际内容。
问题在于我的用户界面显示错误的内容。