Vector2.normalized的作用

147 阅读2分钟

一、前言

在做2D项目小游戏的时候,发现我们获取水平和垂直虚拟轴的值,并且在使用Vector2的时候会使用到normalized,这个normalized作用是什么呢,在这里我们进行简单的总结。

二、作用

normalized的作用就是将统一水平和垂直移动的速度,如果不使用这个方法造成的后果可能就是当我们按下右键和下键斜着移动的话,往往这个速度会比水平或垂直移动的速度更快,

比如:

按下键盘移动时,获得的是一个单位向量1。

向右移动时,x轴上,点(1,0)就是给予的值。这时向量和距离相等,都是1。因为距离就是从原点(0, 0)出发到指定点(1, 0)的直线距离。

所以,如果同时按下右和下,(1, 1)就是目标位置,距离即为根号2

image.png

这就是为什么当按下右和下,向右下角移动时,速度会比水平或垂直移动要快的原因。

更简单就是说它就是将距离归1,将根号2变为1,让它保持与水平和垂直的移动距离相等。

三、小结

Vector2().normalized() ,简单的说就是将向量的长度变为1,让距离保持一致,以免在对角线上移动时比水平或垂直移动快。

四、在项目中的使用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    private Rigidbody2D rig;
    private float inputX;
    private float inputY;
    private Vector2 movementValue;
    public float speed;
    private void Awake()
    {
        rig = GetComponent<Rigidbody2D>();//获取刚体组件
    }
    void Update()
    {
        getMoveValue();
    }
    private void FixedUpdate()
    {
        move();
    }
    //获取x,y的偏移量变化值  
    private void getMoveValue()
    {
        inputX = Input.GetAxisRaw("Horizontal");
        inputY = Input.GetAxisRaw("Vertical");
        movementValue = new Vector2(inputX,inputY); 
        movementValue = movementValue.normalized; 
        //这里使用normalized作用就是可以将movementValue的值保持水平和垂直的移动距离是一样的,
        //如果不加这个的话,你同时按下右下的距离是根号2,距离比水平和垂直的移动距离是不相等的。
    }
    //实现人物的移动
    private void move()
    {
        //通过刚体的方法来移动人物
        rig.MovePosition(rig.position+movementValue*Time.deltaTime*speed);
    }
}

五、效果

向量化.gif