133 lines
4.6 KiB
C#
133 lines
4.6 KiB
C#
#if UNITY_EDITOR
|
|
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using UnityEditor.SearchService;
|
|
|
|
public class AssetPreviewSaver : MonoBehaviour
|
|
{
|
|
[MenuItem("Tools/Save Asset Previews")]
|
|
private static void SaveAssetPreviews()
|
|
{
|
|
string path = "Assets/AssetPreviews";
|
|
if (!Directory.Exists(path))
|
|
Directory.CreateDirectory(path);
|
|
|
|
foreach (var obj in Selection.objects)
|
|
{
|
|
Texture2D preview = AssetPreview.GetAssetPreview(obj);
|
|
if (preview != null)
|
|
{
|
|
byte[] bytes = preview.EncodeToPNG();
|
|
File.WriteAllBytes($"{path}/{obj.name}_Preview.png", bytes);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning($"No preview available for {obj.name}");
|
|
}
|
|
}
|
|
|
|
AssetDatabase.Refresh();
|
|
Debug.Log("Asset previews saved to " + path);
|
|
}
|
|
[MenuItem("Tools/Save High Quality Asset Previews")]
|
|
private static void SaveHighQualityPreviews()
|
|
{
|
|
string path = "Assets/Resources/Prefabs/Item/Preview";
|
|
if (!Directory.Exists(path))
|
|
Directory.CreateDirectory(path);
|
|
|
|
foreach (var obj in Selection.objects)
|
|
{
|
|
GameObject prefab = obj as GameObject;
|
|
if (prefab == null) continue;
|
|
|
|
GameObject instance = Instantiate(prefab);
|
|
instance.transform.localScale = new Vector3(3, 3, 3);
|
|
Camera camera = new GameObject("PreviewCamera").AddComponent<Camera>();
|
|
camera.backgroundColor = Color.clear;
|
|
camera.clearFlags = CameraClearFlags.SolidColor;
|
|
camera.orthographic = false;
|
|
camera.fieldOfView = 60f;
|
|
|
|
// Bounds bounds = CalculateBounds(instance);
|
|
camera.transform.position = new Vector3(-0.981999993f,0.720000029f,0.717000008f);
|
|
camera.transform.rotation = Quaternion.Euler(25.430006f,107.999992f,359.778992f);
|
|
RenderTexture rt = new RenderTexture(1080, 1080, 24);
|
|
camera.targetTexture = rt;
|
|
Texture2D screenshot = new Texture2D(1080, 1080, TextureFormat.ARGB32, false);
|
|
|
|
camera.Render();
|
|
RenderTexture.active = rt;
|
|
screenshot.ReadPixels(new Rect(0, 0, 1080, 1080), 0, 0);
|
|
screenshot.Apply();
|
|
|
|
byte[] bytes = screenshot.EncodeToPNG();
|
|
File.WriteAllBytes($"{path}/{obj.name}.png", bytes);
|
|
|
|
// Clean up
|
|
DestroyImmediate(instance);
|
|
DestroyImmediate(camera.gameObject);
|
|
RenderTexture.active = null;
|
|
rt.Release();
|
|
}
|
|
|
|
AssetDatabase.Refresh();
|
|
Debug.Log("High-quality previews saved to " + path);
|
|
}
|
|
[MenuItem("Tools/Render Prefab Preview")]
|
|
private static void RenderPrefabPreviewFromScene()
|
|
{
|
|
static void RenderPreview(GameObject prefabObject)
|
|
{
|
|
Camera camera = FindObjectOfType<Camera>();
|
|
if (camera == null)
|
|
{
|
|
return;
|
|
}
|
|
int resolution = 1080;
|
|
RenderTexture rt = new RenderTexture(resolution, resolution, 24);
|
|
camera.targetTexture = rt;
|
|
camera.Render();
|
|
Texture2D screenshot = new Texture2D(resolution, resolution, TextureFormat.ARGB32, false);
|
|
RenderTexture.active = rt;
|
|
screenshot.ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
|
|
screenshot.Apply();
|
|
string path = $"Assets/Resources/Prefabs/Item/Preview/Sprite_{prefabObject.name}.png";
|
|
System.IO.File.WriteAllBytes(path, screenshot.EncodeToPNG());
|
|
camera.targetTexture = null;
|
|
RenderTexture.active = null;
|
|
DestroyImmediate(rt);
|
|
AssetDatabase.Refresh();
|
|
Debug.Log($"Preview saved for {prefabObject.name} at {path}");
|
|
}
|
|
static GameObject[] GetRootObjects()
|
|
{
|
|
return GameObject.FindObjectsOfType<GameObject>()
|
|
.Where(obj => obj.transform.parent == null)
|
|
.ToArray();
|
|
}
|
|
|
|
GameObject[] allObjects = GetRootObjects();
|
|
GameObject prefabObject = null;
|
|
foreach (GameObject obj in allObjects)
|
|
{
|
|
if (obj.GetComponent<Camera>() == null && obj.GetComponent<Light>() == null)
|
|
{
|
|
prefabObject = obj;
|
|
break;
|
|
}
|
|
}
|
|
if (prefabObject != null)
|
|
{
|
|
string prefabName = prefabObject.name;
|
|
Debug.Log($"Found prefab: {prefabName}");
|
|
RenderPreview(prefabObject);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|