【问题标题】:Having trouble adding to a List that exists添加到存在的列表时遇到问题
【发布时间】:2019-01-05 12:21:47
【问题描述】:

所以我有一个包含列表清单的用户脚本。然后我使用一个公共静态 User 用户在整个游戏过程中访问单个用户的信息。

问题是在某些时候我失去了指向该库存的链接。 在唤醒函数中,如果我调用 Debug.Log(User.user.inventory.Count),它会打印 0。 但是,如果我将来尝试访问此库存,我会收到空​​引用错误,就好像它不存在并且无法添加到它一样。

如果我将检查器中列表的大小设置为 1,那么它会以某种方式存在,我可以永远添加东西,但是我在索引 0 处有一个死点。

 private void AddItemToInventory(ItemObject item, Image uiSprite)
    {
        User.user.inventory.Add(item);
        uiSprite.sprite = GenerateOrbRaritySprite(RaritySprites.raritySprites, item.rarity);
        uiSprite.enabled = true;
    }

库存查找失败,尽管我可以在检查器中看到它。

我的用户具有以下 Awake() 函数,以便它停留在场景之间:

void Awake()
{
    if(user == null)
    {
        user = this;
        DontDestroyOnLoad(gameObject);
    }
    else if (user != this)
    {
        Destroy(gameObject);
    }
}

有什么想法吗?谢谢!

【问题讨论】:

  • 你的对象真的被User.user.访问了吗?
  • 它只是一个静态用户实例:在 User.cs 我有公共 List 库存;然后我的用户实例被称为用户。公共静态用户用户;
  • 通常你会称它为User.Instance...

标签: c# unity3d


【解决方案1】:

只尝试一位用户。

private void AddItemToInventory(ItemObject item, Image uiSprite)
{
    user.inventory.add(item);
    uiSprite.sprite = GenerateOrbRaritySprite(RaritySprites.raritySprites, item.rarity);
    uiSprite.enabled = true;
} 

由于此方法无法访问用户,因此用户需要作为参数传入。

private void AddItemToInventory(User user, ItemObject item, Image uiSprite)
{
    user.inventory.add(item);
    uiSprite.sprite = GenerateOrbRaritySprite(RaritySprites.raritySprites, item.rarity);
    uiSprite.enabled = true;
}

【讨论】:

  • 嗨 bruglesco 感谢您的回复!我收到用户在此上下文中不存在的错误,因为我在与创建静态用户实例不同的脚本中添加到库存。
  • @Holden 您需要先访问用户,然后才能使用新库存对其进行更新。将用户作为参数传递是否有效?
  • 它没有用,但它让我得到了答案!有一个地方我用一个空白的地方覆盖了我的库存。谢谢你的指导!
猜你喜欢
  • 2023-03-23
  • 2021-11-05
  • 2014-06-06
  • 2012-10-31
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
相关资源
最近更新 更多