diff options
author | chai <chaifix@163.com> | 2022-04-22 19:24:15 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-04-22 19:24:15 +0800 |
commit | ded822e98e8eda49618d17e53407b0df1896e539 (patch) | |
tree | d7f09eafe52f7adb948889e459e900c360dbbdec /SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs | |
parent | c7de0419a8924ae7333bcaed39e797d7c9fc1e69 (diff) |
* rename AlienSurvival project to SurvivalTest
Diffstat (limited to 'SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs')
-rw-r--r-- | SurvivalTest/Assets/Scripts/TopDown/TopDownShadowCaster.cs | 70 |
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; + } + +} |