[게임수학] 4. 행렬
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다. ■ 선형성행렬에 대해 얘기하기 전에, 먼저 "벡터의 선형 변환"에서 말했던 선형성(Linarity)이란 성질에 대해 살펴보자.스칼라 곱셈은 벡터와 평행한, 원점을 지나는 직선상에 위치하고 시각적인 부분에서 직선이 지니는 성질을 선형성이라 한다. 이러한 "직선"의 성질을 참/거짓으로 구분하기 위해 아래와 같은 명제를 사용해 두 조건을 모두 만족하는 함수의 성질로 정의한다.$$ f(x_1 + x_2) = f(x_1) + f(x_2) \\ f(k\cdot x) = k \cdot f(x) $$[가법성(위)과 1차 동차성(아래)]가법성($f(x_1 + x_2) = f(x_1) + f(x_2)$) : 입력값을 더해서 얻은 출력과 각 입력값을 따로 함수에 ..
[게임수학] 3. 삼각함수
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다. ■ 삼각함수벡터의 합과 스칼라배를 통해 물체의 이동을 표현한다면, 삼각함수는 2차원 평면에서의 "회전"을 수학적으로 표현하는 도구이다.직각삼각형에서 한 각을 $(\theta)$라 하면, 아래와 같이 세 변의 비를 정의할 수 있다. 즉, 사잇각 $(\theta)$에 따라 세 변은 일정한 "비율 관계"를 가진다.a = 밑변b = 높이c = 빗변$$ \sin \theta = \frac{b}{c} \\ -------\\ \cos \theta = \frac{a}{c} \\ ------- \\ \tan \theta = \frac{b}{a} $$[삼각함수 공식]이러한 직각삼각형을 데카르트 좌표계에 배치하고, 각 $\theta$의 범위를 실수 전체로 확장하..
[게임수학] 2. 벡터(Vector)
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.■ 데카르트 좌표계 두 실수 집합의 곱집합(R×R)의 원소(x, y)를 2차원 평면의 한 점에 대응시키는 방식을 "데카르트 좌표계"라 한다.이때 첫 번째 성분 x는 수평축(가로축), 두 번째 성분 y는 수직축(세로축)에 대응한다.데카르트 좌표계의 한 원소는 곱집합과 동일하게 순서쌍$(x,y)$로 표현하며 좌표라 부른다.좌표는 데카르트에서 한 점(위치)으로 표현된다. 벡터는 원점에서 시작하는 화살표로 표현되며, "크기(길이)"와 "방향"이라는 두 속성을 가진다. ■ 벡터 공간과 벡터벡터 공간은 실수들을 묶어 만든 집합(점들의 집합)에 더하기와 곱하기 규칙을 정해서 크기와 방향을 다루는 공간이다.벡터 공간의 원소를 벡터라 하며 특정한 수 집합을 지칭..
[게임수학] 1. 수(Number)와 함수(Function)
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.■ 수와 집합가상 세계를 이해하기 위한 첫걸음은 집합(Set)이라는 개념으로 수를 이해하는 것이다. 1. 소박한 집합론(Naive set theory)용도에 따라 수 집합을 정의하여 구분. 집합에 대한 개념을 직관적으로 정의한다.자연수 : 물건을 세거나 순서를 지정하기 위해 사용하는 수 집합.정수 : 자연수와 자연수의 음수 0을 포함하는 수 집합. 2. 공리적 집합론(Axiomatic set theory) 증명할 필요가 없는 기본 명제(참과 거짓을 명확히 판단할 수 있는 기준)인 공리(Axiom)를 기반으로 대상을 구분한다.→ 수가 가지고 있는 연산에 대한 공리를 기반으로 수를 분리. 그렇다면 이 수집합이 가지고 있는 "연산의 성질"은 어떠한 것..
[Unity] 쿼드트리(QuadTree) 공간분할 알고리즘
·
Unity,C#/알고리즘
■ 쿼드트리(QuadTree) 공간분할쿼드트리(QuadTree)는 공간을 효율적으로 관리하기 위한 트리 구조로, 하나의 노드가 4개의 자식 노드를 가지는 자료구조이다.→ 특정 조건(예 : 최소 크기, 포함된 객체 수)에 도달할 때까지 재귀적으로 공간을 4 분할한다. 플레이어(빨간색 박스)가 속한 노드의 객체만 활성화하여 불필요한 연산이 처리되지 않도록 구현하였다. 🛠️ 구현 방식1. 초기 공간 생성분할될 공간(루트 노드)을 하나의 사각형 영역으로 정의한다. 2. 분할 조건 검사본 구현에서는 노드 내부의 객체 수를 기준으로 분할 여부를 결정한다.노드 안의 객체 수가 설정한 최대 허용치보다 많으면 해당 영역을 4 등분하여 자식 노드를 생성한다.더 이상 분할할 필요가 없는 경우 리프 노드로 남긴다. 3. 객..
[Unity, C#] ScriptableObject - 스크립터블 오브젝트
·
Unity,C#/Unity 정보
■ ScriptableObject 스크립터블 오브젝트(Scriptable Object)는 유니티에서 제공하는 Mono와 다른 경량 데이터 컨테이너 클래스이다.말 그대로 스크립팅 가능한 Object, 즉 코드로 정의된 데이터 저장용 객체를 의미한다.스크립터블 오브젝트는 씬에 존재하지 않으며, 데이터를 독립적으로 저장하고 재사용 할 수 있는 “에셋 파일(.asset)”로 저장된 직렬화 가능한 데이터 객체이다.스크립터블 오브젝트는 다음과 같은 상황에서 사용된다.게임 내 설정값 관리.무기, 아이템, 능력치 등 고정된 데이터를 관리할 때.동일한 데이터를 여러 오브젝트가 공유해야 할 때.씬이 변경되어도 데이터가 유지되어야 할 때. ▼ 몬스터에 관련된 데이터 클래스를 만들 때, Monobehaviour와 Script..
[Unity, C#] EditorWindow - 커스텀 에디터 윈도우
·
Unity,C#/Unity 정보
■ EditorWindow - 커스텀 윈도우 CustomEditor를 통해 기존 컴포넌트의 인스펙터를 꾸민다면, Custom Editor Window는 Unity 상단 메뉴에서 열 수 있는 독립적인 창을 만들 수 있다.툴 제작, 데이터 편집 등 전용 유틸리티를 만들 때 유용하다. ■ EditorWindow 생성using UnityEditor;using UnityEngine;public class CustomWindowTest : EditorWindow{ [MenuItem("Tools/Window Test", validate = false, priority = 100)] private static void Init() { var window = GetWindow(); ..
[Unity, C#] Editor - 커스텀 인스펙터
·
Unity,C#/Unity 정보
■ Editor - 커스텀 인스펙터 public class SizeController : MonoBehaviour{ // Do Something...}유니티에서 MonoBehaviour를 상속받는 스크립트는 게임 오브젝트에 부착할 수 있으며, 부착 시 모든 public 필드와 [SerializeField] 변수를 인스펙터에 자동으로 노출한다. 하지만 이러한 기본 기능 외에도, 버튼을 눌러 특정 함수를 실행하거나, 에디터 모드(Edit Mode)에서도 실시간으로 값을 반영하고 조작하고 싶을 때가 있다.이럴 때 CustomEditor를 사용하면 원하는 형태로 인스펙터를 자유롭게 커스터마이징 할 수 있다. 1. Custom Editor 생성public class SizeController : MonoBehav..
[C#] LINQ(Language Integrated Query)
·
Unity,C#/Unity 정보
■ LINQ(Language Integrated Query)LINQ는 Language INtegrated Query의 약어로, C# 언어에 통합된 데이터 질의 기능을 말한다.여기서 “질의(Query)”란 말 그대로 무언가를 묻는 행위를 뜻하며, “데이터 질의”는 데이터에 대해 물어보고 필요한 값을 찾는 과정을 말한다.이러한 질의에는 다음과 같은 요소가 포함된다.From : 어떤 데이터 집합에서 찾을 것인가?Where : 어떤 값의 데이터를 찾을 것인가?Select : 어떤 항목을 추출할 것인가? LINQ는 원래 데이터베이스(SQL)에서 데이터를 조회할 때 사용하던 쿼리 형식에서 영감을 받아 설계된 C# 전용 문법이다.→ SQL처럼 간결한 방식으로 배열, 리스트, 컬렉션 등 다양한 데이터 소스를 간단하고 ..