Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

유니티 고급 과정 -2-

서울 디지텍 고등학교에서 강연했던 PT자료 입니다.

  • Be the first to comment

유니티 고급 과정 -2-

  1. 1. 유니티 고급 과정 1. 왜 유니티인가? - 학생들의 이해 수준에 따라 C# 문법 강의를 할 예정 2. 3차원 좌표계 3. 게임에서 쓰이는 수학 - 벡터, 행렬 4. 유니티에서 제공하는 기능들 Kiyoung Moon(문기영)
  2. 2. 왜 유니티인가? 크로스 플랫폼 C#언어의 채용 개발 컨셉 - 콤포넌트 프로그래밍
  3. 3. 크로스 플랫폼 한번만 만들면 최소한의 작업으로 여러 플랫폼에 동시에 출시가 가능하다. 급변하는 모바일 시대에 시간은 ‘금’ 최소한의 작업으로 여러 플랫폼 출시는 대단한 경쟁력 자체 엔진의 경우 플랫폼 별로 하드웨어에 밀접한 부분들은 플랫폼에 맞게 재 작성 해야 함. 예를 들어 Windows에서 렌더링을 위해 DirectX를 사용해야 하 고 Mac에서는 OpenGL을 사용 해야 함. 유니티를 사용하면 이런 내부적인 작업들은 건드리지 않아도 됨. (물론 유니티 에서 제공하지 않는 기능들을 사용하려면 직접 구현하거나 유니티에서 만들 어 줄 때 까지 기다려야 함. 이것이 단점이라면 단점.)
  4. 4. C#의 채용 Java와 비슷하게 만들었으나 자바는 아님. 델파이를 개발한 프로그래머가 마이크로소프트로 옮기면서 만든 언어. (Anders Hejlsberg) 터보 파스칼, 델파이, C# 모두 이 사람이 만들었음.
  5. 5. C# 문법 강의 필요에 따라서 할 예정. 책은 강연자가 저술한 책을 기본으로 하여 강의.
  6. 6. 3차원 좌표계 좌표계란? 좌표계가 왜 필요한가?
  7. 7. 벡터 벡터(Vecctor)는 크기와 방향을 모두 가진 수량을 가리키는 말. 크기(Magnitude) 방향(Direction)
  8. 8. 벡터로 위치를 표기 벡터의 꼬리를 원점으로 만들고 위치를 머리로 표현한다.
  9. 9. 3차원에서 표현되는 벡터의 요소 v = (x,y,z)
  10. 10. 왼손 좌표계, 오른손 좌표계 x축에 네 손가락을 향하고 y축 방향으로 쥐었을 때 엄지 손가락의 방향이 z
  11. 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. 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)
  13. 13. 벡터의 길이, 단위벡터 길이와 단위벡터 벡터 u가 있고 길이는 ||u||로 표기한다.
  14. 14. 3차원 벡터의 길이는?
  15. 15. 단위 벡터(Unit Vector)란? 길이가 1인 벡터 길이가 중요하지 않고 방향만 중요할 때 길이가 있는 벡터를 단위 벡터화 시키면 방향만 남는다. 방법은? 단위 벡터화.
  16. 16. 단위 벡터화
  17. 17. 증명?
  18. 18. 내적(Dot Product) 벡터의 내적은 결과로 스칼라값을 얻는다. 벡터 u, v가 있을 때 u ● v = (uxvx + uyvy + uzvz) 요소들끼리 곱하고 모두 더하는 것이 내적. 내적이 무슨 의미인가?
  19. 19. 내적 값의 의미 u ● v = ||u|| ||v || cos θ 1. u ● v = 0이면 u와 v는 직교한다. 2. u ● v > 0이면 두 벡터 사이의 각도는 90도 보다 작다. 3. u ● v < 0이면 두 벡터 사이의 각도는 90보다 크다.
  20. 20. 벡터의 외적 w = u x v = (UyVz - UzVy, UzVx - UxVz, UxVy - UyVx) 벡터의 외적의 결과는 내적과는 다르게 벡터. 이때 w의 방향은 왼손 좌표계, 오른손 좌표계에 따라서 방향이 달라짐. 그러므로 벡터의 외적에 교환법칙은 성립하지 않는다. u x v != v x u
  21. 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. 22. 행렬 m x n행렬은 m개의 행, n개의 열로 구성된 실수들의 모임이다. 예> 4x4행렬 Mij 로 원소를 지칭할 수 있고 이때 i는 행, j는 열이다.
  23. 23. 행렬의 연산
  24. 24. 행렬 곱셈 행렬 A가 m x n이고 B가 n x p일 때 둘의 곱이 정의된다. 즉 A의 열(n)과 B의 행 (n)이 같아야 곱셈이 가능하다. 결과로 얻는 행렬은 m x p가 된다. 예를 들어 다음과 같은 행렬은 곱을 할 수 없다.
  25. 25. 행렬 곱셈
  26. 26. 행렬 곱셉에 교환법칙은 성립하지 않는 다. AB와 BA는 같지 않다. AB != BA
  27. 27. 행렬의 결합 법칙 행렬 A, B, C가 있을 때 (AB)C = A(BC)
  28. 28. 행렬의 전치 전치(Transpose)는 행렬의 행과 열을 바꾼 것. 따라서 m x n는 n x m으로 바뀐다. 표기는
  29. 29. 행렬의 전치 속성들
  30. 30. 단위 행렬 대각 요소가 모두 1이고 그 외에는 모두 0인 행렬. 단위 행렬은 I로 표기하고 행렬 A가 있을 때 AI = B, IB = B이다. 어떠한 행렬에 I를 곱하면 그 결과는 본래 행렬 그대로를 얻는다.
  31. 31. 행렬식(Determinant) 행렬 A의 행렬식은 detA로 표기한다. 우리가 2x2 행렬식은 외워서 얻는 값. 행렬식이 값이 0이 아닐 때 가역이 존재한다. 즉 행렬 A의 역행렬이 존재함을 의미한다. 역행렬은 이후에 소개한다. 행렬식의 정의
  32. 32. 행렬식을 구하는 방법
  33. 33. 복잡한데 행렬식을 구하는 이유? 보통은 역행렬을 구하기 위해서 사용한다. 중요한 것은 역행렬.
  34. 34. 역행렬(Inverse Matrix) 정방행렬(행과 열이 같은 정사각형)은 역행렬이 존재할 수 있다. n x n행렬 M의 역행렬은 n x n이고 모든 정방행렬에 역행렬이 존재하는 것은 아니다. 행렬식의 값이 0이 아닐 때에 만 역행렬이 존재한다. 또한 역행렬이 존재할 경우 그 역행렬은 고유하다. 행렬 M이 있을 때 M^-1(역행렬)을 곱할 경우 결과는 단위 행렬 I를 얻는다. MM^-1 = I
  35. 35. 지금까지 행렬을 배웠는데 왜 배웠나? 3차원 공간에서 위치와 방향을 가지는 것들(예를 들어 벡터)은 변환(Transform) 을 통해 이동, 회전, 스케일이 가능하다. 유니티는 행렬 관련된 수학 연산들을 제공하고 있다. 가령 스케일 행렬 S는 본 래 다음과 같으나 유니티에서는 간단하게 함수 x를 이용해 이를 구현할 수 있다. Matrix4x4 scaleTM = Matrix4x4.Scale(new Vector3(sx, sy, sz));
  36. 36. 이동, 회전, 스케일 이동, 회전, 스케일만 이용해도 거의 대부분의 게임은 작성할 수 있다. 행렬 모두를 설명하는 것은 낭비. 강연자 보다 더 잘 설명한 책들이 너무 많다.
  37. 37. 프로그래밍은 단순 노동이 아니다. 그랬으면 얼마나 좋았을까? 본인이 아는 만큼. 더 좋은 코드, 더 좋은 프로그램을 만들 수 있다. 아는 것이 힘이다.
  38. 38. 뚝심? 뚝심이 있어야 할 수 있다. 우리가 지금까지 배웠던 기초적인 수학은 게임 프로그래밍의 극히 일부분. 그 외에도 모든 부분에 수학적인 요소가 있고 그것을 알고 있는 사람만이 이해 하고 더 코드를 작성할 수 있다. 만일 다른 사람이 만든 라이브러리가 없을 때 어떻게 해야 할까? 예를 들어 유니티에서 수학 함수, 클래스들을 제공하지 않는다면? 본인이 직접 해결. 프로그래머는 문제를 풀어내는(Solve) 사람이다.

×