所以我有多种数据类型,如armorData、weaponData、itemData等,并希望为它们创建通用资源加载(它们是可编写脚本的对象),但显然T或system.Object不能转换为由资源返回的UnityEngine.Object .Load<>() 方法。 所以我的问题是,有没有办法让下面的代码可以得到像 Resources.Load() 这样的东西
public class RessourceCollector<T>
{
public List<T> LoadPlayerResources(SaveDataStructure savedPlayerStats, List<string> savedCollection, string folderPath)
{
List<T> itemResources = new List<T>();
foreach (var armorSaveData in savedCollection)
{
T itemDataFromResources = LoadFromResource(folderPath, armorSaveData);
itemResources.Add(itemDataFromResources);
}
return itemResources;
}
public T LoadFromResource(string path, string itemName)
{
return Resources.Load<T>(Path.Combine(path, itemName));
}
}
我尝试使用T或System。对象/对象,但没有任何东西可以从 UnityEngine.Object 类型转换。
在您的实现中,
T
可以是任何类型,而Resources.Load()
仅限于UnityEngine.Object
类型。
这意味着如果您指定例如
int
作为您的 T
,无法从 UnityEngine.Object
转换为 int
。因此出现错误。
您只需对通用参数应用相同的限制即可:
public class ResourceCollector<T> where T : UnityEngine.Object
现在您只能使用
UnityEngine.Object
以及由它派生的类型与 ResourceCollector
,因此形式上保证了转换。