首先上效果图:

  编辑器代码:

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属性的更多相关文章

  1. python动态获取对象的属性和方法 (转载)

    首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__ ...

  2. List集合中的对象根据属性排序

    集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看 ...

  3. 浅析对象访问属性的"."和"[]"方法区别

    在JavaScript中通常使用”."运算符来存取对象的属性的值.或者使用[]作为一个关联数组来存取对象的属性.但是这两种方式有什么区别了? 例如,读取object中的property属性值 ...

  4. python动态获取对象的属性和方法

    http://blog.csdn.net/kenkywu/article/details/6822220首先通过一个例子来看一下本文中可能用到的对象和相关概念.01     #coding: UTF- ...

  5. Python脚本控制的WebDriver 常用操作 <十七> 获取测试对象的属性及内容

    测试用例场景 获取测试对象的内容是前端自动化测试里一定会使用到的技术.比如我们要判断页面上是否显示了一个提示,那么我们就需要找到这个提示对象,然后获取其中的文字,再跟我们的预期进行比较.在webdri ...

  6. C#开发Unity游戏教程之游戏对象的属性变量

    C#开发Unity游戏教程之游戏对象的属性变量 Unity游戏对象的属性——变量 通过对上一章的学习,读者应该了解到了,游戏对象上的属性与脚本中的变量,建立联系的方式就是将脚本赋予游戏对象.上一章只是 ...

  7. python动态获取对象的属性和方法 (转)

    转自未知,纯个人笔记使用 首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): ...

  8. BOM对象,math对象document对象的属性和操作和 事件的基本操作

    Math对象 //该对象中的属性方法 和数学有关. abs(x) 返回数的绝对值. exp(x) 返回 e 的指数. floor(x) 对数进行下舍入. log(x) 返回数的自然对数(底为e). m ...

  9. Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性

    模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...

随机推荐

  1. GRU(Gated Recurrent Unit) 更新过程推导及简单代码实现

    GRU(Gated Recurrent Unit) 更新过程推导及简单代码实现 RNN GRU matlab codes RNN网络考虑到了具有时间数列的样本数据,但是RNN仍存在着一些问题,比如随着 ...

  2. iOS推送原理

    1.首先app会和apns建立长连接,会发送 udid和 bundle id给apns 2.apns会返回给app一个device token 3.用会把device token 发给自己的服务器 4 ...

  3. 字符串、数组方法实战--charAt(),split(),indexOf(),substring()

    这篇随笔根据两个面试题来实战一下数组.字符串的一些方法. 题一:一个字符串中找出出现次数最多的字符次数 var str = 'fuuhuhuhufaihuhfnkjNKCNIO';
 function ...

  4. asp.net 验证码(一)Session

    1.模板页 //创建网页模板 输入验证码文本框 并且将文本框中的内容发送的后端验证中去 <p>请输入验证码:<input type="text" name=&qu ...

  5. FAT32 FAT区__FAT表解析

    一. FAT 表概述 位置: 紧跟在文件系统的“保留区”之后 : 有两个数据结构完全相同的FAT(FAT,File Allocation Tbale 文件分配表)组成. 作用: FAT表项,描述文件系 ...

  6. IOS远程推送

    IOS远程推送 一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说 ...

  7. 安卓初級教程(3):ContentProvider的運用原理

    package com.example.android.provider; import java.util.ArrayList; import java.util.HashMap; import j ...

  8. ajax知识整理

    HTTP服务 1.服务器 服务器类型 服务类型:文件服务器.数据库服务器.邮件服务器.Web服务器等: 操作系统:Linux服务器.Windows服务器等: 应用软件:Apache服务器.Nginx ...

  9. 安装mysql

    查看已安装的mysql,并删除它们 rpm -qa|grep -i mysql rpm -e --nodeps filename 如果重装mysql,查找安装mysql产生的文件,并删除它们 find ...

  10. MySQL 存储过程和函数

    概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...