Unity 在通用类中使用 Resources.Load

问题描述 投票:0回答:1

所以我有多种数据类型,如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 类型转换。

c# unity-game-engine
1个回答
0
投票

在您的实现中,

T
可以是任何类型,而
Resources.Load()
仅限于
UnityEngine.Object
类型。

这意味着如果您指定例如

int
作为您的
T
,无法从
UnityEngine.Object
转换为
int
。因此出现错误。

您只需对通用参数应用相同的限制即可:

public class ResourceCollector<T> where T : UnityEngine.Object

现在您只能使用

UnityEngine.Object
以及由它派生的类型与
ResourceCollector
,因此形式上保证了转换。

© www.soinside.com 2019 - 2024. All rights reserved.