3. 크로스 플랫폼
한번만 만들면 최소한의 작업으로 여러 플랫폼에 동시에 출시가 가능하다.
급변하는 모바일 시대에 시간은 ‘금’ 최소한의 작업으로 여러 플랫폼 출시는 대단한 경쟁력
자체 엔진의 경우 플랫폼 별로 하드웨어에 밀접한 부분들은 플랫폼에 맞게 재
작성 해야 함. 예를 들어 Windows에서 렌더링을 위해 DirectX를 사용해야 하
고 Mac에서는 OpenGL을 사용 해야 함.
유니티를 사용하면 이런 내부적인 작업들은 건드리지 않아도 됨. (물론 유니티
에서 제공하지 않는 기능들을 사용하려면 직접 구현하거나 유니티에서 만들
어 줄 때 까지 기다려야 함. 이것이 단점이라면 단점.)
4. C#의 채용
Java와 비슷하게 만들었으나 자바는 아님.
델파이를 개발한 프로그래머가 마이크로소프트로 옮기면서
만든 언어. (Anders Hejlsberg)
터보 파스칼, 델파이, C# 모두 이 사람이 만들었음.
5. C# 문법 강의
필요에 따라서 할 예정. 책은 강연자가 저술한 책을 기본으로 하여 강의.
10. 왼손 좌표계, 오른손 좌표계
x축에 네 손가락을 향하고 y축 방향으로 쥐었을 때 엄지 손가락의 방향이 z
11. 벡터 연산들
1. 상등
벡터 u, v가 있을 때 각각의 요소들이 모두 같을 때 상등이라 한다.
2. 벡터 덧셈
u + v = (ux + vx, uy + vy)
3. 벡터의 스칼라 곱
ku = (kux, kuy)
4. 벡터 뺄셈
u - v = u + (-1 * v) = u + (-v) = (ux - vx, uy - vy)
12. 예제>
u = (1,2,3), v = (1,2,3), w = (3,0,-2), k = 2일 때
1. u + w = (1,2,3) + (3,0,-2) = (4, 2, 1)
2. u = v
3. u - v = u + (-v) = (1,2,3) + (-1, -2, -3) = (0, 0, 0) = 0
4. kw = 2(3,0,-2) = (6, 0, -4)
18. 내적(Dot Product)
벡터의 내적은 결과로 스칼라값을 얻는다.
벡터 u, v가 있을 때 u ● v = (uxvx + uyvy + uzvz)
요소들끼리 곱하고 모두 더하는 것이 내적.
내적이 무슨 의미인가?
19. 내적 값의 의미
u ● v = ||u|| ||v || cos θ
1. u ● v = 0이면 u와 v는 직교한다.
2. u ● v > 0이면 두 벡터 사이의 각도는 90도 보다 작다.
3. u ● v < 0이면 두 벡터 사이의 각도는 90보다 크다.
20. 벡터의 외적
w = u x v = (UyVz - UzVy, UzVx - UxVz, UxVy - UyVx)
벡터의 외적의 결과는 내적과는 다르게 벡터.
이때 w의 방향은 왼손 좌표계, 오른손 좌표계에 따라서 방향이 달라짐.
그러므로 벡터의 외적에 교환법칙은 성립하지 않는다.
u x v != v x u
21. 선형 결합
v = a0v0 + a1v1 + … + an-1vn-1
a는 스칼라, v는 벡터
표준 기저 벡터
e0 = (1,0,...,0)
e1 = (0,1,...,0)
en-1 = (0,0,...,1)
예를 들어 3차원 R^3에서 기저 벡터 e0, e1, e2를 이용하면 모든 벡터 표현 이 가능하다. 그리고 벡터는 다음과 같이
v = a0e0 + a1e1 + a2e2
로 모든 3차원 좌표계에서 벡터 표현이 가능하다. 보통 3차원을 다룬 책에서는 e0, e1, e2를 i, j, k로 표현해서 다음과
같이 모든 벡터 v는
v = xi + yj + zk로 표현한다. 이때 i, j, k는 스칼라 값이 아니라. 벡터이고 선형 결합을 이용해서 표현하고 있다.
22. 행렬
m x n행렬은 m개의 행, n개의 열로 구성된 실수들의 모임이다.
예> 4x4행렬
Mij
로 원소를 지칭할 수 있고
이때 i는 행, j는 열이다.
33. 복잡한데 행렬식을 구하는 이유?
보통은 역행렬을 구하기 위해서 사용한다. 중요한 것은 역행렬.
34. 역행렬(Inverse Matrix)
정방행렬(행과 열이 같은 정사각형)은 역행렬이 존재할 수 있다.
n x n행렬 M의 역행렬은 n x n이고
모든 정방행렬에 역행렬이 존재하는 것은 아니다. 행렬식의 값이 0이 아닐 때에
만 역행렬이 존재한다. 또한 역행렬이 존재할 경우 그 역행렬은 고유하다.
행렬 M이 있을 때 M^-1(역행렬)을 곱할 경우 결과는 단위 행렬 I를 얻는다.
MM^-1 = I
35. 지금까지 행렬을 배웠는데 왜 배웠나?
3차원 공간에서 위치와 방향을 가지는 것들(예를 들어 벡터)은 변환(Transform)
을 통해 이동, 회전, 스케일이 가능하다.
유니티는 행렬 관련된 수학 연산들을 제공하고 있다. 가령 스케일 행렬 S는 본
래
다음과 같으나 유니티에서는 간단하게 함수 x를 이용해 이를 구현할 수 있다.
Matrix4x4 scaleTM = Matrix4x4.Scale(new Vector3(sx, sy, sz));
36. 이동, 회전, 스케일
이동, 회전, 스케일만 이용해도 거의 대부분의 게임은 작성할 수 있다.
행렬 모두를 설명하는 것은 낭비. 강연자 보다 더 잘 설명한 책들이 너무 많다.
37. 프로그래밍은 단순 노동이 아니다.
그랬으면 얼마나 좋았을까?
본인이 아는 만큼. 더 좋은 코드, 더 좋은 프로그램을 만들 수 있다.
아는 것이 힘이다.
38. 뚝심?
뚝심이 있어야 할 수 있다.
우리가 지금까지 배웠던 기초적인 수학은 게임 프로그래밍의 극히 일부분.
그 외에도 모든 부분에 수학적인 요소가 있고 그것을 알고 있는 사람만이 이해
하고 더 코드를 작성할 수 있다.
만일 다른 사람이 만든 라이브러리가 없을 때 어떻게 해야 할까?
예를 들어 유니티에서 수학 함수, 클래스들을 제공하지 않는다면?
본인이 직접 해결. 프로그래머는 문제를 풀어내는(Solve) 사람이다.