유니티로 3D 게임을 개발하다가 만나게된 황당한 일입니다. 일반적인 FPS 게임처럼 케릭터를 움직이는 것을 구현해 보았는데, 키보드의 Up/Down으로 케릭터를 앞뒤로 움직이고 Left / Right 키로 케릭터를 회전시키는 메소드를 구현했습니다.
구현된 소스코드입니다. 아주 기본 코드죠.
그런데, 문제가 발생했네요. 케릭터의 회전하는 키를 몇번 눌렀다가 떼니까 계속 돌아가는것 아니겠어요.
private void MoveByPad()
{
float h = CnInputManager.GetAxisRaw("Horizontal");
float v = CnInputManager.GetAxisRaw("Vertical");
if (v > 0)
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
else if (v < 0)
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
if (h < 0)
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
else if (h > 0)
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
아니 이런, 그래서 이런 문제를 해결해 주기 위해서 키를 누르지 않았을 경우에는 강제로 회전속도를 0으로 만들어 줬더니만, 문제가 간단하게 해결되었네요. (빨갛게 표시된 코드를 추가로 삽입했습니다)
private void MoveByPad()
{
float h = CnInputManager.GetAxisRaw("Horizontal");
float v = CnInputManager.GetAxisRaw("Vertical");
if (v > 0)
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
else if (v < 0)
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
if (h < 0)
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
else if (h > 0)
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
else
{
rb.angularVelocity = new Vector3(0, 0, 0);
}
}
단 이 방법은 플레이어가 다른 어떤 외부 변수에 의해서 회전이 필요없을 경우에만 사용할 수 있다는것 기억해주세요.
이상 유니티 초보가 개발하면서 겪은 일과 나름의 해결 방법이었습니다.
'개발 > 정보' 카테고리의 다른 글
유니티 앱배포전에 꼭 해야할일 - 앱평가 (Rating) 간단하게 구현하기 (0) | 2017.06.13 |
---|---|
Unity Button에 AddListener 직접구현하는 방법 (0) | 2017.06.13 |
유니티에 Admob 광고 간단하게 구현하는 방법 (Singleton pattern 사용) (0) | 2017.06.12 |
유니티에서 PC, Max & Linux Standalone 항목이 사라졌어요 (0) | 2017.06.12 |
유니티 컴파일 오류 해결 방법 (Unable to install APK to device. Please make sure the Android SDK) (4) | 2017.05.29 |
Unity 3D Character rotating without any key press (0) | 2017.05.18 |
유니티 네트워크 문제 - 클라이언트 위치정보 업데이트 안됨 (1) | 2017.05.17 |
유니티게임 소스코드 '집나간 원숭이' 개발중 코드 공개 (22) | 2017.05.04 |
최근댓글