【问题标题】:Unity - "New" custom class instance isn't separated from other instanceUnity - “新”自定义类实例不与其他实例分离
【发布时间】:2015-07-06 16:59:11
【问题描述】:

解决了我自己,我很傻

解决了我自己,我很傻

解决了我自己,我很傻

请看下面我的回答。

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

在我的场景中,我从同一个预制件中实例化了 2 个游戏对象。每个都附加了一个 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 值都在两个实例化的 GameObjects 之间共享。

这是库存类的一个高峰:

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方法确实存在,有点长所以我只在需要时才发布)

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

【问题讨论】:

    标签: class unity3d inventory


    【解决方案1】:

    您是否看到inventoryCount 也出现在您的第二个游戏对象上?如果这是您的指标,表明gameobject2 的items 变量中有一个对象,则情况并非如此。 inventoryCount 是静态的,并且在 Inventory 的所有实例中都是相同的。尝试从inventoryCount 中删除static 关键字

    【讨论】:

    • 嗨,inventoryCount 应该是静态的,因为它应该计算所有已创建的库存实例,所以我可以给它们一个唯一的增量 ID,如构造函数中所示。我确实注意到每个对象的 ID 是不同的并且有效。所以问题一定在列表中的某个地方。
    • 在这种情况下,我唯一能想到的另一件事是预制系统正在惹恼你。您是在代码中实例化对象还是将它们拖到场景中?如果您将它们拖入,请先尝试将它们与预制件分离。 answers.unity3d.com/questions/11138/…
    • 嘿,我解决了这个问题。基本上我真的很愚蠢并且相信我的用户界面显示给我的东西。当我检查检查员时,一切正常。问题出在 UI 中。
    • 我在下面看到了你的答案。很高兴你修好了!更新您的 OP,我想将其标记为已关闭 :)
    • 干杯!我已经编辑了 OP,但我还不能关闭线程,因为我回答了我自己的问题,我必须等待 2 天。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      在上面的 inventory 不是你的 InventoryManager 类的任何成员,GetComponent 本身返回其类的实例。我相信您想在 List&lt;Item&gt; 属性中添加一个项目。所以代码应该如下所示:

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

      编辑:

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

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

      希望对你有帮助!!

      【讨论】:

      • 嗨,对不起。我上面发布的课程不是InventoryManager,而是Inventory 课程。我将编辑 OP,这样会更清楚。
      猜你喜欢
      • 2015-10-12
      • 2010-09-23
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多