인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박미라님의 프로필 이미지
박미라

작성한 질문수

밑바닥부터 시작하는 왕초보 유니티 2D 게임제작

사용자 오브젝트 제어2

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

작성

·

250

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 인턴이에요.

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

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

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

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

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

박미라님의 프로필 이미지
박미라

작성한 질문수

질문하기