본문 바로가기

Unity/3D

Unity3D FPS처럼 화면 돌리기 [JavaScript]

반응형

http://javart.tistory.com/8 과 http://javart.tistory.com/9를 읽고 오면 이해가 수월할 듯 하다.

이전 소스를 수정하여서 간단히 구현한 것이기 때문이다.


기존 소스의 이동 부분을 생각해보자. 여기선 '이동'만 신경쓰며 카메라와 물체의 '회전'은 신경쓰지 않아도 된다. 이미 구현되어있기 때문이다. 


먼저, FixedUpdate()의

h= Input.GetAxis("Horizontal");

v = Input.GetAxis("Vertical");

두 문장이다.


h의 경우 수평, v의 경우 수직을 나타내며, 이동방향을 표현할 수 있다.

여기서 수정할 것은 "Horizontal"을 "Mouse X"로 수정하는 것이다.


Mouse X란 마우스가 스크린 상에서의 이동할 때, 좌우로 움직이는 것을 수치화 해주는 것인데, 여기선 좌표가 아니라 방향이나 힘으로서 이해하면 되겠다.


이렇게하면 마우스로 화면이 좌우 회전을 한다. 물론, 아직 민감도가 적용이 안되지만.. 그건 민감도값을 넣고 이동좌표에 곱해주면 될거라 생각한다.



허나, 기존소스는 ad에 대해서 화면이 회전하고 ws중 하나를 누른체로 ad의 값에 따라서 대각선으로 이동하게 되어있었다.


run()함수의

moveDirection.Set(h,0,v);

부분인데, h로 인해서 대각선 이동을 하게 된것이다. 따라서 바라보고있는 방향으로 앞뒤로 움직이게 하기위해

moveDirection.Set(0,0,v);

h값을 아예 줘버리지 않는다. 이렇게 함으로서 마우스로 좌우 회전 및 앞뒤 이동이 구현되었다.



-------------------------------------

여담이지만 아직 감이 전혀 안잡혀서.. 처음에 마우스 좌표 읽어서 카메라가 그곳을 쳐다보게 하려고 했는데

아무리 해도 마우스 이벤트가 안잡혀서 Null참조예외 발생떔에 골치가 아팠다.


하지만... 조금만 머리를 식히고 생각하니 그냥 회전만 시키면된다느 것을 깨닫고 이렇게 행했다.

----------------------------------

추가 글,


방금 생각난김에 마우스 민감도를 조절해봤는데,


float변수를 하나 더 만들어서 

transform.rotation = Quaternion.Slerp(transform.rotation, toRotation, Time.fixedDeltaTime  * sensitive);


이런식으로 시간에다가 곱하는것이었다.

다만 이 방식은 조금의 값에도 민감도가 확 오르니.. 유저가 조절하게 해준다고 치면은

소수점 단위로 해야할 듯 하다!

반응형