You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

转换失败原因

C# 数组协变仅支持派生类数组转基类数组的单向转换,不支持反向转换。request.allAssets返回值为UnityEngine.Object[]类型,即使数组内所有元素都是Texture2D实例,也无法直接通过as操作符将数组整体转换为Texture2D[],该操作会直接返回null,后续遍历逻辑会触发空引用异常。

解决方案

方案1:使用LINQ转换(最简便)

首先在脚本顶部引入LINQ命名空间:

using System.Linq;

将原转换代码:

Texture2D[] obj = request.allAssets as Texture2D[]; 

替换为对应逻辑即可:

  • 确认AssetBundle内所有资源都是Texture2D类型时,使用Cast直接转换所有元素:
Texture2D[] obj = request.allAssets.Cast<Texture2D>().ToArray();
  • AssetBundle内可能存在其他类型资源时,使用OfType自动过滤不符合类型的资源,避免转换报错:
Texture2D[] obj = request.allAssets.OfType<Texture2D>().ToArray();

方案2:手动遍历转换(无需引入LINQ)

如果项目不需要引入LINQ命名空间,可手动遍历数组逐个转换:

Object[] allAssets = request.allAssets;
Texture2D[] obj = new Texture2D[allAssets.Length];
for (int i = 0; i < allAssets.Length; i++)
{
    obj[i] = allAssets[i] as Texture2D;
    // 可选:添加非空判断跳过非Texture2D类型资源
    // if (obj[i] == null) continue;
}

内容的提问来源于stack exchange,提问作者Kadir Özyıldırım

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:18:05