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

게토랑님의 프로필 이미지
게토랑

작성한 질문수

레트로의 유니티 C# 게임 프로그래밍 에센스

PlayerMovement (2/4)

Move함수 만들 때 질문있습니다.

해결된 질문

작성

·

252

0

moveInput.magnitude를 쓰는 이유가 게임패드를 쓸 때는 1보다 작은 값이 들어올 수가 있기 때문이라고 하셨는데 저걸 쓰면 왜 값이 1이 되는지 모르겠네요.

magnitude는 벡터의 크기(길이)를 반환한다고 알고 있는데  게임패드에서 쓴다고 하더라도 예를들어서 moveInput값에 (0.2 , 0)이라는 값이 들어온다면 moveInput.magnitude는 0.2²+0²=0.04가 되어서 1이 안되는거 아닌가요? 

답변 1

0

이제민님의 프로필 이미지
이제민
지식공유자

일단 설명하기 전에, 말씀하신 방식으로 동작하는 것은 sqrMagnitude 입니다.
sqrMagnitude는 제곱근을 구하는 연산을 아끼기 위해 사용합니다.

magnitude를 사용하게 되면, 마지막에 0.04의 제곱근을 구하는 연산이 실행되므로 값이 0.2가 됩니다.

-

코드의 의도를 제가 설명을 명확하게 하지 않았네요.

키보드와 달리 게임 패드는 살짝 미는 것이 가능합니다. 따라서 키보드일때는 항상 속도값을 100% 사용하되, 스틱을 사용하게 되는 경우에는 살짝 밀면 50%, 20% 같은 값을 사용할 수 있어야 합니다.

따라서 해당 코드의 의도는 속도가 항상 1(100%)가 아닌, 스틱을 민 정도에 따라 0~1 사이의 값을 쓰기 위해서 작성된 것입니다. 따라서 moveInput.magnitude는 값을 1로 만들기 위한 코드가 아니라, 0~1사이의 값을 쓰기 위한 코드입니다.

게토랑님의 프로필 이미지
게토랑

작성한 질문수

질문하기