Untiy基础知识:Mathf类 、向量

Mathf类

求绝对值:ABS() 、求最值MAX ()MIN()、开平方: Sqrt()

四舍五入:Round()正常、Ceil()取出来的比给的大、Floor()取出来的比给的小、

三角函数: Sin(),Cos(),Tan()、幂次方与指数:Log()、Log10()Pow() 、

Lerp()、SmoothDamp ()、MoveTowards()、PingPong ()等

示例:

print(Mathf.Infinity); //正无穷大

print(Mathf.NegativeInfinity); //负无穷大

print("1角度等于多少弧度" + Mathf.Deg2Rad);

//30度对应的弧度值就是30*Mathf.Deg2Rad

print("sin30度怎么写" + Mathf.Sin(Mathf.Deg2Rad * 30));

print("cos30度怎么写" + Mathf.Cos(Mathf.Deg2Rad * 60));

向量

向量+向量就是四边形的对角线,

向量1-向量2=指向向量1的向量,点+向量得到点,点+点=没有

构建一个三维向量:

两个参数向量的构造方法:

Vector3 v1 = new Vector(1,2,)等于Vector3 v1 = new Vector(1,2,0)z默认是0

三个参数的构造方法:

Vector3 v1 = new Vector(1,2,3)

无参数的构造方法:

Vector3 v1 = new Vector()  

V1.x = 1  v1.y = 1这样赋值

求向量的长度:

float v2Value = Vector3.Magnitude(v2); (向量求模)

向量的标准化:原向量/向量的模长

两个向量的点乘: Dot()      结果是一个浮点数float类型

两个向量长度相乘,再乘以两个向量夹角的余弦值。

float v1 = Vector3.Dot(transform.forward,(Cube.position - transform.position));

得出的数如果是正数,证明物体在Cube的前方,反之后方,(z轴

注:判断敌人是在面前还是身后,和你的角度是什么,一个大角一个小角

v2是把点乘求出的值标准化(normalized) ,出的值是0-1之间

float v2 = Vector3.Dot(transform.forward,

(Cube.position-transform.position).normalied);

然后弧度转角度 float cosAngle = Mathf.Acos(v2) * Mathf.Rad2Deg;更精确的方法

两个向量间的夹角: Angle( )     夹角是float类型

Vector3.Angle(transform.forward,(Cube.position - transform.position));

叉乘Cross()

求两个向量的叉乘: Cross( )

结果是一个Vector3,两个向量长度相乘,再乘以两个向量夹角的正弦值。

Vector3 vv = Vector3.Cross(transform.forward,Cube. position-transform. position);

求得的值-正值:顺时针转动       负值:逆时针转动  

注:判断敌人怎么转过来面对你

运算过程:

V1( 10,20,3 ),V2( 20,2, 10 )

第1步:求V1和v2向量的长度,v1Length, v2Length

第2步:两个向量长度相乘,存到mulLength中

第3步:求两个向量的夹角值,存到angleValue中

第4步:夹角求了之后,再求夹角的正弦值sinValue中

第5步:第2步的结果和第4步的结果相乘

Lerp():获取一个指定范围的线性值

Vector.Lerp(a,b,t)  返回一个新向量  实现平缓移动或者相机跟随

t=0 a就是返回的新向量 ,t=1 b就是返回的新向量,t=0.5时,取他俩中间,还可以=0.1234566

简单的朝向移动:

 

猜你喜欢

转载自blog.csdn.net/xiaobaihao0311/article/details/122303310
今日推荐