EasyCastleUNITY

정규화 벡터 본문

개인 필기

정규화 벡터

EasyCastleT 2023. 8. 18. 10:35

정규화란, 벡터의 크기를 1로 만들어 벡터를 단위벡터로 변환하는 것을 말한다. 

이 정규화를 하는 이유는 방향을 정하기 위한 것이 크다. 

정규화를 하면 해당 벡터는, 방향의 속성만을 가지고 있지만 

정규화를 하지않으면, 방향과 크기의 속성도 가지게 되어 

실질적으로 오브젝트가 이동을 할 때, 속도의 차이를 일으키게 된다. 

흰색은 정규화 X, 빨간색은 정규화, 원은 반지름 1인 원

이동 테스트 

using System;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private float moveSpeed = 2.0f;
    private void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h);
        //Debug.Log(moveDir); 
        DrawArrow.ForDebug(this.transform.position, moveDir, 0f);
        Debug.LogFormat("{0}, {1}", moveDir, moveDir.normalized);
        DrawArrow.ForDebug(this.transform.position, moveDir.normalized, 0f,Color.red);
        //Debug.LogFormat("{0}, {1}", moveDir, new Vector3(h, 0, v));
        this.transform.Translate(moveDir * this.moveSpeed * Time.deltaTime);
        //this.transform.Translate(moveDir.normalized * this.moveSpeed * Time.deltaTime);
    }

    private void OnDrawGizmos()
    {
        GizmosExtensions.DrawWireArc(this.transform.position, this.transform.forward, 360f, 1);
    }
}

정규화 한 moveDir는 대각선으로 이동해도 동일한 속도로 이동하는 반면에

정규화 하지않은 moveDir는 대각선으로 이동하는 경우 속도가 증가하여 이동하게 된다. 

정규화가 되지 않은 이동, 대각선으로 이동하면 속도가 증가
정규화된 이동, 동일한 속도로 움직임