gksrudtlr
|2025. 2. 10. 22:27
인스턴스와 객체
- 인스턴스
- 클래스 기반으로 실제 메모리에 할당되어 생성된 객체
- 클래스는 일종의 설계도로, 이 설계도를 바탕으로 만들어진 실체
- 객체
- 프로그래밍에서 실제로 존재하거나 개념적으로 표현할 수 있는것
- 데이터(속성)와 기능(메서드)을 함께 가지며, 클래스 기반으로 생성
- 차이점
- 객체는 항상 인스턴스이지만, 인스턴스틑 항상 객체가 아님
- 클래스의 인스턴스는 해당 클래스 기반으로 생성된 구체적인 객체를 의미
- 객체는 메모리에 할당된 실제 데이터를 가지고 있지만, 클래스의 정의만으로는 실제 데이터가 없음
캐릭터 이동관련 행렬
- FRotaionMatrix()
- FRotaotr를 변환 행렬로 변환하는 클래스
- 넘겨주는 FRotator형 인자 값의 변환 행렬을 만듦
- .GetUnitAxis(EAxis::)
- Enum형 인자를 통해 그 축의 단위 벡터를 사져오는 함수
- 회전행렬
- $R = \begin{bmatrix} cos\theta & sin\theta & 0 \\ -sin\theta & cos\theta& 0 \\ 0 & 0 & 1\end{bmatrix}$
- Forward/Right Direction구하기
- 회전행렬과 원하는 방향의 단위 벡터를 이용해 방향을 구할 수 있다
- 회전행렬 R과 단위벡터의 곱을 하면 되는데 언리얼에선 X축을 Forward, Y축을 Right로 사용한다
- 이때 우리는 카메라의 Z축을 기준으로 앞뒤, 왼쪽오른쪽으로 이동을 해야하기 때문에 Yaw값을 사용한다
- 연산과정
$R_yaw(90^\circ ) * X = \begin{bmatrix}0 &1 &0\\-1&0&0\\0&0&1\end{bmatrix} \begin{bmatrix}1\\0\\0\end{bmatrix} = \begin{bmatrix}0&-1&0\end{bmatrix}$
- -Y값이 나오게 되는데 이는 이때 함정이 존재한다
- 언리얼은 왼손 좌표계를 이용하지만 이 회전행렬은 오른손 좌표계를 이용한다
- 이때 Z축을 기준으로 양의 방향으로 회전하면 Y축 성분이 반대 방향이 된다
- 그래서 Sin에 -1을 곱해준 뒤 연산을 해 (0,1,0)이나와 Right Direction이 구해진다
- 왜 Sin만 변화하느냐?
- sin은 Y축의 변화량을 의미하고, cos은 x축의 변화량을 의미하기 때문
- 반지름이 1인 단위원을 그려 생각해보면 쉽게 이해할 수 있음
- 이렇게 회전 행렬과 단위 벡터를 이용하여 Forward/Right Direction을 구해 속도와 DeltaTime을 곱해주면 Character의 이동을 구할 수 있다