TIL

DOTween 트윈 이벤트 메서드와 활용

Jooglorystar 2025. 4. 21. 22:08

 

 

DOTween에서는 DoMove, DoJump 같은 이동, 애니메이션 효과를 위한 메서드 뿐만 아니라 이를 보조할 다른 메서드들도 제공한다.

 

대표적으로 OnStart, OnPlay, OnComplete, OnKill이 있다.

private Tween MoveToPoint(Vector3 p_pointPosition)
{
    return transform.DOMove(p_pointPosition, _moveDuration)
        .OnStart(MoveStart)
        .OnPlay(MovePlay)
        .OnComplete(MoveEnd)
        .OnKill(MoveKill);
}

private void MoveStart()
{
    Debug.Log("Move Start");
}

private void MovePlay()
{
    Debug.Log("Move Play");
}

private void MoveEnd()
{
    Debug.Log("Move End");
}

private void MoveKill()
{
    Debug.Log("Move Kill");
}

 

위 예시 메서드인 MoveToPoint를 호출하면 디버그 로그에 다음과 같이 찍힌다.

 

 

0. OnStart

 

트윈이 시작될 때 호출된다. 기본적으로 트윈이 처음 시작할 때만 호출된다.

 

1. OnPlay 

 

트윈이 '재생'될 때 호출된다. 일반적으로 OnStart와 같이 호출된다.

기본적으로는 트윈을 중간에 멈췄다가 재생을 한다면 그때 OnPlay가 다시 호출될 수 있다.

 

2. OnComplete

 

트윈이 완전히 끝났을 때 호출된다.

 

3. OnKill

 

트윈이 Kill() 됐을 때 호출된다. Kill은 실행중인 트윈을 중단하는 메서드이다. 

DOTween에선 기본 설정으로 끝난 Tween에 대해 Kill하기에 위와 같이 디버그 메세지가 출력됐다.

 

 

private void MoveObject()
{
    Sequence sequence = DOTween.Sequence()
        .OnStart(() => {
            Debug.Log("Sequence Start");
        })
        .OnComplete(() => {
            Debug.Log("Sequence End");
        });

    sequence.Append(MoveToPoint(_wayPointsPositions[0]));
    sequence.Append(MoveToPoint(_wayPointsPositions[1]));
}

 

시퀀스에도 해당 메서드들을 이용할 수 있다.

위와 같은 시퀀스로 호출할 경우 다음과 같이 출력된다.

 

 

Sequence Start후, 각각 Tween의 메서드들이 호출되고, Sequence가 끝난 뒤에 Kill에 대한 메서드가 호출되는 것을 확인할 수 있었다.

 

 

DOTween에서 사용되는 이동 관련 메서드들은 Tween을 반환하는 형태라고 Sequence를 다룰 때 언급한 적이 있었다.

이를 통해 현재 재생 중인 Tween을 캐싱하는 것 또한 가능하다.

private Tween _currentTween

_currentTween = transform.DOMove(p_pointPosition, _moveDuration);

 

 

이렇게 캐싱한 트윈은 특정 상황에서 제어할 때 유용하게 사용될 수 있다.

 

_currentTween.Kill();

 

 

위의 경우에는 해당 트윈을 강제로 종료하게 한다. 이렇게 종료된 트윈은 OnComplete가 붙었더라도 호출되지 않는다.