列出场景对象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文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...
随机推荐
- yotaku的开发日志(1)
2015-12-18 21:17:46 连续看了几天的ThinkPHP框架,目前看到基于角色的用户访问权限控制. 相关代码如下: 数据库 用户表(管理员) mg_id mg_name mg_pwd m ...
- c#去除List中的重复项
List<string> list = new List<string> {"a", "a", "b", " ...
- 子代选择器(>)后代选择器(' ')的区别
子代选择器是指紧接着父级的那个标签,如:container>a指的是紧接着container后面的第一个a(儿子级别的,孙子或者之后的a是不能生效的) 后代选择器是用空格分开的,如:contai ...
- 还原后缀名为.bak的数据库备份文件
1.打开SQL Server Management Studio,随便右击击一个数据库选择任务-->还原-->数据库 4.在弹出来的窗口中的源选项中选择设备-->点选择设备--> ...
- HTML5 WebSocket
在WebSocket API中,浏览器和服务器只需要做一个握手动作,然后,浏览器和服务器之间就形成一条快速通道,两者之间就可以直接进行数据传送,这一个功能可以应用到"字幕",自己做 ...
- php 迭代器使用
/** * 执行入口 * @author tianyunchong * Time: 4:48 pm * @return null */ public function run() { /** 遍历下所 ...
- day3 Linux基础
1.正文处理命令及tar命令 1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group >1.txt2) 将用户信 ...
- php+ajax..转
php+ajax 登录注册页面 主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面 点击注册切换到注册界面,点击登录切换到登录界 ...
- cxf3.1.4所需jar,大部分都可以从cxf3.1.4的lib包下找到
asm-.jar commons-beanutils-.jar commons-collections-.jar commons-lang-2.6.jar cxf-core-.jar cxf-rt-b ...
- EditPlus快捷键
Editplus 选中一行: ctrl+rEditplus 复制一行: ctrl+r选择行,然后ctrl+c复制.复制一行到下一行中:Editplus有:Ctrl+j 复制上一行的一个字符到当前行Ed ...