首先上效果图:

  编辑器代码:

using UnityEngine;
using UnityEditor;
using System.Collections; public class LightmapAnalysisEditor : EditorWindow
{
private static EditorWindow window; [MenuItem("MyEditor/LightmapAnalysis &q")]
private static void Execute()
{
if (window == null)
window = (LightmapAnalysisEditor)GetWindow(typeof(LightmapAnalysisEditor));
window.minSize = new Vector2(, );
window.Show();
} private void OnGUI()
{
if (GUILayout.Button("光照贴图比例精度", GUILayout.Height(50f)))
{
GameObject go = GameObject.Find("LightmapScaleInfo");
if(go == null)
{
go = new GameObject("LightmapScaleInfo");
} var comp = go.GetComponent<LightmapScaleAnalysis>();
if(comp == null)
{
comp = go.AddComponent<LightmapScaleAnalysis>();
} Selection.activeObject = go;
EditorGUIUtility.PingObject(go);
}
} }

  脚本代码:

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Linq;
using System.Collections;
using System.Collections.Generic; [ExecuteInEditMode]
public class LightmapScaleAnalysis : MonoBehaviour
{
public GameObject target = null;
public Dictionary<GameObject, float> dic = new Dictionary<GameObject, float>(); public void Parse()
{
dic.Clear(); if (target == null)
{
dic.Clear();
return;
} Renderer[] lstRenderer = target.GetComponentsInChildren<Renderer>();
foreach(var r in lstRenderer)
{
// 非LightmapStatic
StaticEditorFlags flag = GameObjectUtility.GetStaticEditorFlags(r.gameObject);
if ((flag & StaticEditorFlags.LightmapStatic) == )
continue; SerializedObject so = new SerializedObject(r); if (dic.ContainsKey(r.gameObject) == false)
{
dic.Add(r.gameObject, so.FindProperty("m_ScaleInLightmap").floatValue);
} // dic = dic.OrderBy(o => o.Value).ToDictionary(o => o.Key, o => o.Value);
List<KeyValuePair<GameObject, float>> lst = new List<KeyValuePair<GameObject, float>>(dic);
lst.Sort(delegate(KeyValuePair<GameObject, float> s1, KeyValuePair<GameObject, float> s2)
{
return s2.Value.CompareTo(s1.Value);
});
dic.Clear();
foreach(var l in lst)
{
dic.Add(l.Key, l.Value);
}
}
} }
#endif

  脚本检视窗口:

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections; [CustomEditor(typeof(LightmapScaleAnalysis))]
public class LightmapScaleAnalysisInspector : Editor
{
private SerializedObject obj;
private float specialRange = 0.8f;
private Color specialColor = Color.red; private void OnEnable()
{
obj = new SerializedObject(target);
} public override void OnInspectorGUI()
{
DrawDefaultInspector(); var analysis = target as LightmapScaleAnalysis; GUILayout.BeginHorizontal();
specialRange = EditorGUILayout.Slider(specialRange, 0f, 1f);
specialColor = EditorGUILayout.ColorField(specialColor);
GUILayout.EndHorizontal(); GUILayout.BeginVertical();
GUILayout.BeginHorizontal();
if (GUILayout.Button("解析吧"))
{
analysis.Parse();
}
GUILayout.EndHorizontal(); foreach (var pair in analysis.dic)
{
GUILayout.BeginHorizontal();
GUI.color = pair.Value >= specialRange ? specialColor : Color.white; EditorGUILayout.ObjectField(pair.Key, typeof(GameObject));
EditorGUILayout.FloatField(pair.Value); GUI.color = Color.white;
GUILayout.EndHorizontal();
}
GUILayout.EndVertical();
} }
#endif

  

最新文章

  1. CSS3 笔记三(Shadow/Text/Web Fonts)
  2. [课程设计]Scrum 2.3 多鱼点餐系统开发进度 (订单一览设计)
  3. ASP.NET MVC 模型和数据对象映射实践
  4. [FlyCapture2] Bumblebee XB3 Save Images to Three AVI Files (Left, Center and Right) 大黄蜂立体相机保存捕获的视频到左中右三个不同的文件
  5. webservice 错误::无法加载协定为的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。
  6. Loadrunner:POP3协议录制收信,使用foxmail录制到的脚本为空
  7. mysql中 出现No query specified
  8. Tcl 简单介绍及特性
  9. Chromium Graphics Update in 2014(滑动)
  10. DropDownListFor使用ViewData进行绑定的示例
  11. malloc without free, what happens?
  12. Linux CentOS完全卸载PHP
  13. assert()函数总结 (转)
  14. 问题:Linux报swap空间占用过高,但物理内存还有空余
  15. SQL Server 2012 手动安装帮助文档+排错
  16. flume修改配置文件
  17. CentOS 7设置ulimit不生效的问题解决
  18. 【精选】Jupyter Notebooks里的TensorFlow图可视化
  19. isset、empty、var==null、is_null、var===null详细理解
  20. PLSQL Developer连接不上64位Oracle 10g的解决办法

热门文章

  1. PL/SQL Developer如何连接64位的Oracle图解
  2. 理解PagerAdapter的instantiateItem()方法
  3. CF2.C
  4. Daily Scrum02 12.17
  5. phpexcel读取excel的xls xlsx csv格式
  6. 一鼓作气 博客--第三篇 note3
  7. html 5 canvas画布整理
  8. VS快捷键总结(包括ReSharper)
  9. ASP.NET跨平台实践:无需安装Mono的Jexus“独立版”
  10. ES6中的模板字符串和新XSS Payload