标签:menu int upd tga draw color this script turn
做UI过程中,经常会有对应父物体上面挂载相关脚本,脚本里面定义对应的UILabel、UISprite等,可开发过程中经常会遇到对应的Object拖动到了错误的位置,所以写了如下小工具,便于将物体快速,准确,无误的赋值到对应位置,注:字段名字必须和物体名字一致。


代码如下:
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Reflection;
/**
* 脚本用于自动填充字段值
* 要求物体名字和字段名字保持一致
*/
public class SetFields : EditorWindow
{
private string strTemp = "";
[MenuItem ("CTool/SetFields")]
static void Init ()
{
SetFields window = (SetFields)EditorWindow.GetWindow (typeof(SetFields));
}
void OnGUI ()
{
EditorGUILayout.BeginVertical ();
ComponentSelector.Draw<MonoScript> (null, _selectorCallBack, false);
strTemp = EditorGUILayout.TextField ("输入脚本名字", strTemp);
if (GUILayout.Button ("SetValue")) {
SetScriptFields ();
}
EditorGUILayout.EndVertical ();
}
private void _selectorCallBack (object obj)
{
if (obj != null) {
strTemp = ((TextAsset)obj).name;
}
}
void OnInspectorUpdate ()
{
this.Repaint ();
}
void SetScriptFields ()
{
Transform[] obj = Selection.GetTransforms (SelectionMode.Unfiltered);
for (int i = 0; i < obj.Length; i++) {
Component info = obj [i].GetComponent (strTemp);
if (info != null) {
System.Type t = Types.GetType (strTemp, "Assembly-CSharp");
FieldInfo[] fileldList = t.GetFields ();
for (int j = 0; j < fileldList.Length; j++) {
_setFieldInfo (obj [i], fileldList [j].Name);
}
}
}
}
private void _setFieldInfo (Transform trans, string fieldName)
{
System.Type type = trans.GetComponent (strTemp).GetType ();
FieldInfo fieldInfo = type.GetField (fieldName);
GameObject objTemp = GetGameObjectByName (trans.gameObject, fieldName);
if (objTemp != null) {
fieldInfo.SetValue (trans.GetComponent (strTemp), objTemp.GetComponent (fieldInfo.FieldType.ToString ()));
}
}
private GameObject GetGameObjectByName (GameObject parent, string objName)
{
if (parent.name == objName) {
return parent;
}
if (parent.transform.childCount < 1) {
return null;
}
GameObject objTemp = null;
for (int i = 0; i < parent.transform.childCount; i++) {
GameObject obj = parent.transform.GetChild (i).gameObject;
objTemp = GetGameObjectByName (obj, objName);
if (objTemp != null) {
break;
}
}
return objTemp;
}
}
菜单栏中找到 CTool/SetFields点击打开,可看到如下界面,将父物体上面挂载的脚本拖动到图示位置,或直接输入脚本名字,点击SetValue按钮即可自动将字段赋值。

标签:menu int upd tga draw color this script turn
原文地址:http://www.cnblogs.com/Yellow0-0River/p/6514827.html