Vector3

3차원 벡터입니다.

# Properties

[{"index":"float x","0":"벡터의 x축 원소입니다."}]

[{"index":"float y","0":"벡터의 y축 원소입니다."}]

[{"index":"float z","0":"벡터의 z축 원소입니다."}]

[{"index":"Vector3 back (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(0, 0, -1)을 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 down (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(0, -1, 0)을 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 forward (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(0, 0, 1)을 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 left (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(-1, 0, 0)을 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 negativeInfinity (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(-inf, -inf, -inf)를 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 one (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(1, 1, 1)을 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 positiveInfinity (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(inf, inf, inf)를 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 right (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(1, 0, 0)을 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 up (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(0, 1, 0)을 간단히 사용할 수 있습니다."}]

[{"index":"Vector3 zero (Static) (ReadOnly) (HideFromInspector)","0":"Vector3(0, 0, 0)을 간단히 사용할 수 있습니다."}]

# Constructors

[{"index":"Vector3(float x, float y, float z)","0":"지정한 값으로 Vector3을 초기화합니다."}]

# Methods

[{"index":"float Angle(Vector3 b)","0":"두 벡터 사이의 각도를 구합니다. 0부터 180 사이의 값을 반환합니다."}]

[{"index":"Vector3 Clone()","0":"복사본을 생성합니다."}]

[{"index":"Vector3 Cross(Vector3 b)","0":"두 벡터를 외적한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"float Distance(Vector3 b)","0":"두 벡터 사이의 거리를 구합니다."}]

[{"index":"float Dot(Vector3 b)","0":"두 벡터의 내적을 구합니다."}]

[{"index":"Vector3 Lerp(Vector3 b, float t)","0":"두 벡터 사이를 t로 선형 보간한 Vector3 객체를 생성해 반환합니다. t는 0부터 1 사이로 고정됩니다."}]

[{"index":"Vector3 LerpUnclamped(Vector3 b, float t)","0":"두 벡터 사이를 t로 선형 보간한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"float Magnitude()","0":"벡터의 크기를 구합니다."}]

[{"index":"Vector3 Normalize()","0":"방향이 같고 크기가 1인 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 Project(Vector3 b)","0":"벡터를 b에 사영한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 ProjectOnPlane(Vector3 planeNormal)","0":"벡터를 평면에 사영한 Vector3 객체를 생성해 반환합니다. planeNormal은 평면의 법선 벡터입니다."}]

[{"index":"Vector3 Reflect(Vector3 normal)","0":"벡터를 평면에 반사시킨 Vector3 객체를 생성해 반환합니다. normal은 평면의 법선 벡터입니다."}]

[{"index":"float SignedAngle(Vector3 to, Vector3 axis)","0":"두 벡터 사이의 각도를 구합니다. axis를 기준으로 from에 대해 to가 이루는 각이 반시계 방향이면 양수, 시계 방향이면 음수입니다. -180부터 180 사이의 값을 반환합니다."}]

[{"index":"Vector3 Slerp(Vector3 b, float t)","0":"두 벡터 사이를 t로 구면 선형 보간한 Vector3 객체를 생성해 반환합니다. t는 0부터 1 사이로 고정됩니다."}]

[{"index":"Vector3 SlerpUnclamped(Vector3 b, float t)","0":"두 벡터 사이를 t로 구면 선형 보간한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"float SqrMagnitude()","0":"벡터 크기의 제곱을 구합니다."}]

[{"index":"Vector2 ToVector2()","0":"x, y를 원소로 가지는 Vector2 객체를 생성해 반환합니다."}]

[{"index":"float Angle(Vector3 a, Vector3 b) (Static)","0":"두 벡터 사이의 각도를 구합니다. 0부터 180 사이의 값을 반환합니다."}]

[{"index":"Vector3 Cross(Vector3 a, Vector3 b) (Static)","0":"두 벡터를 외적한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"float Distance(Vector3 a, Vector3 b) (Static)","0":"두 벡터 사이의 거리를 구합니다."}]

[{"index":"float Dot(Vector3 a, Vector3 b) (Static)","0":"두 벡터의 내적을 구합니다."}]

[{"index":"Vector3 Lerp(Vector3 a, Vector3 b, float t) (Static)","0":"두 벡터 사이를 t로 선형 보간한 Vector3 객체를 생성해 반환합니다. t는 0부터 1 사이로 고정됩니다."}]

[{"index":"Vector3 LerpUnclamped(Vector3 a, Vector3 b, float t) (Static)","0":"두 벡터 사이를 t로 선형 보간한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"float Magnitude(Vector3 a) (Static)","0":"벡터의 크기를 구합니다."}]

[{"index":"Vector3 Normalize(Vector3 a) (Static)","0":"방향이 같고 크기가 1인 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 Project(Vector3 a, Vector3 b) (Static)","0":"a를 b에 사영한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 ProjectOnPlane(Vector3 vector, Vector3 planeNormal) (Static)","0":"벡터를 평면에 사영한 Vector3 객체를 생성해 반환합니다. planeNormal은 평면의 법선 벡터입니다."}]

[{"index":"Vector3 Reflect(Vector3 vector, Vector3 normal) (Static)","0":"벡터를 평면에 반사시킨 Vector3 객체를 생성해 반환합니다. normal은 평면의 법선 벡터입니다."}]

[{"index":"float SignedAngle(Vector3 from, Vector3 to, Vector3 axis) (Static)","0":"두 벡터 사이의 각도를 구합니다. axis를 기준으로 from에 대해 to가 이루는 각이 반시계 방향이면 양수, 시계 방향이면 음수입니다. -180부터 180 사이의 값을 반환합니다."}]

[{"index":"Vector3 Slerp(Vector3 a, Vector3 b, float t) (Static)","0":"두 벡터 사이를 t로 구면 선형 보간한 Vector3 객체를 생성해 반환합니다. t는 0부터 1 사이로 고정됩니다."}]

[{"index":"Vector3 SlerpUnclamped(Vector3 a, Vector3 b, float t) (Static)","0":"두 벡터 사이를 t로 구면 선형 보간한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"float SqrMagnitude(Vector3 a) (Static)","0":"벡터 크기의 제곱을 구합니다."}]

[{"index":"Vector2 ToVector2(Vector3 a) (Static)","0":"x, y를 원소로 가지는 Vector2 객체를 생성해 반환합니다."}]

# Operators

[{"index":"Vector3 Addition(Vector3 left, Vector3 right) (Static)","0":"두 벡터를 더한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 Division(Vector3 left, float right) (Static)","0":"벡터를 실수로 나눈 Vector3 객체를 생성해 반환합니다."}]

[{"index":"boolean Equality(Vector3 left, Vector3 right) (Static)","0":"두 벡터가 같은지 비교합니다. 같으면 true, 그렇지 않으면 false를 반환합니다."}]

[{"index":"boolean Inequality(Vector3 left, Vector3 right) (Static)","0":"두 벡터가 다른지 비교합니다. 같으면 false, 그렇지 않으면 true를 반환합니다."}]

[{"index":"Vector3 Multiply(float left, Vector3 right) (Static)","0":"벡터를 실수배 한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 Multiply(Vector3 left, float right) (Static)","0":"벡터를 실수배 한 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 Subtraction(Vector3 left, Vector3 right) (Static)","0":"두 벡터를 뺀 Vector3 객체를 생성해 반환합니다."}]

[{"index":"Vector3 UnaryNegation(Vector3 value) (Static)","0":"역벡터를 나타내는 Vector3 객체를 생성해 반환합니다."}]

# Examples

#### Vector의 생성과 레퍼런스 동작 방식

Vector는 일반적인 프로그래밍 언어의 레퍼런스 타입과 같은 동작을 합니다.
    
    
    @Component
    script PositionInitializer extends Component
        @ExecSpace("ServerOnly")
        method void OnBeginPlay()
            local v = Vector3(1.0, 2.0, 3.0)
            
            local position = self.Entity.Transform.Position
            position.x = 10
            position = v
        end
    end
    

위 코드를 OnBeginPlay에 넣고 실행하면 Entity의 x좌표가 10으로 이동되고, (1.0, 2.0, 3.0)으로 이동되지는 않습니다. (1.0, 2.0, 3.0)으로 이동하고 싶다면 아래의 세가지 방법 중 하나를 사용합니다:
    
    
    @Component
    script InitialPositionSetter extends Component
        @ExecSpace("ServerOnly")
        method void OnBeginPlay()
            -- 1.
            local v = Vector3(1.0, 2.0, 3.0)
            self.Entity.Transform.Position = v
            
            -- 2.
            self.Entity.Transform.Position = Vector3(1.0, 2.0, 3.0)
            
            -- 3.
            local position = self.Entity.Transform.Position
            position.x = 1.0
            position.y = 2.0
            position.z = 3.0
        end
    end
    

#### 상수 Vector와 연산

Vector의 기본 단위 Vector인 Vector3.up, Vector3.forward 등을 지원합니다. Vector3의 경우 총 6종류가 있습니다. Vector는 Vector끼리 +, - 연산이 가능하고, Vector와 number의 *, / 연산이 가능합니다.

+= 같은 연산은 Lua에서 지원하지 않습니다.
    
    
    @Component
    script TransformInitializer extends Component
        @ExecSpace("ServerOnly")
        method void OnBeginPlay()
            self.Entity.Transform.Position = self.Entity.Transform.Position + Vector3.up * 10
            self.Entity.Transform.Scale = Vector3.one * 2
        end
    end
    

#### Vector 함수

Vector 연산에서 자주 사용되는 기본 함수들을 제공합니다. Distance, Dot, Magnitude, Normalize 등이 있습니다. 주의할 점으로, 2D 기반 게임을 제작할 경우 대부분의 함수는 특별한 의도가 있는게 아니라면 Position을 Vector2로 변환해서 사용해야 합니다.
    
    
    @Component
    script TwoDDistanceLogger extends Component
        @ExecSpace("ServerOnly")
        method void OnBeginPlay()
            local myPos = self.Entity.Transform.Position
            local otherPos = _EntityService:GetEntityByPath(EntityPath)
            
            local myPosV2 = Vector2(myPos.x, myPos.y)
            local otherPosV2 = Vector2(otherPos.x, otherPos.y)
            
            local distance = Vector2.Distance(myPosV2, otherPosV2)
            log("2D distance", distance)
        end
    end
    

# SeeAlso

  * TransformComponent
  * EntityService