DoTween結束后刪除對象


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class UIDamage : MonoBehaviour {

    public Text numText;
    private Camera uiCamera;
    RectTransform rectTrans;
    List<Tween> numList = new List<Tween>();
    void Awake() {
        uiCamera = CameraController.Instance.transform.GetComponentInChildren<Camera>();
        rectTrans = transform.GetComponent<RectTransform>();
        EventCenter.AddListener<Vector3, int, int>(EGameEvent.ShowEffectNumber, ShowEffectNumber);
    }

    //public void ConnectButonOnClick() {
    //    UIManager.Instance.PushPanel(UIType.CONNECT_PANEL);
    //}
    private void OnDestroy()
    {
        EventCenter.AddListener<Vector3, int, int>(EGameEvent.ShowEffectNumber, ShowEffectNumber);
    }

    /// <summary>
    /// 根據EffectType不同顯示不同顏色,或者不同內容
    /// </summary>
    /// <param name="worldPos"></param>
    /// <param name="effectNum"></param>
    /// <param name="effectType"></param>
    void ShowEffectNumber(Vector3 worldPos, int effectNum, int effectType)
    {
        Vector2 v2 = WorldToUgui(worldPos);
        Text num = Object.Instantiate(numText);

        num.transform.SetParent(this.transform);       
        num.transform.localPosition = new Vector3(v2.x, v2.y, 0);
        num.transform.localScale = Vector3.one;
        num.transform.localEulerAngles = Vector3.zero;
        num.gameObject.SetActive(true);
        num.text = "-" + effectNum;
        Tweener tween = num.transform.DOLocalMoveY(num.transform.localPosition.y + 100, 2f);
        tween.SetAutoKill(false);
        numList.Add(tween);
        tween.OnComplete(MyComplete);
    }
    void MyComplete()
    {
        for(int i= numList.Count - 1; i > -1; i--)
        {
            if (numList[i].IsComplete())
            {
                numList[i].Kill();
                Destroy((numList[i].target as Transform).gameObject);
                numList.RemoveAt(i);
            }
        }
    }
    /// <summary>
    /// 將世界坐標轉換為Ugui坐標
    /// 這種算法,cavas不能用填充,只能用居中
    /// </summary>
    /// <param name="position"></param>
    /// <returns></returns>
    public Vector2 WorldToUgui(Vector3 position)
    {

        Vector2 screenPoint = Camera.main.WorldToScreenPoint(position);//世界坐標轉換為屏幕坐標
        Vector2 screenSize = new Vector2(Screen.width, Screen.height);
        screenPoint -= screenSize / 2;//將屏幕坐標變換為以屏幕中心為原點
        Vector2 anchorPos = screenPoint / screenSize * rectTrans.sizeDelta;//縮放得到UGUI坐標
        return anchorPos;
    }
}

這里的numList[i].target,是Tween.target。是調用DOLocalMoveY的對象。所以這里是個Transform。

這里還有一個世界轉UGUI的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM