일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- gemmasprint
- 잔디 기부
- c++ 5567
- texture mapping
- pcce 기출문제 10번 공원
- boj 1991
- pccp 기출문제 풀이
- depth-stencil
- pcce 기출문제 10번 지폐 접기 풀이
- 잔디 기부 캠페인
- pcce 기출문제 10번 공원 풀이
- 렌더링 파이프
- PCCE
- directx 그래픽스
- constant buffre
- boj 5567
- pcce 기출문제 풀이
- DirectX
- pcce 기출문제 9번 지폐 접기
- 오블완
- 백준 5567
- python 고대 문명 유적 탐사
- 수식 복원하기
- DirectX12
- 프로그래밍공부
- root signature
- 코드트리 고대 문명 유적 탐사
- 티스토리챌린지
- 고대 문명 유적 탐사
- c++ 1991
- Today
- Total
오구의코딩모험
[DirectX] Component, 삼각 함수, Vector 본문
Component, 삼각 함수, Vector
게임 개발은 다양한 기술과 수학적 개념이 결합된 창의적인 작업입니다.
이번 글에서는 Unity와 Unreal의 Component 시스템 비교와 함께 게임 개발에 필요한 스마트 포인터의 활용법 및 게임 수학의 기본 개념을 정리합니다.
인강을 통해 배우고 정리한 내용을 공유한 글이기에 정확하지 않은 정보가 있을 수 있으며,
수정이 필요하다면 언제든 댓글 작성해주시면 감사하겠습니다!
1. Component 시스템 이해
Unity의 Component 기반 구조
Unity는 Component를 사용해 객체에 필요한 기능만 추가할 수 있는 모듈화된 설계를 제공합니다.
- GameObject는 기본적인 틀이며, 다양한 Component(예: Transform, Rigidbody, Collider)를 추가하여 기능을 확장합니다.
- 이러한 방식은 직관적이며, 필요한 기능만을 골라 사용할 수 있어 개발과 디버깅에 유리합니다.
Unreal의 클래스 상속 구조
Unreal은 클래스 상속을 기반으로 객체의 기능을 확장합니다.
- 필요한 기능을 제공하는 기본 클래스를 상속받아 새로운 클래스를 정의합니다.
- 코드 중심의 설계로 고급 사용자에게 적합하며, 더 세밀한 제어를 가능하게 합니다.
2. 스마트 포인터 활용
스마트 포인터는 메모리 관리를 단순화하고 안전하게 처리할 수 있도록 돕는 C++ 기능입니다.
weak_ptr
- weak_ptr은 shared_ptr와 함께 사용되며, 객체의 소유권을 가지지 않고 약한 참조를 유지합니다.
- 순환 참조(Cyclic Reference)를 방지하는 데 유용합니다.
enable_shared_from_this와 shared_from_this()
- enable_shared_from_this는 클래스 내부에서 안전하게 shared_ptr로 자신을 공유할 수 있게 합니다.
- `shared_from_this()` 메서드를 사용하여 새로운 shared_ptr을 생성하지 않고 기존 포인터를 참조합니다.
dynamic_pointer_cast
- 스마트 포인터 간의 타입 변환을 제공합니다.
- 런타임 시 타입을 확인하고 다운캐스팅(Downcasting)이 가능합니다.
3. 게임 개발에 필요한 수학
게임 개발에서는 다양한 수학적 개념이 사용됩니다. 특히, 삼각 함수와 벡터 연산은 필수적입니다.
3.1 직각삼각형과 삼각 함수
- 피타고라스 정리 : 빗변의 제곱 = 높이의 제곱 + 밑변의 제곱
- 삼각 함수:
- cos = 밑변 / 빗변
- sin = 높이 / 빗변
- tan = 높이 / 밑변
- 삼각 함수의 역함수 :
- arccos: 주어진 값에서 각도를 구함 (0° ≤ 각도 ≤ 180°)
- arcsin: 주어진 값에서 각도를 구함 (-90° ≤ 각도 ≤ 90°)
- arctan: 주어진 값에서 각도를 구함 (-90° ≤ 각도 ≤ 90°)
3.2 호도법과 함수의 성질
- 호도법 : 원에서 호의 길이가 1일 때의 각도를 라디안(Radian)으로 정의합니다.
: 1 라디안 ≒ 57°
- 함수의 성질: 우함수: f(x) = f(-x) , 기함수: f(x) = -f(-x)
3.3 코사인 법칙과 덧셈 정리
- 코사인 법칙 : a² = b² + c² - 2bc × cos(x)
- 코사인 덧셈 정리
* cos(a+b) = cos(a)cos(b) - sin(a)sin(b)
* sin(a+b) = sin(a)cos(b) + cos(a)sin(b)
4. 벡터(Vector)와 연산
벡터의 기본
- 벡터는 크기와 방향을 모두 포함하는 값입니다.
- 단위 벡터는 방향을 유지하며 크기를 1로 정규화한 벡터입니다.
벡터의 내적과 외적
- 내적 : 두 벡터 사이의 각도와 관련된 스칼라 값을 반환합니다.
- 내적은 교환 법칙이 성립합니다.
- 외적 : 두 벡터가 이루는 평면에 수직인 벡터 값을 반환합니다.
- 외적은 교환 법칙이 성립하지 않습니다.
응용 예시
- 내적은 두 벡터의 방향성 비교나 빛의 반사 계산에 사용됩니다.
- 외적은 좌표계 변환, 평면의 법선 벡터 계산 등에 사용됩니다.
특정 범위 안에 좌표 값이 있는지 없는지 확인할 때, 외적을 사용하여 판별할 수 있다.
ex) 게임 내에서의 스킬이 쿨타임일 경우, 지난 시간만큼 스킬 UI를 검은색 → 밝은색으로 반전 시키는 기능
5. 정리
1. Unity와 Unreal 선택 팁
- 직관적인 개발 환경을 원한다면 Unity, 고급 기능과 세밀한 제어가 필요하다면 Unreal이 적합합니다.
2. 스마트 포인터 활용
- 순환 참조 문제를 피하려면 `weak_ptr`을 적극적으로 활용하세요.
- 클래스 내부에서 안전하게 자신을 공유하려면 `enable_shared_from_this`를 사용하세요.
3. 게임 수학 활용
- 삼각 함수는 각도 계산, 충돌 판정, 카메라 이동 등 다양한 상황에서 활용됩니다.
- 벡터의 내적과 외적은 게임 내 물리 계산과 공간 처리의 핵심입니다.
4. 효율적인 학습 방법
- 함수와 연산 대부분은 게임 엔진에서 제공되므로, 원리를 이해하는 데 중점을 두세요.
- 코드보다는 수학적 개념이 적용되는 사례를 중심으로 학습하면 이해가 빨라집니다.
오블완 챌린지에서 이모티콘을 받아서 써봤다 ㅎㅎ
이번 글에서는 Unity와 Unreal의 Component 시스템 차이, 스마트 포인터의 활용, 그리고 게임 개발에 필요한 수학적 개념을 정리했습니다.
이러한 지식은 게임 개발의 기초를 이해하는 데 매우 중요하고, 지속적으로 학습하고 활용하면 개발 역량을 크게 향상시킬 수 있을 것이라 생각합니다.
'Game > DirectX' 카테고리의 다른 글
[DirectX] 변환 행렬 (Matrix) (2) | 2024.12.16 |
---|---|
[DirectX] Input과 Timer, Material (1) | 2024.12.07 |
[DirectX] Texture Mapping, Depth Stencil View (1) | 2024.12.04 |
[DirectX] Window Application (0) | 2024.11.28 |
[DirectX] 그래픽스, 렌더링 파이프 (2) | 2024.11.22 |