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(); m_SpriteRenderer = GetComponent(); // 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(); 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; } }