我正在尝试制作一个商店系统,有一个
public List<CargoStock> StockList;
这是 CargoStock.cs:
[System.Serializable]
public class CargoStock
{
//public CargoSO CargoSO; // Un-commenting this gives the error.
public short Amount;
public bool Import;
public bool Export;
public CargoStock() { }
public CargoStock(CargoSO cargoSO, short amount)
{
//this.CargoSO = cargoSO;
this.Amount = amount;
}
}
真正的错误源自 CargoSO.cs 内部:
[CreateAssetMenu(fileName = "CargoSO", menuName = "Scriptables/CargoSO", order = 3)]
[System.Serializable]
public class CargoSO : ScriptableObject
{
public CargoTypes CargoType;
public int ID;
public string Description;
public int Price;
public int Weight;
public Sprite Icon; // Results in following console errors:
(0,0): error - Sprite is not a supported type. Use a supported type or provide a custom serializer
(0,0): error - Could not create serializer for UnityEngine.Sprite.
(0,0): error - Sprite is not a supported type. Use a supported type or provide a custom serializer
(0,0): error - Could not create deserializer for UnityEngine.Sprite.
}
我意识到它是因为我有一个自定义类,它引用了一个带有 Sprite 类型的 ScriptableObject .. 如果我将 CargoStock.cs 变成 SO 或 MonoBehaviour,这个错误就会消失,但是我需要这个
CargoStock
成为一个自定义类,这样我就可以在编辑器中创建任意多个,只需添加新的 CargoStock
在Inspector中的
List<CargoStock>
元素。
这样我就可以简单地添加一个新的 StockCargo > 设置想要的 CargoSO 和数量,保存 StockList 脚本对象并完成:
[System.Serializable]
[CreateAssetMenu(fileName = "CargoShopStockSO", menuName = "GameDataSOs/CargoShopStockSO", order = 3)]
public class CargoShopStockSO : ScriptableObject
{
public List<CargoStock> CargoStocks;
}
这样我可以有一个单独的 SO 来保存每个商店的 stockList,但我可以轻松地更改库存,而不必为每个 CargoStock 实例创建 100 个 SO...
所以我真的需要 CargoStock 像现在一样成为自定义类。
作为变通办法,我可以做什么?或者我该如何解决这些错误? 谢谢。
编辑:我知道我可以使用 int 作为 ID 系统,以便稍后在需要时链接回 CargoSO,但我希望能够通过 Inspector 为每个 CargoStock 设置 CargoSO,以便设计人员可以轻松调整这些东西,并且不必查找匹配的 CargoSO 的 ID。