本文为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);
}
}
没有评论:
发表评论