网页浏览总次数

星期一, 三月 04, 2024

Unity常用API方法和类(带代码)-4(Vector2)

 本文为Vector2 的API具体实现,Vector3使用方法大致相同。


Vector2

用于表示2D向量和点

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class No7_Vector2 : MonoBehaviour

{

    public GameObject girl;

    public GameObject target;

    public float percent;

    public float lerpSpeed = 0.01f;

    Vector2 smoothDampCurrentV = new Vector2(1, 0);

 

    void Start()

    {

        //静态变量

        Debug.Log(Vector2.up);//世界坐标系  y轴正方向

        Debug.Log(Vector2.right);//x轴正方向

        Debug.Log(Vector2.one);//(1,1)

        Debug.Log(Vector2.zero);//(0,0)

        //构造函数

        Vector2 v2 = new Vector2(1, 2);

        //成员变量

        Debug.Log(v2.magnitude);//向量的模长

        Debug.Log(v2.sqrMagnitude);//向量模长的平方

        Debug.Log(v2.normalized);//单位化向量

        Debug.Log(v2.x);//获取x值

        Debug.Log(v2[0]);//索引器形式访问 x值 v2[1]是y的值

        Debug.Log(v2.Equals(new Vector2(1, 1)));//比较两个向量是否相等 返回bool

        v2.Normalize();//v2向量被单位化

        v2.Set(10, 10);//v2向量 设置(x,y)值

        transform.position = v2;//设置positon ,内部转换了,v3的z数据为0

        v2 = new Vector2(5, 5);//给Vector2 赋值要 x y一起赋值

        v2 = new Vector2(5, v2.y);//只修改x 不修改y

        //静态函数

        Vector2 va = new Vector2(1, 0);

        Vector2 vb = new Vector2(0, 1);

        Debug.Log(Vector2.Angle(va,vb));//计算向量无符号夹角(正的,较小的)

        Debug.Log(Vector2.Distance(va, vb));//两点之间距离

        Debug.Log(Vector2.Dot(va, vb));//两向量点积

        Debug.Log(Vector2.Max(va, vb));//向量va和vb在各个方向上取最大再组合成的向量

        Debug.Log(Vector2.Min(va, vb));//向量va和vb在各个方向上取最小再组合成的向量

        Debug.Log(Vector2.Lerp(va, vb, 0.5f));//插值  newV = a+(b-a)*t (t在0-1之间)

        Debug.Log(Vector2.LerpUnclamped(va, vb, -1));//插值  newV = a+(b-a)*t (t无限制)

        float maxDistance = 0.5f;

        Vector2.MoveTowards(va, vb, maxDistance);//va移向vb 不超过maxDistance

        Debug.Log(Vector2.SignedAngle(va, vb));//计算向量有符号夹角 度为单位 逆时针为正

        Debug.Log(Vector2.Scale(va, vb));//两个向量各个分量分别相乘后组成一个新向量

        Vector2 currentV = new Vector2(1, 0);

        Debug.Log(Vector2.SmoothDamp(va, vb, ref currentV, 0.1f));//平滑阻尼

        //运算符 + - * / 向量四则运算就是 向量分量分别加减乘除

 

    }

 

    void Update()

    {

        //Lerp移动 逐渐变慢

        //girl.transform.position = Vector2.Lerp(girl.transform.position, target.transform.position, 0.01f);

        //Lerp匀速移动 移速快 保证每次插值距离相等

        //percent += 1 * lerpSpeed * Time.deltaTime;

        //girl.transform.position = Vector2.Lerp(girl.transform.position, target.transform.position,percent);

        //MoveTowards匀速移动  移速慢(maxDistance可以适当增大)

        //girl.transform.position = Vector2.MoveTowards(girl.transform.position, target.transform.position, 0.01f);

        //平滑阻尼移动

        girl.transform.position = Vector2.SmoothDamp(girl.transform.position, target.transform.position, ref smoothDampCurrentV, 1.0f);

    }

}


没有评论:

发表评论