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 = Color.black; [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; private void Start() { m_Coord = GetComponent(); m_SpriteRenderer = GetComponent(); 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() { if (m_Shadow == null) return; m_ShadowRenderer.color = m_Color; Vector3 pos = m_Coord.GetGround3DPosition(); m_Shadow.transform.position = pos; } }