07
22

Vector3.Distance 함수

public static float Distance(Vector3 a, Vector3 b);

Distance 함수는 두 점 사이의 거리를 계산하는 함수다.
주어진 두 개의 Vector3 변수 a와 b 사이의 거리를 반환한다.
Vector3 playerPosition = new Vector3(0f, 0f, 0f);
Vector3 enemyPosition = new Vector3(3f, 0f, 4f);

float distance = Vector3.Distance(playerPosition, enemyPosition);
Debug.Log("Player와 Enemy 사이의 거리: " + distance);

Vector3.Normalize 함수

public void Normalize();

Normalize 함수는 Vector3 변수의 크기를 1로 정규화(normalize)한다.
이를 통해 방향 벡터를 얻을 수 있다.
Vector3 direction = new Vector3(2f, 0f, 2f);
direction.Normalize();
Debug.Log("정규화된 방향 벡터: " + direction);

정규화란?

벡터를 정규화(normalize)한다는 것은 간단히 말하면 그 크기를 1로 조정하는 것을 의미한다.
정규화는 벡터의 길이를 조정하여 방향 정보를 유지한 채로 크기를 표준화하는 작업이다.

일상 생활에서도 정규화란 말이 사용되는데,
예를 들어 옷이나 신발의 사이즈를 표준화한다는 것과 비슷한 개념이다.
옷이나 신발은 사람들의 다양한 체형과 발 크기에 맞추어 다양한 사이즈가 제공되는데,
이러한 다양성을 표준화하여 일정한 기준에 맞게 조정하는 것을 의미한다.

벡터의 경우에도 크기가 다양할 수 있지만, 때로는 벡터의 방향 정보만 필요한 경우가 있다.
이때 정규화를 통해 벡터의 방향을 유지하면서 크기를 1로 표준화할 수 있다.
이는 벡터의 방향에 집중할 수 있고, 크기에 대한 고려 없이 방향을 사용할 수 있게 해준다.

 

 

vector3 값에 .normalized 를 적용한 결과값과 Vector3.Normalize 함수로 반환한 값의 차이점은?
.Normalize() 메서드는 호출한 벡터 자체를 정규화하고, 크기를 반환한다.

.normalized 프로퍼티는 호출한 벡터를 변경하지 않고 정규화된 새로운 벡터를 반환한다.

Vector3.Cross 함수

public static Vector3 Cross(Vector3 lhs, Vector3 rhs);

Cross 함수는 두 개의 Vector3 변수 lhs와 rhs의 외적(크로스 프로덕트)을 계산한다.
외적은 두 벡터에 수직인 새로운 벡터를 반환한다.
Vector3 vectorA = new Vector3(1f, 0f, 0f);
Vector3 vectorB = new Vector3(0f, 1f, 0f);

Vector3 crossProduct = Vector3.Cross(vectorA, vectorB);
Debug.Log("두 벡터의 외적: " + crossProduct);

Vector3.Dots 함수

public static float Dot(Vector3 lhs, Vector3 rhs);

Dot 함수는 두 개의 Vector3 변수 lhs와 rhs의 내적(닷 프로덕트)을 계산한다.
내적은 두 벡터가 얼마나 비슷한 방향을 가지고 있는지를 나타낸다.
Vector3 vectorC = new Vector3(1f, 2f, 3f);
Vector3 vectorD = new Vector3(4f, 5f, 6f);

float dotProduct = Vector3.Dot(vectorC, vectorD);
Debug.Log("두 벡터의 내적: " + dotProduct);

Vector3.RotateTowards 함수

public static Vector3 RotateTowards(Vector3 current, Vector3 target, float maxRadiansDelta, float maxMagnitudeDelta);

RotateTowards 함수는 현재 벡터(current)를 목표 벡터(target)로 회전시킨다.
maxRadiansDelta와 maxMagnitudeDelta를 사용하여 회전 속도와 최대 거리를 제한할 수 있다.
Vector3 currentDirection = new Vector3(1f, 0f, 0f);
Vector3 targetDirection = new Vector3(0f, 1f, 0f);
float maxRadiansDelta = 0.1f;
float maxMagnitudeDelta = 0.1f;

Vector3 rotatedDirection = Vector3.RotateTowards(currentDirection, targetDirection, maxRadiansDelta, maxMagnitudeDelta);
Debug.Log("회전된 방향: " + rotatedDirection);

Vector3.Project 함수

public static Vector3 Project(Vector3 vector, Vector3 onNormal);

Project 함수는 주어진 벡터(vector)를 다른 벡터(onNormal)에 사영(Projection, 주어진 벡터를 다른 벡터의 방향으로 투영하는 것)시킨다. 이를 통해 벡터를 특정 방향에 투영할 수 있다.
실제 게임 개발에서는 물체의 움직임이나 충돌 판정 등에 사용될 수 있다.
예제 코드: 플레이어가 공을 던지는데, 공은 플레이어가 바라보는 방향으로 날아가야 하는 상황
using UnityEngine;

public class BallThrow : MonoBehaviour
{
    public float throwForce = 500f;
    public Transform playerCamera;

    void Update()
    {
        // 플레이어가 마우스를 클릭하면 공을 던진다.
        if (Input.GetMouseButtonDown(0))
        {
            ThrowBall();
        }
    }

    void ThrowBall()
    {
        // 플레이어가 바라보는 방향을 구한다.
        Vector3 playerLookDirection = playerCamera.forward;

        // 플레이어가 바라보는 방향으로 공을 던진다.
        Rigidbody ballRigidbody = GetComponent<Rigidbody>();
        ballRigidbody.AddForce(Vector3.Project(playerLookDirection, Vector3.up) * throwForce); 
        // Vector3.up으로 투영한 이유는 플레이어가 높이를 바라보는 방향으로만 공이 날아가도록 설정하기 위함
    }
}
COMMENT