首页 >Unity3D频道 >【Unity杂文】 > Unity3D研究院之Editor下监听Transform变化
2016
04-20

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

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

Snip20160420_1

 

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;
		}

	}


}

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之Editor下监听Transform变化》有 11 条评论

  1. 浹唂飃泊说:

    为什么只能通知一个对象,就是最后选择的对象,不能通知多个选择对象

  2. 冬晓说:

    你好 MoMo,我想监测:当移动Scene面板下GameObject时,监测Transform的值,做一些操作,有没有什么方法?你这个脚本拖动Scene下的GameObject并不会打印Log。

  3. 潆枫说:

    [给力][给力][给力][给力][给力]

  4. c6u2说:

    [给力][给力][给力]

留下一个回复

你的email不会被公开。 必填项已用 * 标注。