summaryrefslogtreecommitdiff
path: root/AlienSurvival/Assets/Scripts
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-04-19 22:56:15 +0800
committerchai <chaifix@163.com>2022-04-19 22:56:15 +0800
commitba49cb4da7cae683585cc34b7adba46429c22af9 (patch)
treeddcc3e3e13da24782ee0094cecd7b8af41217ad7 /AlienSurvival/Assets/Scripts
parent2e2bb56ec77c98421f58887e8f004ed73ce13551 (diff)
+ topdown transform
Diffstat (limited to 'AlienSurvival/Assets/Scripts')
-rw-r--r--AlienSurvival/Assets/Scripts/Editor.meta8
-rw-r--r--AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs68
-rw-r--r--AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs.meta (renamed from AlienSurvival/Assets/Scripts/Physics/Transform2D.cs.meta)2
-rw-r--r--AlienSurvival/Assets/Scripts/Physics/Editor.meta8
-rw-r--r--AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs46
-rw-r--r--AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs.meta11
-rw-r--r--AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs106
-rw-r--r--AlienSurvival/Assets/Scripts/Physics/TopDownTransform.cs.meta11
-rw-r--r--AlienSurvival/Assets/Scripts/Physics/Transform2D.cs123
-rw-r--r--AlienSurvival/Assets/Scripts/Rendering.meta8
-rw-r--r--AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs13
-rw-r--r--AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs.meta11
12 files changed, 291 insertions, 124 deletions
diff --git a/AlienSurvival/Assets/Scripts/Editor.meta b/AlienSurvival/Assets/Scripts/Editor.meta
new file mode 100644
index 0000000..58829a3
--- /dev/null
+++ b/AlienSurvival/Assets/Scripts/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d4ca91bb615252040a8e7572963b172a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs b/AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs
new file mode 100644
index 0000000..76cb48c
--- /dev/null
+++ b/AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs
@@ -0,0 +1,68 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+[CanEditMultipleObjects, CustomEditor(typeof(Transform), true)]
+public class TransformInspectorOverride : InspectorExt
+{
+ protected override string defaultEditorName => "UnityEditor.TransformInspector, UnityEditor";
+
+ Tool LastTool = Tool.None;
+
+ public override void OnEnable()
+ {
+ base.OnEnable();
+
+ if(HasTopDownTransform())
+ HideDefaultTools();
+ }
+
+ public override void OnDisable()
+ {
+ base.OnDisable();
+
+ if(LastTool != Tool.None)
+ RestoreTools();
+ }
+
+ void HideDefaultTools()
+ {
+ if(Tools.current != Tool.None)
+ LastTool = Tools.current;
+ Tools.current = Tool.None;
+ }
+
+ void RestoreTools()
+ {
+ Tools.current = LastTool;
+ }
+
+ public override void OnInspectorGUI()
+ {
+ if (HasTopDownTransform())
+ {
+ EditorGUILayout.HelpBox("Override by TopDownTransform", MessageType.Warning);
+ GUI.enabled = false;
+ HideDefaultTools();
+ }
+
+ base.OnInspectorGUI();
+
+ if (HasTopDownTransform())
+ GUI.enabled = true;
+ }
+
+ bool HasTopDownTransform()
+ {
+ Transform transform = target as Transform;
+ TopDownTransform topdown = transform.GetComponent<TopDownTransform>();
+ return topdown != null;
+ }
+
+ public override void OnSceneGUI()
+ {
+ base.OnSceneGUI();
+ }
+
+}
diff --git a/AlienSurvival/Assets/Scripts/Physics/Transform2D.cs.meta b/AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs.meta
index ee1038d..c9f0922 100644
--- a/AlienSurvival/Assets/Scripts/Physics/Transform2D.cs.meta
+++ b/AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 2b1fbd797bf03674e9d1b81edc11e3f1
+guid: 8027cfacc5652a6459adfbe2d9522671
MonoImporter:
externalObjects: {}
serializedVersion: 2
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/Editor/TopDownTransformInspector.cs.meta b/AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs.meta
new file mode 100644
index 0000000..09d9899
--- /dev/null
+++ b/AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a1871ab3b887e6b41ba4a43777b53192
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
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
diff --git a/AlienSurvival/Assets/Scripts/Rendering.meta b/AlienSurvival/Assets/Scripts/Rendering.meta
new file mode 100644
index 0000000..5983da2
--- /dev/null
+++ b/AlienSurvival/Assets/Scripts/Rendering.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f708dc500b39f5b47b15cab2502b39ee
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs b/AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs
new file mode 100644
index 0000000..2ef26a0
--- /dev/null
+++ b/AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs
@@ -0,0 +1,13 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[DisallowMultipleComponent]
+[RequireComponent(typeof(TopDownTransform))]
+public class TopDownShadowCaster : MonoBehaviour
+{
+
+ [SerializeField] private Color m_Color = Color.black;
+ [SerializeField] private Vector2 m_Scale = new Vector2(1, 0.5f);
+
+}
diff --git a/AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs.meta b/AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs.meta
new file mode 100644
index 0000000..f81ad1b
--- /dev/null
+++ b/AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f1ce201566412034c99687a8c5b94075
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: