본문 바로가기
디지털노마드

[5분개발] ChatGPT를 활용하여 애니메이션 지연 문제 해결하기

by 인텔리노마드라이프 2024. 4. 20.
728x90

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.

오늘은 ChatGPT를 활용하여 애니메이션 지연 문제를 해결해볼께요.

ChatGPT를 사용해서 개발된 기능 수정하기

이번에는 ChatGPT를 활용해서 만들어진 기능을 수정해볼까해요.

[기능 수정 관련 기사는 준비하는 IntelliOneStudio 개발자]

 

 

아래 글에서 애니메이션 전환 및 테스트 스크립터를 만들어 적용하는 것까지 해봤어요.

[5분개발] ChatGPT를 활용하여 Unity 에서 대기(Idle) 애니메이션 만들기

 

테스트를 해보니 지연 문제가 생겼어요

스크립터 적용 시 시험을 해보니 키 입력 시 바로 애니메이션이 동작하지 않고 지연이 발생했어요.

[질문] 아래 스크립터를 적용하면 약간의 애니메이션 지연이 발생하는 데 이 문제를 해결할 수 있게 코드를 수정해줘

using UnityEngine;

public class PlayerAnimationController : MonoBehaviour
{
    private Animator animator; // 애니메이터 컴포넌트에 대한 참조 변수

    void Start()
    {
        // 플레이어에 부착된 Animator 컴포넌트를 가져옵니다
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 플레이어의 수평 입력을 받습니다 (A, D 키나 좌우 화살표 키)
        float move = Input.GetAxis("Horizontal");

        // 플레이어가 이동 중인지 확인합니다
        if (move != 0)
        {
            // 'IsRunning' 파라미터를 true로 설정하여 러닝 애니메이션을 실행합니다
            animator.SetBool("IsRunning", true);
        }
        else
        {
            // 'IsRunning' 파라미터를 false로 설정하여 대기 상태 애니메이션으로 전환합니다
            animator.SetBool("IsRunning", false);
        }
    }
}

[답변] 

애니메이션 전환에서 지연 현상이 발생하는 것은 전환 조건, 전환의 Exit Time 설정, 또는 애니메이션 자체의 프레임 문제일 수 있습니다. Exit Time은 애니메이션 상태가 완전히 끝난 후 다음 상태로 넘어가는 지점을 설정하는 것으로, 이를 0으로 설정하면 상태 전환이 즉시 발생합니다. 또한 전환 조건의 'Has Exit Time' 설정이 활성화되어 있다면, 애니메이션 클립이 끝날 때까지 기다렸다가 전환 조건을 체크하기 때문에 지연이 발생할 수 있습니다.

스크립트 수정을 통해 입력과 애니메이션 전환 간의 지연을 줄이는 방법 중 하나는 입력이 감지될 때 즉시 애니메이션 상태를 변경하도록 하는 것입니다. 이를 위해 애니메이터 컴포넌트에서 'Running' 애니메이션 상태로의 전환에 'Has Exit Time'을 비활성화하고, 조건을 즉시 체크하도록 설정해야 합니다.

이제 스크립트에서는 다음과 같이 입력을 처리할 수 있습니다:

using UnityEngine;

public class PlayerAnimationController : MonoBehaviour
{
    private Animator animator;
    private float horizontalInput;
    private bool isRunning;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 수평 입력을 가져옵니다.
        horizontalInput = Input.GetAxisRaw("Horizontal"); // GetAxisRaw를 사용하여 더 즉각적인 입력 반응을 얻습니다.

        // 입력에 따라 isRunning 상태를 결정합니다.
        isRunning = horizontalInput != 0;

        // 애니메이션 파라미터를 즉시 설정합니다.
        animator.SetBool("IsRunning", isRunning);
    }
}

위 스크립트는 GetAxisRaw를 사용하여 입력의 스무딩 처리를 건너뛰어 더 즉각적인 반응을 얻습니다. 이렇게 함으로써 입력과 애니메이션 전환 사이의 지연을 줄일 수 있습니다. Unity 에디터 내의 애니메이터 컴포넌트 설정도 함께 검토하여 'Running' 애니메이션의 'Exit Time' 설정이나 'Has Exit Time' 옵션을 적절히 조정해야 합니다.

 

ChatGPT가 제시한 문제 해결 방법대로 진행했어요

먼저 Has Exit Time'을 비활성화하고 수정된 코드를 반영했어요

[Has Exit Time'을 비활성화]

 

아래 영상과 같이 지연 문제는 바로 해결이 되었어요.

 

[애니메이션 지연 현상 수정 완료]

 

기능 개발도 ChatGPT, 수정도 ChatGPT

개발하면서 마음에 들지 않는 부분의 수정도 ChatGPT가 다 해주네요. 

오늘은 만들어진 기능을 쉽게 수정하는 방법을 살펴봤어요. 

 

코딩을 잘하는 사람보다

창의적 생각과 설계를 잘하는 사람들이 더 돋보이는 세상이 올 것 같아요. 

 

[기능 수정 관련 기사를 다 쓰고 잠깐 행복해하는 IntelliOneStudio 개발자]

 

지금까지,

언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.

감사합니다.

728x90