Unity/Tips

Unity Dotween Kill()이 안될 때 확인

최애뎡 2022. 2. 14. 21:09
728x90
반응형

조금 된 일이긴 하지만 

위처럼 동전이 살~짝 날아가고 위아래로 움직이는 마음이 좀 아픈 연출을 DOTween으로 구현하고 동전 같은 경우는 Pool에 미리 깔아 두고 사용하고 있었음

 

#if UNITY_EDITOR
using UnityEditor;
#endif

using System;
using DG.Tweening;

public class Goods : GoodsBase
{
    Sequence _effect = null;

    public void Init()
    {
        if (_effect == null)
        {
            _effect = DOTween.Sequence();
            _effect.Append(transform.DOJump(_vec3_end, _jumpPower, _jumpCount, _jumpDuration));
            _effect.Append(transform.DOMoveY(_pos_y + _pos_y_range, 0.5f)).OnComplete(() => transform.DOMoveY(_pos_y - _pos_y_range, 1f).SetLoops(-1, LoopType.Yoyo));
        }

        Managers.UpdateM._updateDropItems -= Move;
        Managers.UpdateM._updateDropItems += Move;
    }

    private void OnDisable()
    {
        Clear();
    }

    public override void Clear()
    {
        if (Managers.Instance != null)
        {
            Managers.UpdateM._updateDropItems -= Move;
        }

        if (_effect != null)
        {
            DOTween.Kill(transform);
            _effect = null;
        }
        
        transform.position = _vec3_original;
    }

    #region Functions
    public void Move()
    {
        transform.position = new UnityEngine.Vector3(transform.position.x - UnityEngine.Time.deltaTime * _speed, transform.position.y, transform.position.z);
    }

    public void GetItems()
    {
        switch (_item)
        {
            case Define.DropItems.Gold:
                // TODO -> 골드 처리
                UnityEngine.Debug.Log("골드 획득");
                break;
        }

        Managers.PoolM.PushToPool(gameObject);
    }
    #endregion

#if UNITY_EDITOR
    [CustomEditor(typeof(Goods))]
    public class customEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            EditorGUILayout.HelpBox("드롭되는 아이템 설정 [ GoodsBase.cs ]", MessageType.Info);

            base.OnInspectorGUI();
        }
    }
#endif
}

코드는 대충 요딴 식인데 

DOTween - Sequence를 사용

여기서 딴거 다 필요 없고 Sequence를 DOTween.Kill(transform); 이렇게 Kill을 했음

아니 이게 [ DOTween.Kill(_effect); or 이것 저것 다 넘겨 봄 ]로 하면 Init()에서 실행하는 Sequence가 너무 이상했음 (날아간 뒤에 위아래 무빙을 안 해버려)

그러다 

저 Gold는 DOTween을 사용 중인데 씬에 활성화돼서 DOTween - Sequence가 실행되면서 DDOL에 DOTween이 하나 생기는 걸 이제야 봄...

뭔가 싶어 보니까 Play, Pause의 상황을 볼 수 있고 강제로 Kill도 할 수 있었음

문제는 확실히 제대로 Kill이 안돼서 Gold 오브젝트가 풀에 들어갔다 다시 나오면 Sequence를 계속 새로 만들고 있었음

근데 뭐 별건 없는 게 옆에 Transform 있길래 Kill 할 때 Sequence 자체를 넣지 않고 그냥 Gold의 transform을 넘기니까 Kill이 되었.....

 

일긴가..

반응형