列出场景对象Lightmap属性
首先上效果图:

编辑器代码:
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
列出场景对象Lightmap属性的更多相关文章
- python动态获取对象的属性和方法 (转载)
首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__ ...
- List集合中的对象根据属性排序
集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看 ...
- 浅析对象访问属性的"."和"[]"方法区别
在JavaScript中通常使用”."运算符来存取对象的属性的值.或者使用[]作为一个关联数组来存取对象的属性.但是这两种方式有什么区别了? 例如,读取object中的property属性值 ...
- python动态获取对象的属性和方法
http://blog.csdn.net/kenkywu/article/details/6822220首先通过一个例子来看一下本文中可能用到的对象和相关概念.01 #coding: UTF- ...
- Python脚本控制的WebDriver 常用操作 <十七> 获取测试对象的属性及内容
测试用例场景 获取测试对象的内容是前端自动化测试里一定会使用到的技术.比如我们要判断页面上是否显示了一个提示,那么我们就需要找到这个提示对象,然后获取其中的文字,再跟我们的预期进行比较.在webdri ...
- C#开发Unity游戏教程之游戏对象的属性变量
C#开发Unity游戏教程之游戏对象的属性变量 Unity游戏对象的属性——变量 通过对上一章的学习,读者应该了解到了,游戏对象上的属性与脚本中的变量,建立联系的方式就是将脚本赋予游戏对象.上一章只是 ...
- python动态获取对象的属性和方法 (转)
转自未知,纯个人笔记使用 首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): ...
- BOM对象,math对象document对象的属性和操作和 事件的基本操作
Math对象 //该对象中的属性方法 和数学有关. abs(x) 返回数的绝对值. exp(x) 返回 e 的指数. floor(x) 对数进行下舍入. log(x) 返回数的自然对数(底为e). m ...
- Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性
模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...
随机推荐
- 数据库SQL优化大总结之 百万级数据库优化方案
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 深入理解JavaScript中 fn() 和 return fn() 的区别
在js中,经常会遇到在函数里调用其它函数的情况,这时候会有 fn() 这种调用方式,还有一种是 return fn() 这种调用方式,一些初学者经常会一脸萌逼地被这两种方式给绕晕了.这里用一个优雅的面 ...
- vs2013 手动生成webservice代理类wsdl
第一步: 第二步: 第三步: 至此wsdl代理类生成成功!
- PMP备考_第五章_项目范围管理_实践思考
项目范围管理 前言 今天学习项目范围管理的内容,深切的感受到了原单位在项目管理方面存在的问题,今天在这里做一个总结,既相当于对项目范围的一个学习整理,也相当于自己对项目实践过程中存在问题的一个思考. ...
- 太极旋转-JS实现
刚学了js的一些函数,所以做了一个太极的旋转.做完之后是上面这个样子的,是可以旋转的. 思路: 1.先做一个基准转盘,之后将元素都放在转盘上,跟随转盘动. 2.画两个半圆,主要属性是border-to ...
- USACO翻译:USACO 2014 FEB SILVER 三题
USACO 2014 FEB SILVER 一.题目概览 中文题目名称 自动打字 路障 神秘代码 英文题目名称 auto rblock scode 可执行文件名 auto rblock scode 输 ...
- C++ 回调函数的定义与用法
一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...
- $.load()的用法
jquery load 事件用法 jquery load 事件用法 如果绑定给window对象,则会在所有内容加载后触发,包括窗口,框架,对象和图像.如果绑定在元素上,则当元素的内容加载完毕后触发. ...
- js 获取浏览器高度和宽度值(多浏览器)(转)
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...
- 【安装PHP】如何在openSUSE42.1下编译安装PHP7
首先推荐一篇文章PHP 7 Release Date Arrived: Will Developers Adopt PHP 7? - PHP Classes blog. 里面说到是否会去使用PHP7, ...