我有一个课程Item
,如下所示
[System.Serializable]
public class Item
{
public string itemName;
public Sprite icon;
public float price = 1f;
public Item(string newItemName, Sprite newIcon, float newPrice)
{
this.itemName = newItemName;
this.icon = newIcon;
this.price = newPrice;
}
}
然后,在开始时在不同的类上填充项目列表,这是代码。
void Start () {
itemList = new List<Item>();
TextAsset asset = Resources.Load(Path.Combine("Maps", "items")) as TextAsset;
var items = JsonHelper.FromJson<Item>(asset.text);
Debug.Log("" + items.Length);
for(int i= 0; i < items.Length; i++)
{
itemList.Add(new Item(items[i].itemName, Resources.Load<Sprite>(items[i].icon), items[i].price));
}
RefreshDisplay();
}
这是items.txt
Assets/Resources/Maps/
文件
{"Items":[{
"id": "1",
"itemName": "Candy",
"price": "2",
"icon" : "ic_candy"
},
{
"id": "2",
"itemName": "Coin",
"price": "10",
"icon" : "ic_coin"
},
{
"id": "3",
"itemName": "Bomb",
"price": "8",
"icon" : "ic_bomb"
}]
}
我收到错误说
参数1:无法从'UnityEngine.Sprite'转换为'string'
在itemList.Add(new Item(items[i].itemName, Resources.Load<Sprite>(items[i].icon), items[i].price));
我尝试将sprite的路径名(items[i].icon
)发送给构造函数但仍然出错。
可以解决什么问题?
答案 0 :(得分:3)
问题在于:
Resources.Load<Sprite>(items[i].icon)
Item
类中的图标变量为Sprite
类型,但 Resources.Load
是一个采用string
类型的路径的函数它的参数。要缩短此短消息,您将Sprite
传递给期望为string
的参数。
简单的解决方案是添加另一个名为public string iconPath;
的变量。然后,您可以使用它将Sprite
加载到public Sprite icon;
变量。
下面的内容应该这样做:
[System.Serializable]
public class Item
{
public string itemName;
public string iconPath;
public float price = 1f;
[System.NonSerialized]
public Sprite icon;
public Item(string newItemName, Sprite newIcon, float newPrice)
{
this.itemName = newItemName;
this.icon = newIcon;
this.price = newPrice;
}
}
// Use this for initialization
void Start()
{
itemList = new List<Item>();
TextAsset asset = Resources.Load(Path.Combine("Maps", "items")) as TextAsset;
var items = JsonHelper.FromJson<Item>(asset.text);
Debug.Log("" + items.Length);
for (int i = 0; i < items.Length; i++)
{
itemList.Add(new Item(items[i].itemName, Resources.Load<Sprite>(items[i].iconPath), items[i].price));
}
}
确保更新您的Json文件以容纳新的变量名称。