9 public static class pb_AssetPreview
11 private static Camera _previewCamera =
null;
13 private static Camera previewCamera
17 if (_previewCamera ==
null)
19 GameObject go =
new GameObject();
20 go.name =
"Asset Preview Camera";
21 go.transform.localRotation =
Quaternion.Euler(30f, -30f, 0f);
22 _previewCamera = go.AddComponent<Camera>();
23 _previewCamera.nearClipPlane = 0.01f;
27 return _previewCamera;
31 public static Texture2D GeneratePreview(
Object obj,
int width,
int height)
34 GameObject go = obj as GameObject;
36 if (PrepareCamera(previewCamera, go))
38 go = GameObject.Instantiate(go);
39 go.transform.position =
Vector3.zero;
41 RenderTexture renderTexture = RenderTexture.GetTemporary(width, height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Default, 1);
42 RenderTexture.active = renderTexture;
44 previewCamera.targetTexture = renderTexture;
45 previewCamera.Render();
47 tex =
new Texture2D(width, height);
48 tex.ReadPixels(
new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
51 RenderTexture.ReleaseTemporary(renderTexture);
53 pb_ObjectUtility.Destroy(go);
63 public static bool PrepareCamera(Camera cam, GameObject target,
int width,
int height)
70 MeshFilter mf = target.GetComponentInChildren<MeshFilter>();
72 if (mf !=
null && mf.sharedMesh !=
null)
74 bounds = mf.sharedMesh.bounds;
78 Renderer renderer = target.GetComponentInChildren<Renderer>();
83 bounds = renderer.bounds;
86 float dist = pb_ObjectUtility.CalcMinDistanceToBounds(cam, bounds, (mf !=
null ? mf.gameObject.transform.lossyScale.x : 1));
88 cam.transform.position = cam.transform.forward * -(dist) +
Vector3.one * 100;
93 public static bool PrepareCamera(Camera cam, GameObject target)
100 MeshFilter mf = target.GetComponentInChildren<MeshFilter>();
102 if (bounds ==
default)
104 if (mf !=
null && mf.sharedMesh !=
null)
106 bounds = mf.sharedMesh.bounds;
110 Renderer renderer = target.GetComponentInChildren<Renderer>();
112 if (renderer ==
null)
115 bounds = renderer.bounds;
119 float dist = pb_ObjectUtility.CalcMinDistanceToBounds(cam, bounds, (mf !=
null ? mf.gameObject.transform.lossyScale.x : 1));
121 cam.transform.position = cam.transform.forward * -(dist) +
Vector3.one * 100;
static Bounds GetBounds(GameObject go)