[Unity] DOTween의 순환이 끝날 때 Callback 처리를 끼워넣었으면 좋겠어요.

12143 단어 Unity

컨디션

  • Unity5.5.2f
  • DOTween v1.1.600
  • 결론


    사용Tween.OnStepComplete

    배경.

  • 예를 들어 다음과 같은 슬롯에 추가된 Tween
  • 을 준비한다.

  • 사용OnComplete을 통해 종료 시 실행Debug.Log
  • using DG.Tweening;
    using UnityEngine;
    using UnityEngine.UI;
    
    [RequireComponent(typeof(Image))]
    public class DOTweenTest : MonoBehaviour
    {
        private void OnEnable()
        {
            this.GetComponent<Image>()
                .DOFillAmount(1.0f, 1.0f)
                .OnComplete(() => Debug.Log("completed"))
                .Play();
        }
    }
    
  • 로테이션에 루프를 끼우고 각 슬롯에 끼우는 동작
  • 우선 아래 코드
  • 를 실행합니다
    using DG.Tweening;
    using UnityEngine;
    using UnityEngine.UI;
    
    [RequireComponent(typeof(Image))]
    public class DOTweenTest : MonoBehaviour
    {
        private void OnEnable()
        {
            this.GetComponent<Image>()
                .DOFillAmount(1.0f, 1.0f)
                .OnComplete(() => Debug.Log("completed"))
                .SetLoops(-1, LoopType.Restart)
                .Play();
        }
    }
    
  • 위 상황에서 처리하지 않음OnComplete
  • 섭곡 인근 통신사지금 제가 개인적으로 가장 좋아하는 유닛의 트웨인 엔진'도트웨인'의 함정~순환편~에서 언급한'영구 순환 시 Complte 상태가 되지 않으므로 On Complete가 수행하지 않는다'는 행위
  • Sequence.AppendCallback

  • 다음으로 시도된 것은 Sequence의 대응조치
  • Sequence에 관한 글은 다음과 같이 요약한다.
  • DOTween의 Sequence를 사용하여 애니메이션을 결합합니다.
  • 순환 행위 자체에 호출을 도입하여 대응
  • using DG.Tweening;
    using UnityEngine;
    using UnityEngine.UI;
    
    [RequireComponent(typeof(Image))]
    public class DOTweenTest : MonoBehaviour
    {
        private void OnEnable()
        {
            Sequence sequence = DOTween.Sequence()
                .Append(this.GetComponent<Image>().DOFillAmount(1.0f, 1.0f))
                .AppendCallback(() => Debug.Log("completed"))
                .SetLoops(-1, LoopType.Restart)
                .Play();
        }
    }
    
  • 행동에 문제가 없는 것 같다
  • 그런데 이것도 문제가 있어요. SetLoops(-1, LoopType.Yoyo) 대응이 안 돼요.
  • LoopType.Yoyo 처리된 함수(예를 들어 편항)를 되돌려준다
  • 손 옆에서 집행하면 가는 길Debug.Log이라고 불리지만, 돌아오는 길에 호칭이 붙지 않는 것으로 확인
  • using DG.Tweening;
    using UnityEngine;
    using UnityEngine.UI;
    
    [RequireComponent(typeof(Image))]
    public class DOTweenTest : MonoBehaviour
    {
        private void OnEnable()
        {
            Sequence sequence = DOTween.Sequence()
                .Append(this.GetComponent<Image>().DOFillAmount(1.0f, 1.0f))
                .AppendCallback(() => Debug.Log("completed"))
                .SetLoops(-1, LoopType.Yoyo)
                .Play();
        }
    }
    

    Tween.OnStepComplete

  • http://dotween.demigiant.com/documentation.php
  • DOTween 쪽에서 무슨 함수를 준비한 것 같아서 문서를 읽다가 발견했다OnStepComplete
  • a single loop cycle 완성 시 화를 내는 호출
  • 바로 이거야!그래서 해볼게요
  • using DG.Tweening;
    using UnityEngine;
    using UnityEngine.UI;
    
    [RequireComponent(typeof(Image))]
    public class DOTweenTest : MonoBehaviour
    {
        private void OnEnable()
        {
            this.GetComponent<Image>()
                .DOFillAmount(1.0f, 1.0f)
                .OnStepComplete(() => Debug.Log("completed!"))
                .SetLoops(-1, LoopType.Yoyo)
                .Play();
        }
    }
    
  • 행위가 의도에 부합된다!
  • 좋은 웹페이지 즐겨찾기