功能:在预制体编辑窗口选择带有MeshFilter的物体,预览窗口会显示截图按钮,可以将当前预览窗口中的图片保存为透明背景的Png格式图片
目前存在的问题:1.不能对整个预制体预览截图
2.灯光效果,不能像编辑器内置的那样跟随旋转(或者不应该转动相机)


using UnityEngine;
using UnityEditor;
using System.IO;
[CustomEditor(typeof(MeshFilter))]
[CanEditMultipleObjects]
public class MeshFilterPreview : Editor
{
private PreviewRenderUtility m_PreviewRenderUtility;
private MeshFilter m_TargetMeshFilter;
private MeshRenderer m_TargetMeshRenderer;
private static int sliderHash = "Slider".GetHashCode();
private Vector2 m_Drag;
Texture result_render;
private void ValidateData()
{
if (m_PreviewRenderUtility == null)
{
m_PreviewRenderUtility = new PreviewRenderUtility();
m_PreviewRenderUtility.camera.transform.position = new Vector3(0, 0, -6);
m_PreviewRenderUtility.camera.transform.rotation = Quaternion.identity;
}
m_TargetMeshFilter = target as MeshFilter;
m_TargetMeshRenderer = m_TargetMeshFilter.GetComponent<MeshRenderer>();
}
public override bool HasPreviewGUI()
{
ValidateData();
return true;
}
public override void OnPreviewGUI(Rect r, GUIStyle background)
{
m_Drag = Drag2D(m_Drag, r);
if (Event.current.type == EventType.Repaint)
{
if (m_TargetMeshRenderer == null)
{
EditorGUI.DropShadowLabel(r, "Mesh Renderer Required");
}
else
{
m_PreviewRenderUtility.BeginPreview(r, background);
m_PreviewRenderUtility.DrawMesh(m_TargetMeshFilter.sharedMesh, Matrix4x4.identity, m_TargetMeshRenderer.sharedMaterial, 0);
var mesh = m_TargetMeshFilter.sharedMesh;
var bounds =

博客介绍了Unity中预制体编辑窗口的截图功能,在选择带有MeshFilter的物体时,预览窗口会显示截图按钮,可保存为透明背景的Png图片。同时指出目前存在的问题,一是不能对整个预制体预览截图,二是灯光效果不能像编辑器内置那样跟随旋转。
最低0.47元/天 解锁文章
2万+





