객체에 방향키를 누르면 움질일 수 있게 만들 수 있는 방법은 여러가지가 있습니다.

 

그 중 Rigidbody의 AddRelativeForce를 사용하는 방법이 있고,

 

Input.GetAxis("Horizontal"), Input.GetAxis("Vertical") 를 사용하는 방법도 있고,

 

또 하나는 transform을 가져와서 사용하는 방법이 있습니다.

 

이번에는 위 세가지 방법 말고 InputSystem을 사용하는 방법을 알아보겠습니다.

 

 

 

InputSystem

 

먼저 Window의 Package Manager를 열어주고

 

InputSystem을 검색해 준 후에 import 해줍니다.

더보기

그 후에 Edit -> Project Settings로 들어가 주고 Player의 Active Input Handling을 봐줍니다.

 

우선 비행선의 움직임을 위해서 Script를 생성해주고 비행선에 Script를 Add Component 해줍니다.

 

그 후에 Script 내부에 using UnityEngine.InputSystem; 을 선언해 준 후에 

 

[SerializeField] InputAction movement; 를 선언해줍니다.

 

그 후에 Unity Hub로 다시 돌아가서

 

Script를 추가한 비행체를 클릭하여 빨간 박스의 오른쪽 위에 있는 Add Binding을 눌러준 후

 

3번째(2D Vector)를 눌러주고 단축키를 지정해주면 됩니다. (더블클릭 -> Path -> Listen -> 단축키 누르기 -> 설정해주기)

 

Script 에서는 Update의 29, 32 번째 줄처럼 사용하면 방향키가 눌리는 값을 가져올 수 있습니다.

 

 

 

Update Position

 

방향키를 누름으로써 값들을 가져오게 됐다면

 

이제 비행선을 움직이게 해주어야 합니다.

 

Vector3인 이유는 비행선이 3D 공간에서 움직이기 때문입니다.

 

x, y, z 순으로 입력 데이터 값을 가지며 새로운 위치값을 순서에 맞게 넣어주면 됩니다.

 

값을 넣어줄때 역시 프레임을 고려하여 Time.deltaTime 값을 곱해주게 됩니다.

 


Time.detaTime을 사용하는 이유!!

deltaTime

Unity는 위와 같이 deltaTime을 '전 frame이 완료되기까지의 시간'이라고 설명하고 있습니다.

ex) 하나의 frame이 완료되기까지의 시간이 5면 deltaTime = 5

 

하나의 frame당 1m를 가는 총알이 있다고 가정하겠습니다.

 

초당 10프레임을 찍어내는 10FPS 유저는 총알이 3m 가는 동안

 

20FPS 유저는 초당 2배의 프레임을 찍어내므로 6m를 가겠죠. 

 

이렇게 되면 20프레임 유저의 총알이 더 빠르므로 10프레임 유저는 걸레짝이 될 수 밖에 없습니다. 

 

그렇다면 여기서 deltaTime은 1초에 10프레임을 찍으니 한 프레임당 1/10초 이것이 바로 deltaTime의 개념이 되는 것 입니다. 20프레임이면 1/20초 가 되는 것이죠.

 

이 값을 총알 이동거리에 곱해주면 10프레임 컴퓨터에서는 한 프레임당 1m 날라가던 총알은 0.1m, 20프레임 컴퓨터는 0.05m를 날라가므로 실제적으로 결과 값은 동일하게 나오는 것입니다.

 

비록 10프레임 컴퓨터는 20프레임 컴퓨터보다 한 프레임에 더 먼 거리를 날아가므로 뚝뚝 끊길 수는 있지만, 두 유저의 총알 속도는 같아진 것입니다.

 

※ 출처 : https://itmining.tistory.com/46


 

A, D 방향키로 움직일 수 있게 된 비행선을 볼 수 있습니다.

 

controlSpeed는 [SerializeField]로 선언해주어서 적절한 값을 정해주었습니다.

 

+ Recent posts