首页 > 解决方案 > 以编程方式将精灵分配给新图像

问题描述

我有一个包含图像的结构 InventorySlot 和一个包含 Sprite 的 Item 类。当我单击特定的库存槽时,我想装备该物品,但是当我尝试将 Sprite 分配给新 InventorySlot 对象上的图像时,它会出现空引用错误。

public override void Click(Inventory inventory)
{
    var inventorySlot = new InventorySlot();
    inventorySlot.Image.sprite = Item.sprite; // TODO: This line is throwing an exception
    inventorySlot.InventoryItem = this;
    inventory.armourSlot.EquipItem(inventorySlot);
}

有没有办法我可以做到这一点?

标签: c#unity3d

解决方案


当您创建 InventorySlot 的新实例时,它不会自动为其中的变量创建组件。因此,在初始化inventorySlot 之后,您需要将Image 设置为您希望它使用的任何Image 组件。这样它就不是空的。

或者,我建议通常以不同的方式执行此操作。

  • 在 InventorySlot 结构上方添加 [System.Serializable] 以便可以在检查器中查看。
  • 在此脚本中列出 InventorySlot。
  • 在检查器中分配所有图像引用。
  • 然后当你装备一个物品时,而不是创建一个全新的 InventorySlot,只需从你的列表中更改相应插槽的精灵。

推荐阅读