728x90

오브젝트 이동 구현에는 여러가지 방법이 있습니다. transform.Translate , addForce,CharacterController 등등

각자 장점과 단점이 있는데

 

transform.Translate : 움직일때 벽을 관통하는 문제 , 물리적 충돌에 대한 부분을 감안하지않아 구현이 번거롭다.

AddForce : 미끄러지는 느낌 ,가장 자연스럽다

CharacterController : 자연스럽지 못하다 ,단 구현이 편리하다

 

큰 특징을 뽑아보자면 저정도가 될 것 같습니다 다른 의견이 있다면 댓글 달아주세요!

 

저번에 작성한 transform.Translate 이동 구현은 아래 글을 참고해주세요

 

[Unity 3D]유니티 3D : 방향키를 이용한 간단한 캐릭터 이동 구현 :: 매일개발자 (tistory.com)

 

[Unity 3D]유니티 3D : 방향키를 이용한 간단한 캐릭터 이동 구현

차례로 이동 , 점프 , 애니메이션 , 다양한 기능 등을 구현할 예정이고 이번은 간단한 이동을 구현해보겠습니다. 이동 방식은  transform, rigidbody, character controller 가 있는데 저는 transform을 이용한.

wookeee.tistory.com

 

구현 

 

 

FixedUpdate()는 물리연산에 최적화된 함수이기 때문에 Movement()함수가 작동되도록 했습니다.

 

먼저 Movement() 함수를 살펴보겠습니다

 

moveDirection = object.forward * vertical + object.right * horizontal;
rigidbody.AddForce(moveDirection.normalized * moveSpeed * 10f, ForceMode.Force);

 

코드는 간단합니다 키보드 입력의 앞 , 뒤 입력을 받아 각각 forward와 right에 곱해줍니다

 

*곱해주는 이유는?: w키를 누르면 vertical 값이 1, s키를 누르면 -1이 되고 horizontal은 d키를 누르면 1 , a키를 누르면 -1이 됩니다 그럼 w를 눌렀을때 forward와 1을 곱하면 똑같이 forward가 되고 -1을 곱하면 forward가 반전되어 반대로 이동하게 되는것입니다.

 

*normalized (벡터의 정규화) : normalized가 자주 보일텐데 이것을 사용하는 이유는 무엇일까요? 앞으로 이동하는 속도가 1 옆으로 이동하는 속도가 1이라고 했을때 둘이 동시에 누르면 1이 되어야하지만 사용자의 의도와는 달리 1.xxx 라는 값이 나올것입니다 그것을 막기 위해 정규화를 사용하는것입니다 자세한 내용은 다음에 다뤄보겠습니다

 

실행을 하고 키를 눌러보면 아마 속도가 끊임없이 빨라질것입니다.

디폴트값으로 마찰력이 0이기 때문입니다

 

Rigidbody에 Drag는 마찰력을 의미하고 이것이 높을수록 마찰력이 크다고 할 수 있습니다.

 

이동 방향에 따른 오브젝트의 회전은 이동구현(2)에서 구현하겠습니다!

 

결과

키 입력에 따라 오브젝트가 AddForce로 이동하는 모습

 

728x90

+ Recent posts