상세 컨텐츠

본문 제목

Vector3.magnitude 벡터 크기, 벡터 정규화

유니티/기능

by MJ_119 2024. 7. 17. 23:34

본문

Vector3.magnitude는 벡터의 길이(크기)를 나타내는 속성입니다. 벡터의 길이는 원점(0,0,0)에서 해당 벡터가 가리키는 점까지의 거리로 정의됩니다. 이는 벡터의 각 성분(x, y, z)의 제곱 합의 제곱근으로 계산됩니다.

 

예시 코드

벡터의 크기를 계산하고, 이를 이용한 다양한 작업을 이해하기 위한 예제 코드를 살펴보겠습니다.

 

예제 1: 벡터의 크기 계산

using UnityEngine;

public class VectorMagnitudeExample : MonoBehaviour
{
    void Start()
    {
        // 벡터 정의
        Vector3 vector = new Vector3(3, 4, 0);

        // 벡터의 크기 계산
        float magnitude = vector.magnitude;

        // 결과 출력
        Debug.Log("Vector: " + vector);
        Debug.Log("Magnitude: " + magnitude);
    }
}

 

위 코드는 (3, 4, 0) 벡터의 크기를 계산합니다. 이 벡터는 3-4-5 삼각형과 같기 때문에, 크기는 5가 됩니다.

예제 2: 벡터 정규화

정규화는 벡터의 방향은 유지하면서 길이를 1로 만드는 작업입니다. 정규화된 벡터는 단위 벡터라고도 합니다.

using UnityEngine;

public class NormalizeVectorExample : MonoBehaviour
{
    void Start()
    {
        // 벡터 정의
        Vector3 vector = new Vector3(3, 4, 0);

        // 벡터 정규화
        Vector3 normalizedVector = vector.normalized;

        // 정규화된 벡터의 크기 계산
        float normalizedMagnitude = normalizedVector.magnitude;

        // 결과 출력
        Debug.Log("Original Vector: " + vector);
        Debug.Log("Normalized Vector: " + normalizedVector);
        Debug.Log("Magnitude of Normalized Vector: " + normalizedMagnitude);
    }
}
 
 

위 코드는 (3, 4, 0) 벡터를 정규화하여 방향은 유지하되 길이를 1로 만듭니다. 정규화된 벡터의 크기는 항상 1입니다.

예제 3: 이동 벡터 정규화 적용

아래 코드는 플레이어가 대각선으로 이동할 때 속도가 너무 빠른 문제를 해결하기 위해 벡터를 정규화하여 일관된 이동 속도를 유지합니다.

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    private Rigidbody rb;
    private float horizontal;
    private float vertical;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        horizontal = Input.GetAxis("Horizontal");
        vertical = Input.GetAxis("Vertical");
    }

    void FixedUpdate()
    {
        Vector3 moveInput = new Vector3(horizontal, 0.0f, vertical);

        // 벡터의 크기를 체크하고 1보다 크면 정규화
        if (moveInput.magnitude > 1)
        {
            moveInput = moveInput.normalized;
        }

        Vector3 newPosition = rb.position + moveInput * moveSpeed * Time.fixedDeltaTime;

        rb.velocity = Vector3.zero;
        rb.MovePosition(newPosition);
    }
}

요약

  • Vector3.magnitude: 벡터의 길이를 계산합니다.
  • 정규화: 벡터의 방향을 유지하면서 크기를 1로 만드는 작업입니다.
  • 활용: 이동 벡터를 정규화하여 일관된 속도로 이동할 수 있도록 하여 대각선 이동 문제를 해결할 수 있습니다.

이 예제들은 Vector3.magnitude와 정규화의 개념을 이해하고, 실용적인 게임 개발 작업에 적용하는 방법을 보여줍니다.

관련글 더보기