summaryrefslogtreecommitdiff
path: root/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-04-20 12:33:00 +0800
committerchai <chaifix@163.com>2022-04-20 12:33:00 +0800
commit0f563fdc6874ee39713303ba457a05693fb08fa1 (patch)
treee5f54aa33300769295de1c5c2b9d7a3567545278 /AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs
parent69dc6fa1115b96709daab8484e99c467c57a8852 (diff)
*topdown transform
Diffstat (limited to 'AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs')
-rw-r--r--AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs57
1 files changed, 57 insertions, 0 deletions
diff --git a/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs b/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs
new file mode 100644
index 0000000..e027771
--- /dev/null
+++ b/AlienSurvival/Assets/Scripts/TopDown/TopDownShadowCaster.cs
@@ -0,0 +1,57 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[ExecuteInEditMode, DisallowMultipleComponent]
+[RequireComponent(typeof(TopDownTransform))]
+[RequireComponent(typeof(SpriteRenderer))]
+public class TopDownShadowCaster : MonoBehaviour
+{
+ [SerializeField] private Color m_Color = new Color32(0,0,0, 58);
+ [SerializeField] private Vector2 m_Scale = new Vector2(1, 0.5f);
+
+ private GameObject m_Shadow;
+ private SpriteRenderer m_ShadowRenderer;
+
+ private TopDownTransform m_Coord;
+ private SpriteRenderer m_SpriteRenderer;
+
+ public void Flip(bool flip)
+ {
+ m_ShadowRenderer.flipX = flip;
+ }
+
+ private void Start()
+ {
+ m_Coord = GetComponent<TopDownTransform>();
+ m_SpriteRenderer = GetComponent<SpriteRenderer>();
+
+ if (m_Shadow == null)
+ {
+ m_Shadow = new GameObject("shadow");
+ m_Shadow.hideFlags = HideFlags.HideAndDontSave;
+ m_Shadow.transform.SetParent(transform);
+
+ m_Shadow.transform.localScale = m_Scale;
+
+ m_ShadowRenderer = m_Shadow.AddComponent<SpriteRenderer>();
+ m_ShadowRenderer.color = m_Color;
+ m_ShadowRenderer.sprite = m_SpriteRenderer.sprite;
+ m_ShadowRenderer.sortingLayerName = "Shadow";
+
+ }
+ }
+
+ private void Update()
+ {
+ if (m_Shadow == null)
+ return;
+
+ m_ShadowRenderer.color = m_Color;
+ m_ShadowRenderer.sprite = m_SpriteRenderer.sprite;
+
+ Vector3 pos = m_Coord.GetGround3DPosition();
+ m_Shadow.transform.position = pos;
+ }
+
+}