如何将包含 Texture2D 的 UnityEngine.Object[] 转换为 Texture2D[]

How can I convert UnityEngine.Object[] that contains Texture2D to Texture2D[]

如何将 UnityEngine.Object[] 转换为 Texture2D[]?

我正在使用这个脚本:

    void Start()
{
    string dataFileName = "skins";
    string tempPath = Path.Combine(Application.persistentDataPath, "AssetData");
    tempPath = Path.Combine(tempPath, dataFileName + ".unity3d");

    StartCoroutine(LoadObject(tempPath).GetEnumerator());
    
}
IEnumerable LoadObject(string path)
{
    Debug.Log("Loading...");
    AssetBundleCreateRequest bundle = AssetBundle.LoadFromFileAsync(path);
    yield return bundle;

    AssetBundle myLoadedAssetBundle = bundle.assetBundle;
    if (myLoadedAssetBundle == null)
    {
        Debug.Log("Failed to load AssetBundle!");
        yield break;
    }

    AssetBundleRequest request = myLoadedAssetBundle.LoadAllAssetsAsync();
    yield return request;
    
    Texture2D[] obj = request.allAssets as Texture2D[]; 

    var path2 = Application.persistentDataPath + "/Item Images/";
    if (!Directory.Exists(Path.GetDirectoryName(path2)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(path2));
    }
    foreach (Texture2D s in obj)
    {
        byte[] itemBGBytes = s.EncodeToPNG();
        File.WriteAllBytes(Application.persistentDataPath + "/Item Images/" + s.name + ".png", itemBGBytes);
    }


    myLoadedAssetBundle.Unload(false);
}

无法将 Object[] 转换为 Texture2D[]。我从 Whosebug post ->

得到了这个脚本

如果你知道的request.allAssets returns object[] 是 Texture2D ,那么你可以尝试:

object[] aObj = request.allAssets;
Texture2D[] aT2D = Array.ConvertAll(aObj, x => (Texture2D) x);