Unity Position

램해·2025년 4월 16일
0

벡터

유니티의 모든 오브젝트에는 Transform을 가진다. 이 transform은 위치(Position), 크기(Scale), 회전 (Rotate) 값을 가지는데 이 값들은 벡터의 형식으로 저장된다.
Vector3는 3차원 내에서 나타내는 구조체이며 x, y, z의 구성요소를 가집니다.
유니티의 백터 연산을 살펴보면 다음과 같은 연산을 거친다.

Vector3 a = new Vector3(1, 5, 4);
Vecotor3 b = new Vector3(2, 3, 6);
Vector3 sum = a + b; // 벡터의 합(3, 8, 10)
Vector3 difference = a - b; // 벡터의 뺄셈(-1, 2, -2)
Vector3 scaled = a * 2; // 벡터의 곱(2, 10, 8)
Vector3 divided = a / 2; // 벡터의 나눗셈(0.5, 2.5, 2)

벡터 함수도 살펴보자

Vector3.zero : Vector3(0, 0, 0)
Vector3.one : Vector3(1, 1, 1)
Vector3.back : Vector3(0, 0, -1)
Vector3.down : Vector3(0, -1, 0)
Vector3.forward : Vector3(0, 0, 1)
Vector3.left : Vector3(-1, 0, 0)
Vector3.right : Vector3(1, 0, 0)
Vector3.up : Vector3(0, 1, 0)

Lerp

보간(Interpolation)을 위한 함수로 두 값 사이를 부드럽게 이동시키고 싶을 때 이용된다.

Vector3.Lerp(Vector3 a, Vector3 b, float t);
a = 시작 값
b = 목표 값
t = 보간 계수

Position

오브젝트의 월드 좌표상 위치를 말하며, 씬이 어디있나를 뜻한다. world Space는 맵을 기점으로 오브젝트가 어딨나를 뜻하고 Local Space는 다른 오브젝트 기준으로 지정한 오브젝트가 어딨는지 설명해주는 것이다.

a = (3, 5)
b = (5, 5)
b는 world Space 기준으로 (5, 5)에 있지만
a의 Local Space 기준으로는 (2, 0)에 있다.

Rotation

유니티에서 회전각을 다루는 값이다. 그 중에서 Quaternion과 Euler에 대하여 알아보기 전에 짐벌락 현상에 대해서 알아보자

짐벌락

3개의 짐벌을 이용해 회전하는 3차원에서 두 개의 짐벌이 겹칠 경우 회전축 하나가 사라지는 현상을 짐벌락 이라고 한다. 짐벌락 현상이 생긴 경우 두 개의 축이 같은 기준으로 회전한다.
예시 영상

Quaternion

x, y, z, w축으로 이루어지면 벡터(x, y, z)와 스칼라(w)를 의미한다. 유니티 내부에서는 Quaternion의 회전을 저장하고 계산하기에 부드러운 회전이 되며 짐벌락 현상이 없다. 그렇지만 직관적으로 이해하기 힘들다는 단점이 있다.

Euler

x, y, z축을 기준으로 몇 도씩 회전했는지를 나타내며 사람이 이해하기 쉽다.
하지만 짐벌락 현상이 생길 수 있다.

FPS

게임을 하면서 많이 접해봤을 단어이다. 프레임 설정이라는 단어는 정의하자면 1초에 몇개의 프레임이 나타나는지를 의미한다. 예를 들어서 1초에 60프레임이라고 하면 1초에 60개의 프레임이 나타난다는 의미이다.

Time.deltaTime

Time.deltaTime는 시간 개념으로 각 프레임을 렌더링하는데 걸리는 시간을 계산하는 Unity 함수이다. 즉, 프레임이 변경될 때마다 측정한 값이 Time.deltaTime으로 나타낸다. 예를 들어서 게임이 초당 60프레임으로 실행된다면 Time.deltaTime은 대략 0.0167초(1초/60프레임) 정도이다.
Time.deltaTime을 사용하는 이유는 컴퓨터의 성능에 따라 프레임이 달라질 수 있다. 그러면 같은 온라인 게임을 할 때 어떤 플레이어는 빠르게 움직이고 다른 플레이어는 느리게 움직일 수 있다. 그렇게이 Time.deltaTime을 쓰면 프레임 속도와 관계없이 일정한 속도로 움직일 수 있게 만들어 주는 역할이다.

0개의 댓글