C# 以编程方式将精灵指定给新图像

C# 以编程方式将精灵指定给新图像,c#,unity3d,C#,Unity3d,我有一个结构InventorySlot,它保存一个图像,还有一个Item类保存一个精灵。当我点击一个特定的库存插槽时,我想装备该物品,但是当我尝试将精灵分配给一个新的库存插槽对象上的图像时,它会出现一个空引用错误 public override void Click(Inventory inventory) { var inventorySlot = new InventorySlot(); inventorySlot.Image.sprite = Item.sprite; //

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

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);
}

有什么方法可以做到这一点吗?

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

或者,我建议总体上采取不同的做法

  • 在InventorySlot结构上方添加[System.Serializable],以便可以在inspector中查看它
  • 在此脚本中列出InventorySlot
  • 在inspector中指定所有图像引用
  • 然后,当你装备一个物品时,不要创建一个全新的库存槽,只需从列表中更改相应槽位的精灵即可

如果检查InventorySlot,图像是否会默认为新建?我怀疑它是非斜体的(null),这会导致在执行slot.Image时出现异常,或者在执行slot.Image=new之前就在行上……是的,它是null,并且我不能在行上新建图像,因为图像构造函数受到保护。