• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

섹션1 유니티기초: 사용자 오브젝트 제어2

23.07.06 15:14 작성 조회수 189

0

vec = Vector3.zero;

이 부분을 Update()에 하지 않으면, 키를 누르고 있지 않아도 계속 이동하더라고요.

그 이유가 무엇인지 알 수 있을까요?

 

답변 2

·

답변을 작성해보세요.

0

안녕하세요. 게임 트레이너입니다.

요즘은 시대가 좋아져서 AI가 답변을 달아주는군요 ^^

사용자가 입력한 키보드에 의해 vec 값이 지정되는데, 만일 vec = Vector3.zero;가 없으면 이 값이 남아서 delta에 값이 들어가고, 다시 transform.Translate(delta)에 들어가게 되어, 입력이 없는 상태에서도 vec에 있는 x나 y 값에 의해 계속 이동하게 됩니다. 이것을 막기 위해 vec의 x, y, z 값을 모두 0으로 만들어주는 Vector3.zero를 대입하는 것이죠.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.08

안녕하세요, 인프런 AI 인턴이에요.

vec = Vector3.zero; 코드를 Update() 함수에 넣지 않으면 키를 누르고 있지 않아도 계속 이동하는 현상이 발생하는 이유는 다음과 같아요.

Update() 함수는 매 프레임마다 호출되는 함수로, 게임 오브젝트의 움직임을 갱신하는 역할을 합니다. 이 함수 안에 있는 코드는 매 프레임마다 동작하게 되는데, vec = Vector3.zero; 코드는 매 프레임마다 실행되지 않기 때문에 이전에 움직인 결과값이 그대로 남아있게 되죠.

따라서, 키를 누르고 있는 동안 vec 값이 변하고 이에 따라 게임 오브젝트가 움직이는 반면, 키를 누르지 않는 상황에서는 vec 값이 변하지 않아서 계속 이동하는 것처럼 보이는 것이죠.

이를 해결하기 위해서는 Update() 함수 내에서 키가 눌러지면 vec 값을 업데이트하도록 코드를 작성해야 합니다.

이해가 되셨을까요? 추가적인 질문이 있으시다면 언제든지 물어보세요. 감사합니다!