summaryrefslogtreecommitdiff
path: root/SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs
diff options
context:
space:
mode:
Diffstat (limited to 'SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs')
-rw-r--r--SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs70
1 files changed, 70 insertions, 0 deletions
diff --git a/SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs b/SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs
new file mode 100644
index 0000000..ed17323
--- /dev/null
+++ b/SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs
@@ -0,0 +1,70 @@
+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 Awake()
+ {
+ m_Coord = GetComponent<TopDownTransform>();
+ m_SpriteRenderer = GetComponent<SpriteRenderer>();
+
+ //
+ for(int i = this.transform.childCount - 1; i >= 0 ; --i)
+ {
+ GameObject child = this.transform.GetChild(i).gameObject;
+ if (child.name == "shadow")
+ {
+ Destroy(child);
+ }
+ }
+
+ 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()
+ private void LateUpdate()
+ {
+ m_ShadowRenderer.color = m_Color;
+ m_ShadowRenderer.sprite = m_SpriteRenderer.sprite;
+
+ SetPosition();
+ }
+
+ public void SetPosition()
+ {
+ Vector3 pos = m_Coord.GetProjectedGroundPosition();
+ m_Shadow.transform.position = pos;
+ }
+
+}