diff options
Diffstat (limited to 'AlienSurvival/Assets/Scripts/Physics')
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/Editor.meta | 8 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs | 46 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs.meta (renamed from AlienSurvival/Assets/Scripts/Physics/Transform2D.cs.meta) | 2 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs | 106 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs.meta | 11 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/Transform2D.cs | 123 |
6 files changed, 172 insertions, 124 deletions
diff --git a/AlienSurvival/Assets/Scripts/Physics/Editor.meta b/AlienSurvival/Assets/Scripts/Physics/Editor.meta new file mode 100644 index 0000000..fa70114 --- /dev/null +++ b/AlienSurvival/Assets/Scripts/Physics/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80c8d9ba082ca27419e9d6e6bbb39f6d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs b/AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs new file mode 100644 index 0000000..b1139f2 --- /dev/null +++ b/AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs @@ -0,0 +1,46 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + + +[CustomEditor(typeof(TopDownTransform))] +public class TopDownTransformInspector : Editor +{ + + TopDownTransform m_TopDownTransform; + + private void OnEnable() + { + m_TopDownTransform = target as TopDownTransform; + } + + private void OnDisable() + { + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + } + + protected override void OnHeaderGUI() + { + base.OnHeaderGUI(); + } + + //https://answers.unity.com/questions/463207/how-do-you-make-a-custom-handle-respond-to-the-mou.html + private void OnSceneGUI() + { + Handles.color = Handles.xAxisColor; + m_TopDownTransform.x = EditorHandlesHelper.ScaleValue(m_TopDownTransform.x, m_TopDownTransform.Get3DPosition(), Vector3.right, 1f, Handles.ConeHandleCap, Quaternion.Euler(0, 90, 0), 1f, 0.1f); + + Handles.color = Handles.yAxisColor; + m_TopDownTransform.y = EditorHandlesHelper.ScaleValue(m_TopDownTransform.y, m_TopDownTransform.Get3DPosition(), Vector3.up, 1f, Handles.ConeHandleCap, Quaternion.Euler(-90, 0, 0), 1f, 0.1f); + + Handles.color = Handles.zAxisColor; + m_TopDownTransform.z = EditorHandlesHelper.ScaleValue(m_TopDownTransform.z, m_TopDownTransform.Get3DPosition() + new Vector3(0, -1.1f, 0), Vector3.up, 1f, Handles.ConeHandleCap, Quaternion.Euler(-90, 0, 0), 1f, 0.1f); + + } + +}
\ No newline at end of file diff --git a/AlienSurvival/Assets/Scripts/Physics/Transform2D.cs.meta b/AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs.meta index ee1038d..09d9899 100644 --- a/AlienSurvival/Assets/Scripts/Physics/Transform2D.cs.meta +++ b/AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2b1fbd797bf03674e9d1b81edc11e3f1 +guid: a1871ab3b887e6b41ba4a43777b53192 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs b/AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs new file mode 100644 index 0000000..3bb51b1 --- /dev/null +++ b/AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs @@ -0,0 +1,106 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +/// <summary> +/// 用于TopDown的Transform,支持模拟垂直高度 +/// </summary> +[ExecuteInEditMode] +[RequireComponent(typeof(Transform))] +public class TopDownTransform : MonoBehaviour +{ + // 右手系 + // z + // | + // | /y + // | / + // |/______x + + // x, y, z ( z = height) + [SerializeField] private Vector3 m_LocalPosition; + + // 只能绕一个虚拟轴旋转 + [SerializeField] private float m_LocalRotation; + + // x, z + [SerializeField] private Vector2 m_LocalScale; + + public float x + { + get + { + return m_LocalPosition.x; + } + set + { + m_LocalPosition.x = value; + Project(); + } + } + public float y + { + get + { + return m_LocalPosition.y; + } + set + { + m_LocalPosition.y = value; + Project(); + } + } + + public float z + { + get + { + return m_LocalPosition.z; + } + set + { + m_LocalPosition.z = value; + Project(); + } + } + /// <summary> + /// “投影”,把坐标转换到Transform上 + /// </summary> + public void Project() + { + Vector3 pos = transform.position; + pos.x = m_LocalPosition.x; + pos.y = m_LocalPosition.y + m_LocalPosition.z; + + transform.position = pos; + } + + private void Update() + { + Project(); + } + + public Vector3 Get3DPosition() + { + Vector3 pos = new Vector3(); + pos.x = m_LocalPosition.x; + pos.y = m_LocalPosition.y + m_LocalPosition.z; + pos.z = transform.position.z; + return pos; + } + +#if UNITY_EDITOR + private void OnDrawGizmos() + { + // dash line + Vector3 start = transform.position; + Vector3 end = start - new Vector3(0, m_LocalPosition.z, 0); + + Handles.DrawDottedLine(start, end, 1f); + Handles.DrawWireCube(end, new Vector3(0.1f, 0.1f, 0f)); + } +#endif + +}
\ No newline at end of file diff --git a/AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs.meta b/AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs.meta new file mode 100644 index 0000000..cc1445d --- /dev/null +++ b/AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b1fbd797bf03674e9d1b81edc11e3f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b7cb09ba3d43de2418ea93e3aa9cd4e4, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AlienSurvival/Assets/Scripts/Physics/Transform2D.cs b/AlienSurvival/Assets/Scripts/Physics/Transform2D.cs deleted file mode 100644 index 813b0c6..0000000 --- a/AlienSurvival/Assets/Scripts/Physics/Transform2D.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -// Topdown专用的transform -public class Transform2D : MonoBehaviour -{ - public const float ORTHO_FACTOR = 1f; // 45° - - public float alias_x - { - get - { - return z; - } - } - - public float alias_y - { - get - { - return -x; - } - } - - public float alias_h - { - get - { - return y; - } - } - - public float x - { - get - { - return 0; - } - } - - public float y - { - get - { - return 0; - } - set - { - - } - } - - public float z - { - get - { - return 0; - } - set - { - - } - } - - private Vector3 m_InnerPosition; // x, y, h - - public Vector3 position // - { - get - { - return m_InnerPosition; - } - } - - public float angle - { - get - { - return 0; - } - set - { - - } - } - - public Vector3 forward - { - get - { - return Vector3.zero; - } - } - - public Vector3 up - { - get - { - return Vector3.zero; - } - } - - public Vector3 right - { - get - { - return Vector3.zero; - } - } - - public Vector2 orthocoord - { - get - { - Vector2 ortho = new Vector2(); - ortho.x = x; - ortho.y = y + ORTHO_FACTOR * z; - return ortho; - } - } - -}
\ No newline at end of file |