unity 게임 개발 입문 KDT 실무형 Unity 게임개발자 양성과정
Input안에 설정되어있는 이름중 name과 동일한것을 들고와 그에 맞는 값을 -1.0f ~ 1.0f까지 반환한다.
자주 사용하는 변수 내용은 Horizontal
: 상하(W, S, Up Arrow, Down Arrow, 패드)를 처리하고 Vertical
: 좌우를 처리한다.
위와 거의 동일한 행동을 하지만 반환 값이 다르다.
-1 , 0 , 1 값을 반환한다.
만약 캐릭터 이동처리하는 부분을 Update에 넣으면 프레임마다(화면이 갱신 될 때마다) 캐릭터가 이동한다. 하지만 프레임이란게 컴퓨터의 성능마다 다르기에 좋은 컴퓨터는 240이상 갱신 될 수 있고 안 좋은 컴퓨터는 15이하 일수도 있기에 이동속도 차이가 발생해 버린다.
게임 개발자는 이를 해결하기 위해 Time.deltaTime
를 곱해줘야 된다.
그러면 캐릭터의 이동속도는 컴퓨터의 성능에 상관없이 동일하게 된다.
그래서 Time.deltaTime
이 무엇인지 왜 Time.deltaTime
을 곱해주면 이동속도가 동일해지는지 궁금 할 수가 있다.
Time.deltaTime
은 프레임이 갱신될 때까지 걸린 시간이다.( = 1 / 프레임)
예를 들어서 내 컴퓨터가 60프레임 일 때(화면이 1초에 60번 갱신된다) Time.deltaTime은 1/60초 이다.(하지만 실제로 프레임은 계속 변경되기에 일정하지 않다)
결과적으로 프레임 Time.deltaTime = 1이다.
이를 이용하여 이동속도 -1 또는 0 또는 1에 1 / 프레임
곱한 상태에서 1초가 지나면 결과적으로는 이동거리가 |1|
이 된다.( -1 1 / 60 * 60 = |1|)
그래도 말이 이해가 안된다면 주의에 흔히 들을 수 있는 Hz와 주기의 관계와 동일하다고 생각하면 된다.
Hz = 프레임, 주기 = Time.deltaTime
Hz도 1초에 몇 번 회전하냐는 뜻이고, 주기는 한번 회전하는데 몇초가 걸리냐 라는 뜻이다.
일반적인 접근자 private은 외부에서 접근 못하도록 막는다. 하지만 [SerializeField]
을 사용하면 private여도 인스펙터에서 값을 확인이 가능하다.
단 외부 스크립트에서는 값을 수정, 참조, 접근이 불가능하다.
원리는 유니티가 public처럼 해당 변수를 직렬화해 저장하는 것이다.
인스펙터
.normalized
이란 어떠한 크기의 백터이든 단위 벡터를 반환한다.
즉 쉽게 말해 크기가 아닌 방향을 반환한다고 생각하면 된다. (상하좌우는 그냥 1로 표시가 가능하지만 대각선은 1로 표시할수가 없기 때문이다.)
변수에 들어있는 벡터의 길이를 반환한다 - 읽기 전용
이와 비슷한 메소드로 .Distance(a,b)가 있다.(a,b사이의 거리를 반환한다)
Vector3에서는 .sqrMagnitude를 사용하면된다.(장점 : 속도 빠르다. 단점 : 루트 계산을 하지 않아 정확하지 않다.)