Unity 강의 정리 5-1장: C# 프로그래밍 [중급] (1/2) : 벡터

나무에물주기·2023년 8월 17일
1

Unity

목록 보기
10/21
post-thumbnail

인프런에 있는 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리하는 글입니다!

벡터 연산 기초 📐


1. Vector2, Vector3 🧭

Vector2Vector3는 Unity에서 제공하는 벡터 클래스로, 각각 2차원과 3차원 벡터를 나타낸다.

  • Vector2: 2D 공간에서의 벡터로 x와 y 좌표로 구성된다. 2D 게임에서 주로 사용된다.
    예: 2D 캐릭터가 화면 내에서 오른쪽으로 이동하려면 Vector2(1, 0) 벡터를 사용한다.
  • Vector3: 3D 공간에서의 벡터로 x, y, z 좌표로 구성된다. 3D 게임에서 주로 사용되며, 3D 환경 내에서의 위치나 방향, 회전 등을 제어할 수 있다.
    예: 3D 오브젝트를 상, 하, 좌, 우로 회전시키려면 적절한 Vector3 값을 사용한다.
Vector2 vec2D = new Vector2(3, 4); // 2D 벡터 생성
Vector3 vec3D = new Vector3(3, 4, 5); // 3D 벡터 생성

2. 벡터의 크기(= 길이): Magnitude 📏

벡터의 크기는 벡터의 길이를 나타내며, Magnitude 속성을 통해 계산된다. 이는 피타고라스 정리를 통해 계산될 수 있다.

2D벡터의길이::(x2+y2)- 2D 벡터의 길이: : \left(\sqrt{x^2 + y^2}\right)
3D벡터의길이::(x2+y2+z2)- 3D 벡터의 길이: : \left(\sqrt{x^2 + y^2 + z^2}\right)
float length2D = vec2D.magnitude; // 결과: 5, 루트(3^2 + 4^2)
float length3D = vec3D.magnitude; // 결과: 7.07107, 루트(3^2 + 4^2 + 5^2)

Magnitude는 벡터의 길이를 계산하는 연산이므로, 필요에 따라 sqrMagnitude를 사용하여 성능을 향상시킬 수 있다. sqrMagnitude는 제곱근을 계산하지 않으므로 더 빠르다.

float sqrLength2D = vec2D.sqrMagnitude; // 결과: 25, 3^2 + 4^2
float sqrLength3D = vec3D.sqrMagnitude; // 결과: 50, 3^2 + 4^2 + 5^2

3. 벡터의 덧셈 ➕

벡터의 덧셈은 각 성분끼리의 덧셈으로 이루어진다. Unity에서는 + 연산자를 사용해 간단하게 벡터를 더할 수 있다.

  • 2D 벡터 덧셈: (x1 + x2, y1 + y2)
  • 3D 벡터 덧셈: (x1 + x2, y1 + y2, z1 + z2)
Vector2 vecA = new Vector2(3, 4);
Vector2 vecB = new Vector2(5, 6);
Vector2 result2D = vecA + vecB; // 결과: (8, 10)

Vector3 vecC = new Vector3(3, 4, 5);
Vector3 vecD = new Vector3(5, 6, 7);
Vector3 result3D = vecC + vecD; // 결과: (8, 10, 12)

벡터의 덧셈은 물리적인 세계에서 두 힘의 합력을 계산할 때, 또는 두 위치 사이의 이동 경로를 계산할 때 유용하게 사용된다.


4. 벡터의 뺄셈 ➖

벡터의 뺄셈도 각 성분끼리의 뺄셈으로 이루어진다. Unity에서는 - 연산자를 사용해 간단하게 벡터를 뺄 수 있다.

  • 2D 벡터 뺄셈: (x1 - x2, y1 - y2)
  • 3D 벡터 뺄셈: (x1 - x2, y1 - y2, z1 - z2)
Vector2 resultSub2D = vecA - vecB; // 결과: (-2, -2)
Vector3 resultSub3D = vecC - vecD; // 결과: (-2, -2, -2)

벡터의 뺄셈은 한 점에서 다른 점으로의 방향을 나타내기 때문에, 방향을 계산하거나 두 위치 사이의 상대적인 거리를 찾을 때 사용된다.


5. 벡터의 스칼라 곱셈 ✖️

벡터의 스칼라 곱셈은 벡터의 각 성분을 스칼라 값으로 곱하는 연산이다. Unity에서는 * 연산자를 사용해 벡터와 스칼라 값을 곱할 수 있다.

  • 2D 벡터 스칼라 곱셈: (x scalar, y scalar)
  • 3D 벡터 스칼라 곱셈: (x scalar, y scalar, z * scalar)
Vector2 vec2D = new Vector2(3, 4);
Vector2 resultMul2D = vec2D * 2; // 결과: (6, 8)

Vector3 vec3D = new Vector3(3, 4, 5);
Vector3 resultMul3D = vec3D * 3; // 결과: (9, 12, 15)

스칼라 곱셈은 벡터의 길이를 조절하거나 방향을 반대로 하고 싶을 때 사용된다. 예를 들어, 속도 벡터에 시간을 곱하면 이동 거리를 계산할 수 있다.


6. 방향 벡터 (= 단위 벡터) 🧭

단위 벡터는 길이가 1인 벡터로, 방향만을 나타낸다. 벡터를 그 벡터의 크기로 나누면 단위 벡터를 얻을 수 있다. Unity에서는 normalized 속성을 사용해 단위 벡터를 쉽게 얻을 수 있다.

2D단위벡터:(xx2+y2,yx2+y2)- 2D 단위 벡터: \left(\frac{x}{\sqrt{x^2 + y^2}}, \frac{y}{\sqrt{x^2 + y^2}}\right)
3D단위벡터:?(xx2+y2+z2,yx2+y2+z2,zx2+y2+z2)?- 3D 단위 벡터: ?\left(\frac{x}{\sqrt{x^2 + y^2 + z^2}}, \frac{y}{\sqrt{x^2 + y^2 + z^2}}, \frac{z}{\sqrt{x^2 + y^2 + z^2}}\right)?
Vector2 normalizedVec2D = vec2D.normalized; // 결과: (0.6, 0.8)
Vector3 normalizedVec3D = vec3D.normalized; // 결과: (0.42426, 0.56569, 0.70711)

단위 벡터는 벡터의 방향만을 고려할 때 사용된다. 예를 들어, 어떤 방향으로 일정한 속도로 이동하고 싶을 때 단위 벡터를 사용하고 그 방향으로의 속도를 스칼라 곱셈으로 조절할 수 있다.

profile
개인 공부를 정리함니다

0개의 댓글