summaryrefslogtreecommitdiff
path: root/AlienSurvival/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'AlienSurvival/Assets/Scripts')
-rw-r--r--AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs7
-rw-r--r--AlienSurvival/Assets/Scripts/TopDown/TopDownTransform.cs81
-rw-r--r--AlienSurvival/Assets/Scripts/Utils/GameLoop.cs27
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