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 显示了错误的内容。
自己解决了,我傻
自己解决了,我傻
自己解决了,我傻
请参阅下面我的回答。
此处 classes 有问题,不确定原因。
在我的场景中,我从同一个预制件实例化了 2 个游戏对象。每个都附加了一个 InventoryManager 脚本,在这个脚本中,我正在使用 InventoryManager:
创建一个名为 Inventory 的新实例 classusing 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 显示了错误的内容。