summaryrefslogtreecommitdiff
path: root/AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs
diff options
context:
space:
mode:
Diffstat (limited to 'AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs')
-rw-r--r--AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs106
1 files changed, 106 insertions, 0 deletions
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