カスタム エディターでプレビューを表示したいプレハブの配列があります。これは、基本的なクワッドなど、メッシュ レンダラーを備えたゲーム オブジェクトで機能します。ただし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;
しかし、スプライトがアトラスにあり、すべてのアトラスが表示されているため、それは機能しません。