| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | /************************************************************************* *  Copyright © 2017-2018 Mogoson. All rights reserved. *------------------------------------------------------------------------ *  File         :  MouseTranslateEditor.cs *  Description  :  Custom editor for MouseTranslate. *------------------------------------------------------------------------ *  Author       :  Mogoson *  Version      :  0.1.0 *  Date         :  4/9/2018 *  Description  :  Initial development version. *   *  Author       :  Mogoson *  Version      :  0.1.1 *  Date         :  6/27/2018 *  Description  :  Optimize display of node. *************************************************************************/using Mogoson.UEditor;using UnityEditor;using UnityEngine;namespace AIPagedLod{    [CustomEditor(typeof(MouseTranslate), true)]    [CanEditMultipleObjects]    public class MouseTranslateEditor : GenericEditor    {        #region Field and Property        protected MouseTranslate Target { get { return target as MouseTranslate; } }        protected Vector3 offset;        #endregion        #region Protected Method        protected virtual void OnEnable()        {            if (Target.areaSettings.center == null)            {                return;            }            offset = Target.transform.position - Target.areaSettings.center.position;        }        protected virtual void OnSceneGUI()        {            if (Target.areaSettings.center == null)            {                return;            }            if (!Application.isPlaying)            {                Target.transform.position = Target.areaSettings.center.position + offset;            }            DrawSceneGizmos();            if (Target.targetCamera == null)            {                return;            }            DrawSphereArrow(Target.transform.position, Target.targetCamera.position, NodeSize);            DrawSceneGUI();        }        protected void DrawSceneGizmos()        {            DrawPositionHandle(Target.areaSettings.center);            var widthOffset = Vector3.right * Target.areaSettings.width;            var lengthOffset = Vector3.forward * Target.areaSettings.length;            var verts = new Vector3[]            {                Target.areaSettings.center.position + widthOffset + lengthOffset,                Target.areaSettings.center.position - widthOffset + lengthOffset,                Target.areaSettings.center.position - widthOffset - lengthOffset,                Target.areaSettings.center.position + widthOffset - lengthOffset             };            Handles.color = Blue;            Handles.DrawSolidRectangleWithOutline(verts, TransparentBlue, Blue);            Handles.DrawLine(new Vector3(verts[0].x, verts[0].y, Target.transform.position.z), new Vector3(verts[1].x, verts[1].y, Target.transform.position.z));            Handles.DrawLine(new Vector3(Target.transform.position.x, verts[0].y, verts[0].z), new Vector3(Target.transform.position.x, verts[3].y, verts[3].z));            Handles.Label(Target.areaSettings.center.position, "Center");            DrawAdaptiveSphereCap(Target.areaSettings.center.position, Quaternion.identity, NodeSize);            DrawAdaptiveSphereCap(Target.transform.position, Quaternion.identity, NodeSize);            var project = new Vector3(Target.transform.position.x, Target.areaSettings.center.position.y, Target.transform.position.z);            DrawSphereArrow(Target.transform.position, project, NodeSize);        }        public override void OnInspectorGUI()        {            base.OnInspectorGUI();            Vector3 offsetValue = EditorGUILayout.Vector3Field("偏移值:",offset);            if(offsetValue != offset)            {                offset = offsetValue;                if (!Application.isPlaying)                {                    Target.transform.position = Target.areaSettings.center.position + offset;                    MarkSceneDirty();                }            }        }        protected void DrawSceneGUI()        {            return;            var rect = new Rect(10, Screen.height - 90, 225, 40);            GUI.color = Color.white;            Handles.BeginGUI();            GUILayout.BeginArea(rect, "Current Offset", "Window");            if (Application.isPlaying)            {                EditorGUILayout.Vector3Field(string.Empty, Target.CurrentOffset);            }            else            {                EditorGUI.BeginChangeCheck();                offset = EditorGUILayout.Vector3Field(string.Empty, offset);                if (EditorGUI.EndChangeCheck())                {                    MarkSceneDirty();                }            }            GUILayout.EndArea();            Handles.EndGUI();        }        #endregion    }}
 |