我有一组预制件,我想在我的自定义编辑器中显示预览。这适用于具有网格渲染器的游戏对象,例如基本四边形。但是,当我尝试AssetPreview.GetAssetPreview(tilePrefab.gameObject);
在带有 UnityEngine.UI.Image 和画布渲染器的游戏对象上使用时,它总是返回 null。
下面是绘制预览的代码部分。
public class MapEditor : Editor
{
public override void OnInspectorGUI()
{
for (int prefabIndex = 0; prefabIndex < TileSet.TilePrefabs.Count; prefabIndex++)
DrawIconTexture(prefabIndex, columnCount);
}
private void DrawIconTexture(int prefabIndex, int columnCount)
{
TileBehaviour tilePrefab = TileSet.TilePrefabs[prefabIndex];
Texture iconTexture = AssetPreview.GetAssetPreview(tilePrefab.gameObject);
Rect iconRect = GetIconRect(prefabIndex, columnCount);
if (iconTexture != null)
GUI.DrawTexture(iconRect, iconTexture);
else if (AssetPreview.IsLoadingAssetPreview(tilePrefab.gameObject.GetInstanceID()))
Repaint();
}
}
我知道 GetAssetPreview 异步加载资产,这是通过重绘解决的。我也试过
while(iconTexture == null)
iconTexture = AssetPreview.GetAssetPreview(tilePrefab.gameObject);
但这永远不会结束。
我也尝试使用图像的纹理
if (iconTexture == null)
iconTexture = tilePrefab.GetComponent<Image>().sprite.texture;
但这不起作用,因为精灵在地图集中并且所有地图集都显示出来了。