Unity3D研究院之Editor下监听Transform变化

美术有可以直接在Editor下操作Transform,我想去修正他们编辑的数值,所以我就得监听Transform。

Unity3D研究院之Editor下监听Transform变化

 
 
 

C#

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Reflection;
 
 
 
[CustomEditor(typeof(Transform))]
public class TransformEditor :Editor {
 
 
[InitializeOnLoadMethod]
static void IInitializeOnLoadMethod()
{
TransformEditor.onPostion =delegate(Transform transform) {
 
Debug.Log(string.Format("transform = {0}  positon = {1}",transform.name,transform.localPosition));
};
 
TransformEditor.onRotation =delegate(Transform transform) {
 
Debug.Log(string.Format("transform = {0}   rotation = {1}",transform.name,transform.localRotation.eulerAngles));
};
 
TransformEditor.onScale =delegate(Transform transform) {
 
Debug.Log(string.Format("transform = {0}   scale = {1}",transform.name,transform.localScale));
};
}
 
public delegate void Change(Transform transform);
static public Change onPostion;
static public Change onRotation;
static public Change onScale;
 
 
 
private Editor editor;
private Transform transform;
private Vector3 startPostion =Vector3.zero;
private Vector3 startRotation =Vector3.zero;
private Vector3 startScale =Vector3.zero;
void OnEnable()
{
transform = target as Transform;
editor = Editor.CreateEditor(target, Assembly.GetAssembly(typeof(Editor)).GetType("UnityEditor.TransformInspector",true));
startPostion = transform.localPosition;
startRotation = transform.localRotation.eulerAngles;
startScale = transform.localScale;
}
 
public override void OnInspectorGUI ()
{
editor.OnInspectorGUI();
if(GUI.changed)
{
 
if(startPostion != transform.localPosition)
{
if(onPostion != null)
onPostion(transform);
}
 
if(startRotation !=  transform.localRotation.eulerAngles)
{
if(onRotation != null)
onRotation(transform);
}
 
if(startScale !=  transform.localScale)
{
if(onScale != null)
onScale(transform);
}
startPostion = transform.localPosition;
startRotation = transform.localRotation.eulerAngles;
startScale = transform.localScale;
}
 
}
 
 
}
上一篇:android引用arr包


下一篇:Java并发编程原理与实战七:线程带来的风险