https://docs.unity3d.com/kr/current/Manual/VectorCookbook.html
https://docs.unity3d.com/kr/530/ScriptReference/Vector3.html
UnityEngine.Vector3 - Unity 스크립팅 API
Representation of 3D vectors and points.
docs.unity3d.com
중요 클래스 - Vector - Unity 매뉴얼
벡터는 방향과 크기를 설명할 수 있는 기본적인 수학적 개념입니다. 게임과 앱에서 벡터는 캐릭터의 포지션, 오브젝트의 이동 속도 또는 두 오브젝트 간 거리와 같은 기본적인 프로퍼티를 설명
docs.unity3d.com
3D 벡터와 점의 표현.
이 구조는 유니티 전체에서 3D 위치와 방향을 전달하는 데 사용됩니다. 그것은 또한 일반적인 벡터 작업을 수행하기 위한 기능을 포함한다.
아래에 나열된 기능 외에도, 다른 클래스도 벡터와 포인트를 조작하는 데 사용할 수 있습니다. 예를 들어 쿼터니언과 Matrix4x4 클래스는 벡터와 점을 회전하거나 변환하는 데 유용합니다.
C# 에서의 Vector3는 Class가 아닌 구조체이다
`Vector3`는 Unity의 `UnityEngine` 네임스페이스에 속한 구조체(struct)이다. 이 구조체는 다음과 같이 정의되어 있다
namespace UnityEngine {
public struct Vector3 {
public float x;
public float y;
public float z;
// Constructors, methods, and other members are also part of the Vector3 struct.
}
}
Vector3 구조체는 세 개의 float 형을 가지는 `x`, `y`, `z`를 가지며, 3D 벡터의 속성을 나타낸다.
이러한 구조체는 Value Type으로 new를 사용해도 힙 영역에 할당되지 않고 메모리의 스택 영역에 할당되기 때문에 참조가 아닌 직접적인 값으로 복사되는데 이는 메모리 관리 측면에서 유리하다고 되어있다.
힙에 할당되지 않는데 왜 new를 사용하는 거지…? 라는 의문에 답이 밑 링크 블로그에 적혀 있었다.
또한 Vector3에 new를 사용한다고 가비지가 생기지 않는다고도 적혀있다.
new로 할당한다고 하더라도 구조체는 여전히 스택에 생성되는 값 타입이다. C#이 이 문법을 지원하는 이유는 통일성과 생성자 호출을 위해서이다.
출처: https://3dmpengines.tistory.com/1566 [3DMP:티스토리]
Vector3에는 많은 함수들이 포함되어있다.
일부 에셋들의 스크립트를 훑어본 결과 대부분의 함수들이 사용되고 있었기에 어떠한 기능의 함수들이 존재하는지 정도는 알고 있는 것이 좋을 것 같다.
Angle(from, to) | from과 to 벡터 간의 각도 계산 |
ClampMagnitude(vector, maxLength) | 벡터의 크기를 최대 길이 maxLength로 제한한 복사본 반환 |
Cross(lhs, rhs) | lhs와 rhs 벡터의 외적 계산 |
Distance(a, b) | 두 벡터 a와 b 간의 거리 반환 |
Dot(lhs, rhs) | lhs와 rhs 벡터의 내적 계산 |
Lerp(from, to, t) | from에서 to로 선형 보간, 보간 계수는 t |
LerpUnclamped(from, to, t) | from에서 to로 제한 없는 선형 보간, 보간 계수는 t |
Max(lhs, rhs) | lhs와 rhs 벡터의 각 요소 중 큰 값으로 이루어진 벡터 반환 |
Min(lhs, rhs) | lhs와 rhs 벡터의 각 요소 중 작은 값으로 이루어진 벡터 반환 |
MoveTowards(current, target, maxDistanceDelta) | 현재 위치 current에서 목표 위치 target로 이동, 최대 이동 거리 제한은 maxDistanceDelta |
Normalize(vector) | 대상 벡터 vector의 크기를 1로 만듦 |
OrthoNormalize(normalized, tangent) | 벡터를 정규화하고 서로 수직으로 만듦: 정규화된 벡터 normalized, 수직 벡터 tangent |
Project(vector, onNormal) | 대상 벡터 vector를 다른 벡터 onNormal에 투영 |
ProjectOnPlane(vector, planeNormal) | 대상 벡터 vector를 평면 법선 벡터 planeNormal에 투영 |
Reflect(vector, planeNormal) | 대상 벡터 vector를 평면 법선 벡터 planeNormal을 기준으로 반사 |
RotateTowards(current, target, maxRadiansDelta, maxMagnitudeDelta) | 현재 벡터 current를 목표 벡터 target로 회전, 최대 각도 변화량 제한은 maxRadiansDelta, 최대 크기 변화량 제한은 maxMagnitudeDelta |
Scale(lhs, rhs) | 두 벡터 lhs와 rhs를 각 성분별로 곱함 |
SignedAngle(from, to, axis) | 시작 벡터 from과 대상 벡터 to 간의 부호 있는 각도 계산, 축 벡터는 axis |
Slerp(from, to, t) | 두 벡터 from과 to 사이를 구면 선형 보간, 보간 계수는 t |
SlerpUnclamped(from, to, t) | 두 벡터 from과 to 사이를 제한 없는 구면 선형 보간, 보간 계수는 t |
SmoothDamp(current, target, currentVelocity, smoothTime, maxSpeed, deltaTime) | 현재 벡터 current를 목표 벡터 target로 부드럽게 이동, 현재 속도는 currentVelocity, 부드러운 이동에 걸리는 시간은 smoothTime, 최대 속도는 maxSpeed, 프레임 간격은 deltaTime |
'Unity' 카테고리의 다른 글
[Unity #] Rigidbody? Collider? (1) | 2024.01.23 |
---|---|
[Unity] SerializeField ? 직렬화 ? (0) | 2024.01.22 |
2024-01-10 (0) | 2024.01.10 |
2024_01_08 (0) | 2024.01.08 |
2024-01-04// 옵셔널 체이닝, Rect Transform, Bounds (0) | 2024.01.04 |