diff options
Diffstat (limited to 'AlienSurvival/Assets/Scripts')
-rw-r--r-- | AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs | 7 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/TopDown/TopDownTransform.cs | 81 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Utils/GameLoop.cs | 27 |
3 files changed, 71 insertions, 44 deletions
diff --git a/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs b/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs index 88c32bb..1c541b9 100644 --- a/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs +++ b/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs @@ -2,7 +2,8 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -[ExecuteInEditMode, DisallowMultipleComponent] +//[ExecuteInEditMode] +[DisallowMultipleComponent] [RequireComponent(typeof(TopDownTransform))] [RequireComponent(typeof(SpriteRenderer))] public class TopDownShadowCaster : MonoBehaviour @@ -32,11 +33,7 @@ public class TopDownShadowCaster : MonoBehaviour GameObject child = this.transform.GetChild(i).gameObject; if (child.name == "shadow") { -#if UNITY_EDITOR - DestroyImmediate(child); -#else Destroy(child); -#endif } } diff --git a/AlienSurvival/Assets/Scripts/TopDown/TopDownTransform.cs b/AlienSurvival/Assets/Scripts/TopDown/TopDownTransform.cs index ce7421a..216f2cf 100644 --- a/AlienSurvival/Assets/Scripts/TopDown/TopDownTransform.cs +++ b/AlienSurvival/Assets/Scripts/TopDown/TopDownTransform.cs @@ -6,7 +6,7 @@ using UnityEditor; #endif /// <summary> -/// 用于TopDown的Transform,支持模拟垂直高度 +/// 用于TopDown的Transform,支持模拟垂直高度,不允许旋转和缩放 /// </summary> [ExecuteInEditMode] [RequireComponent(typeof(Transform))] @@ -23,12 +23,12 @@ public class TopDownTransform : MonoBehaviour [SerializeField] private Vector3 m_LocalPosition; // 只能绕一个虚拟轴旋转 - [SerializeField] private float m_LocalRotation; + //[SerializeField] private float m_LocalRotation; // x, z //[SerializeField] private Vector2 m_LocalScale; - public Vector3 position + public Vector3 localPosition { get { @@ -39,7 +39,7 @@ public class TopDownTransform : MonoBehaviour m_LocalPosition = value; Project(); } - } + } public float x { @@ -91,23 +91,66 @@ public class TopDownTransform : MonoBehaviour } } - // 地表坐标(Topdown空间) - public Vector3 positionOnGround + /// <summary> + /// 全局坐标 + /// </summary> + public Vector3 position { + get + { + Vector3 pos = m_LocalPosition; + Transform self = this.transform; + while(self.parent != null) + { + TopDownTransform parentTransform = self.parent.GetComponent<TopDownTransform>(); + if (parentTransform == null) + { + Debug.LogError("Parent is not TopDownTransform"); + continue; + } + pos += parentTransform.m_LocalPosition; + self = self.parent; + } + return pos; + } set { - Vector3 pos = position; - pos.x = value.x; - pos.y = value.y; - position = pos; - Project(); + Vector3 pos = value; + Transform self = this.transform; + while (self.parent != null) + { + TopDownTransform parentTransform = self.parent.GetComponent<TopDownTransform>(); + if (parentTransform == null) + { + Debug.LogError("Parent is not TopDownTransform"); + continue; + } + pos -= parentTransform.m_LocalPosition; + self = self.parent; + } + m_LocalPosition = pos; } + } + + /// <summary> + /// 地表坐标(Topdown空间) + /// </summary> + public Vector3 positionOnGround + { get { Vector3 pos = position; pos.z = 0; return pos; } + set + { + Vector3 pos = position; + pos.x = value.x; + pos.y = value.y; + position = pos; + Project(); + } } /// <summary> @@ -128,7 +171,7 @@ public class TopDownTransform : MonoBehaviour if (sr) { gameObject.AddOrGetComponent<TopDownSorting>(); - gameObject.AddOrGetComponent<TopDownShadowCaster>(); + //gameObject.AddOrGetComponent<TopDownShadowCaster>(); } } @@ -140,10 +183,12 @@ public class TopDownTransform : MonoBehaviour #region 转换到3D笛卡尔空间 public Vector3 Get3DPosition() { + Vector3 posTD = position; + Vector3 pos = new Vector3(); - pos.x = m_LocalPosition.x; - pos.y = m_LocalPosition.y + m_LocalPosition.z; - pos.z = transform.localPosition.z; + pos.x = posTD.x; + pos.y = posTD.y + posTD.z; + pos.z = transform.position.z; return pos; } @@ -153,9 +198,11 @@ public class TopDownTransform : MonoBehaviour /// <returns></returns> public Vector3 GetGround3DPosition() { + Vector3 posTD = position; + Vector3 pos = new Vector3(); - pos.x = m_LocalPosition.x; - pos.y = m_LocalPosition.y; + pos.x = posTD.x; + pos.y = posTD.y; pos.z = transform.position.z; return pos; } diff --git a/AlienSurvival/Assets/Scripts/Utils/GameLoop.cs b/AlienSurvival/Assets/Scripts/Utils/GameLoop.cs index e22ed77..6bbb140 100644 --- a/AlienSurvival/Assets/Scripts/Utils/GameLoop.cs +++ b/AlienSurvival/Assets/Scripts/Utils/GameLoop.cs @@ -4,35 +4,18 @@ using UnityEngine; public class GameLoop : MonoBehaviour { + static public GameLoop Instance { get; private set; } - static GameLoop m_GameLoop; - - static public GameLoop instance - { - get - { - return m_GameLoop; - } - } - - int m_IndexOfUpdate = 0; - - public int indexOfUpdate - { - get - { - return m_IndexOfUpdate; - } - } + public int indexOfUpdate { get; private set; } = 0; private void Awake() { - m_GameLoop = this; + Instance = this; } private void Update() { - ++m_IndexOfUpdate; + ++indexOfUpdate; } -} +}
\ No newline at end of file |