유니티에서 3D 오브젝트로 이뤄진 플레이어를 움직이는 기본적인 방법이 사용된 코드이다.
22번줄 flaot h = Input.GetAxisRaw("Horizontral")은 키보드 A,D, 좌,우 방향키의 입력을 감지해 왼쪽은 -1, 오른쪽은 1의 값을 반환하는 Input 클래스 안에 있는 GetAxisRaw함수를 사용한것이다.
즉 사용자의 키 입력에따라 -1,0,1의 값을 반환하게 된다.
23번줄 float v = Input.GetAxisRaw("Vertical")은 키보드 W,S, 위, 아래 방향키의 입력을 감지해 윗방향은 1, 아래 방향은 -1의 값을 반환하는 코드이다.
이것 또한, 사용자의 키 입력에 따라 -1,0,1의 값을 반환한다.
26번줄 Vector3의 moveDir = (Vector3.forward * v) + (Vector3.right * h);의 의미를 풀어서 설명하자면
Vector3.forward는 좌표 값 (0,0,1)을, Vector3.right은 좌표값 (1,0,0)을 의미한다.
유니티에서 사용자가 사용하기 쉽게 만들어 놓은 것이라고 생각하면 편하다.
따라서, 26번줄은 Vector3 moveDir = ((0,0,1) * v) + ((1,0,0) * h);가 되는것이다.
이코드가 의미하는것은, 즉,
v와 h는 입력값이 없으면 0의 값을 가지고있다. 즉 플레이어가 방향키를 입력하지 않는다면 당연히
moveDir의 값은 (0,0,0)일 것이다. 여기서 플레이어가 좌측 방향키를 누르게 되면, h값이 1이 되어, (1,0,0)
우측 방향키를 누르게되면 h값이 -1이 되어 (-1,0,0), 아래 키를 입력하면 v값이 -1이 되어 (0,0,-1),
윗방향키를 입력하면 v값이 1이되어 (0,0,1)이될것이다. 물론 동시에 입력하면 (1,0,1), (-1,0,-1) 또한 가능하다.
29번줄에서 사용된 Traslate 함수의 의미는 프레임마다 인자값으로 넘겨준 값 만큼, gameObject_Player의 좌표를 움직여라는 뜻이다.
Time.deltaTime의 의미는 이전 프레임의 완료까지 걸린 시간이다.
이렇게만 얘기하면 크게 와닿지 않을거라 생각해 예시를 들면 이렇다.
60프레임과 30프레임 컴퓨터가 Translate 함수로 x축 방향으로 1씩 좌표 이동을 시킨다고 생각해보자.
그러면 60프레임 컴퓨터는 1초에 Update()함수가 60번 실행되어 x축 방향을 60만큼 물체를 이동시키고,
30프레임 컴퓨터는 1초에 Update()함수가 30번 실행되어 x축 방향으로 30만큼 물체를 이동시킬것이다.
이러한 컴퓨터들 간의 성능차이로 인해 생기는 불합리함을 해소해주는게 바로 deltatime이다.
60프레임 컴퓨터는 deltaTime의 값이 작을 것이고,
30프레임 컴퓨터는 deltaTime의 값이 클것 이다.
이값을 곱하게 되면 컴퓨터의 성능 차이로 인해 값이 크게 달라지지 않게되기 때문에 moveDir에 Time.deltaTime을 곱한 것이다.
Space.Self의 의미는 로컬좌표라는 뜻을 의미한다.
즉 물체의 좌표값을 기준으로 움직인다고 생각하면 편하다, Space.Self는 생략이 가능하다.
space.Self의 반대되는 개념인 Space.World는 월드자표, 즉 유니티 Scene 뷰 내의 절대좌표값이라고 생각하면 된다.
우리는 플레이어 기준으로 이동시킬것이기 때문에 여기서는 Space.Self를 사용한것이다.
'Unity > 3D' 카테고리의 다른 글
유니티에서 오브젝트를 찾는 방법 (0) | 2023.11.21 |
---|---|
유니티 3D 플레이어 추적 구현 (0) | 2023.11.17 |