Vector3

Vector란 크기와 방향을 나타내는 데이터 타입이다.

유니티에서는 벡터를 구조체로 선언해두었으며 클래스로 혼용하면 안된다..!

public struct Vector3 : IEquatable<Vector3>, IFormattable
// 실제 내부 선언

사용되는 이유는 3차원 벡터와 좌표를 저장하기 위해 사용된다.

// 요약:
//     X component of the vector.
public float x;
//
// 요약:
//     Y component of the vector.
public float y;
//
// 요약:
//     Z component of the vector.
public float z;

float형인것을 확인할 수 있다.

// 요약:
//     Shorthand for writing Vector3(1, 0, 0).
public static Vector3 right { get; }
//
// 요약:
//     Shorthand for writing Vector3(-1, 0, 0).
public static Vector3 left { get; }
//
// 요약:
//     Shorthand for writing Vector3(0, 1, 0).
public static Vector3 up { get; }
//
// 요약:
//     Shorthand for writing Vector3(0, 0, -1).
public static Vector3 back { get; }
//
// 요약:
//     Shorthand for writing Vector3(0, 0, 1).
public static Vector3 forward { get; }
//
// 요약:
//     Shorthand for writing Vector3(1, 1, 1).
public static Vector3 one { get; }
//
// 요약:
//     Shorthand for writing Vector3(0, 0, 0).
public static Vector3 zero { get; }

기본적인 방향벡터(정규화벡터, 단위벡터)가 정의되어 있다. 사용 추천

transform.position += vector3.forward * 1;

이외에도 더욱 다양한 벡터에 대한 메서드나 프로퍼티가 정의되어 있다.

Vector3 데이터 타입

구조체 형식과 기본 데이터 타입인 float이기 때문에 기본적으로 스택영역에 저장되며 new를 사용해도 메모리할당이 이루어지지 않는다.

실제로 해당 transform의 값을 변경하기 위해서는 transform.position.set 대신에 new Vector3()를 사용하여 값을 넣어준다.

여기서 생각해야 하는 점이 transform으로 가져온 postion(Vector3)의 값은 해당 postion의 레퍼런스가 아닌 복사본이다.

따라서 set을 통해 값을 변경해도 원본이 바뀌지 않는다.

하지만 new(통일성을 위해)통해값을 넣어준다면 set호출과 같이 값이 원본에 복사되어 변경되게 된다.

벡터의 덧셈

float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");

Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h); 

방향을 입력받아서 해당 방향벡터를 만드는 코드이다.

이 때, 대각선이 입력되는 경우에는 크기가 1이 아닌 약 1.4 방향만 가지지 않게 되어 좀 더 빠른 이동이 되는 것을 알 수 있다.

정규화 벡터를 추출하기 위해선 normalized속성을 이용하여 구할 수 있다.

//
// 요약:
//     Returns this vector with a magnitude of 1 (Read Only).
public Vector3 normalized { get; }

실제 Vector3 속성(프로퍼티, get의 속성만 가지기 때문에 읽기 전용)

같은 방법으로 벡터의 크기를 가져올 수 있다.

//
// 요약:
//     Returns the length of this vector (Read Only).
public float magnitude { get; }

Vector3.Lerp / Vector3.Slerp

벡터의 선형보간이라고 부르며 시작과 끝사이의 특정 위치의 값을 추정할 때 사용된다.

유니티에서는 목표값으로 변경될 때 부드럽게 변경하는 로직으로 자주 사용된다.

Vector3, Mathf, Quaternion, Color구조체에서 사용가능하다.

Vector3.Lerp이 선형보간으로 직선의 형태를 가진다면 Vector3.Slerp는 구면선형보간으로 직선의 형태가 아닌 구의 형태를 가지기 때문에 시작점과 끝점은 느리고 중간지점은 빠르게 증가한다.

이러한 특성때문에 회전로직에 많이 사용된다.

Vector3.Lerp(시작, , t);
Vector3.Slerp(시작, , t);

태그: ,

카테고리:

업데이트:

댓글남기기