用PreviewRenderUtility就不用自己再去创建摄像机来做模型在Editor下的预览了

需要注意,默认是用场景天空盒和场景灯光。参考ShaderForge编辑器的做法,配置自定义灯光

这些Unity都有提供接口,不用自己再去创建

using UnityEngine;
using System.Collections;
using UnityEditor;
using UnityEditorInternal; public class Foo : EditorWindow
{
Mesh mPreviewMesh;
Material mPreviewMaterial;
PreviewRenderUtility mPreviewRenderUtility; [MenuItem("Tools/Foo")]
static void Setup()
{
GetWindow<Foo>();
} void OnGUI()
{
if (mPreviewRenderUtility == null)
{
mPreviewRenderUtility = new PreviewRenderUtility();
mPreviewRenderUtility.m_Camera.farClipPlane = ;
mPreviewRenderUtility.m_Camera.clearFlags = CameraClearFlags.SolidColor;
mPreviewRenderUtility.m_Camera.transform.position = new Vector3(, , -); var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
var meshFilter = go.GetComponent<MeshFilter>();
mPreviewMesh = meshFilter.sharedMesh;
mPreviewMaterial = go.GetComponent<MeshRenderer>().sharedMaterial; DestroyImmediate(go);
} var drawRect = new Rect(, , , );
mPreviewRenderUtility.BeginPreview(drawRect, GUIStyle.none); InternalEditorUtility.SetCustomLighting(mPreviewRenderUtility.m_Light, new Color(0.6f, 0.6f, 0.6f, 1f)); mPreviewRenderUtility.DrawMesh(mPreviewMesh, Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(, , ), Vector3.one), mPreviewMaterial, ); mPreviewRenderUtility.m_Camera.Render();
var texture = mPreviewRenderUtility.EndPreview(); InternalEditorUtility.RemoveCustomLighting(); GUI.Box(drawRect, texture);
}
}

效果:

天空盒的话可以自行配置一个带Cubemap的shader:

PreviewRenderUtility的Example的更多相关文章

随机推荐

  1. Python接收邮件并保存至MySQL

    转自:http://www.360doc.com/content/14/0103/13/11789990_342303735.shtml 参考了一些网络上的资料,做了个简单程序,使用python接收邮 ...

  2. Flash:彻底理解crossdomain.xml、跨swf调用。

    安全域.crossdomain.xml,到处都有各种各种零碎的基础解释,所以这里不再复述这些概念. 本文目的是整理一下各种跨域加载的情况.什么时候会加载crossdomain,什么时候不加载.   1 ...

  3. java 将数字转成成16进制

      java 将数字转成成16进制 CreationTime--2018年6月11日17点11分 Author:Marydon 1.前提 数字必须是byte类型,即[-128,127] 2.代码实现 ...

  4. 移植到windows下的iconv

    This is a short memo about installing iconv on Windows host (specifically: Windows 7 SP1 x64). Iconv ...

  5. HBase Go客户端Row构造注意事项

    1. Hbase 的Go客户端语言使用方法 2. Hbase的Row使用注意事项 2.1. Row的前几个字段尽量散列 2.2. Row的排序是把所有Row中的字符做字典排序 我们最近在一个项目中使用 ...

  6. 禁止logback输出状态信息

    一.问题描述 22:18:07,299 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resourc ...

  7. iOS 中的各种锁

    在日常开发过程中,为了提升程序运行效率,以及用户体验,我们经常使用多线程.在使用多线程的过程中,难免会遇到资源竞争问题.我们采用锁的机制来确保线程安全. 线程安全 当一个线程访问数据的时候,其他的线程 ...

  8. 观文章《Linux系统管理员修炼三层次》有感

     层次,都不陌生,通俗讲,就是和档次挂钩的,初入江湖时,都想自己几年后,武艺精深,深藏百技,忙时带领团队打BOSS,闲时喝酒论道,博古纵今,想想都令人精神满满,干劲十足!!! 至今已入江湖几载,回首来 ...

  9. kafka负载均衡相关资料收集(二)

    [转]关于kafka producer 分区策略的思考 from:http://blog.csdn.net/ouyang111222/article/details/51086037 今天跑了一个简单 ...

  10. Linux下网卡混杂模式设置和取消

    工作中发现一个网卡工作状态不对了,查看了一下,发现这个网卡和正常工作的网卡  信息不一样,它显示的居然是混杂模式,而正常工作的是  running 模式 ,所以来了解下混杂模式怎么取消... 下文来自 ...