using UnityEngine; using DG.Tweening; using System.Collections; using TowerClimberChronicles; public class ChildItem : MonoBehaviour { // 引用父物体的管理器 private ParentItem parentManager; public int type; private GameObject light; private void Awake() { parentManager = GetComponentInParent(); GameDispatcher.Instance.AddListener(GameMsg.FlowerShowclickAni, ShowclickAni); GameDispatcher.Instance.AddListener(GameMsg.FlowerHideclickAni, HideclickAni); light = transform.Find("light").gameObject; light.GetComponent().maskInteraction = SpriteMaskInteraction.VisibleOutsideMask; // Debug.Log(light); light.SetActive(false); starPrefab = Resources.Load("flower/scene/star"); } // 子物体自己的逻辑方法 private void ShowclickAni(object a = null) { if (CreatFlower.instance.slot_type_list.Contains(type)) { if (light == null) return; light.SetActive(true); } DOVirtual.DelayedCall(3, () => { HideclickAni(); }); } private void HideclickAni(object a = null) { if (light == null) return; light.SetActive(false); } public void OnChildClicked() { parentManager.OnChildClicked(this); // Destroy(gameObject); Debug.Log($"{name} 执行了 DoSomething 方法"); transform.GetComponent().enabled = false; Vector3 euler = transform.eulerAngles; euler.z = 0f; transform.eulerAngles = euler; SpriteRenderer sprite_render = transform.GetComponent(); sprite_render.maskInteraction = SpriteMaskInteraction.None; GameObject top_area = GameObject.Find("top_area"); SetParentAndFly(top_area.transform, CreatFlower.instance.AddFlowerInTemp(gameObject, type), 0.5f); CreatFlower.instance.CheckPot(); } void OnDestroy() { GameDispatcher.Instance.RemoveListener(GameMsg.FlowerShowclickAni, ShowclickAni); GameDispatcher.Instance.RemoveListener(GameMsg.FlowerHideclickAni, HideclickAni); } public GameObject starPrefab; // 拖尾星星的预制体(SpriteRenderer) public float fadeDuration = 0.5f; // 星星淡出时间 private bool isTrailing = false; private int frameCounter = 0; void Update() { if (!isTrailing) return; frameCounter++; // 每隔 1 帧生成一次(即隔帧调用) if (frameCounter % 2 == 0) { GameObject star = Instantiate(starPrefab, transform.position, Quaternion.identity); star.transform.SetParent(null); SpriteRenderer sr = star.GetComponent(); if (sr != null) { sr.DOFade(0.2f, fadeDuration).OnComplete(() => { Destroy(star); }); } else { Destroy(star, fadeDuration); } } } public void SetParentAndFly(Transform newParent, Transform targetChild, float duration) { if (newParent == null || targetChild == null) { Debug.LogError("父物体或目标子物体为空!"); return; } transform.SetParent(newParent); // 开启拖尾 isTrailing = true; // 移动和旋转 DG.Tweening.Sequence seq = DOTween.Sequence(); seq.Join(transform.DOMove(targetChild.position, duration).SetEase(Ease.InOutQuad)); seq.Join(transform.DORotateQuaternion(targetChild.rotation, duration).SetEase(Ease.InOutQuad)); // 动画完成后关闭拖尾 seq.OnComplete(() => { isTrailing = false; }); } }