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가 아닌 구조체이다

오브젝트는 Class라 적혀있는 반면 Vector에 대한 설명은 struct라 기술되어 있다

 

`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

+ Recent posts