diff options
author | chai <chaifix@163.com> | 2022-04-19 22:56:15 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-04-19 22:56:15 +0800 |
commit | ba49cb4da7cae683585cc34b7adba46429c22af9 (patch) | |
tree | ddcc3e3e13da24782ee0094cecd7b8af41217ad7 /AlienSurvival/Assets/Scripts | |
parent | 2e2bb56ec77c98421f58887e8f004ed73ce13551 (diff) |
+ topdown transform
Diffstat (limited to 'AlienSurvival/Assets/Scripts')
-rw-r--r-- | AlienSurvival/Assets/Scripts/Editor.meta | 8 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Editor/TransformInspectorOverride.cs | 68 | ||||
-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.meta | 8 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs | 46 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Physics/Editor/TopDownTransformInspector.cs.meta | 11 | ||||
-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 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Rendering.meta | 8 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs | 13 | ||||
-rw-r--r-- | AlienSurvival/Assets/Scripts/Rendering/TopDownShadowCaster.cs.meta | 11 |
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: |