一.概述:
Unity中常用的3D数学公式大部分是初高中的数学知识,封装在MathfVector2Vector3Vector4Quotinion等类中,可以到Unity中查看相应的API或者查看Unity源码.对于数学知识,我将粘贴部分Unity源码,源码来自于Github上Unity开源代码,地址:Unity-Technologies/UnityCsReference: Unity C# reference source code. (github.com),源码版本2019.4.0.
二.Mathf类中的相关方法:
Mathf是Unity提供的一个数学封装类,相比于C#中封装的Math类,Mathf增加了一些更适用于游戏开发的数学公式.Mathf是一个静态的结构体,其中的方法常量等都是静态的,使用时用方法名直接调用即可.
1.三角函数和绝对值平方根等的相关方法,本质上是调用了C#中Math类的三角函数方法,作了进一步封装
2.最小值最大值等相关重载,实现不难
3.其他对C#的Math类的方法封装及一些常量:PI极小值等
注意:在168行到172行的两个方法提供了角度制的角度和弧度制的角度的相互转换方法,这是Mathf自行封装的,157行的sign函数也是Mathf类自行封装,其返回值为-1或1.
4.夹紧函数Clamp:这个函数的意思相信看到源码不难理解
5.插值运算函数slerp:这个函数用到了Clamp01函数,源码中也有函数的实现公式,可以自行分析公式
6.MoveTowards函数:从源码中可以看到,这个函数使用了信号函数sign使得current的值一直向target变化,每次运行变化maxDelta,当最后一次current和target的距离小于maxDelta时current直接变为target.MoveTowardsAngle函数用于处理角度的变化,其中涉及到的相关函数公式也在源码中,角度的移动相对较复杂,可以带入数据看看运算的过程,如取current为340,target为30,maxDelta为5,则Repeat函数的处理结果为50,返回后经过DeltaAngle处理后的结果也是50,最后MoveTowardsAngle函数中248行运行后target会变为390,正是30加上360的结果,保证了角度的变化方向的正确,可以自行带入更多数据验证这个函数的运行.
7.PingPong函数:这个函数返回值在给定值t向右length范围内震荡.
8.其他函数读者可自行查看.此外Unity源码中的大多数类和结构体都是使用多个partial拼成的,在另一部分partial中还提供了一些外部实现的拓展方法.
三.Vector3结构体:对于向量的运算,Unity中提供了Vector2Vector3Vector4对应相应空间中的二维向量三维向量四维向量,我们着重介绍常用的Vector3结构体,如果对于向量运算不熟练对这几个结构体的方法就难以理解.
1.核心字段:三个坐标
2.极小值
3.插值运算:看源码中的公式不难理解,无非是对t进行Clamp01处理后再用于对三个坐标都进行线性插值,同时也提供了t不进行Clamp01检验的线性插值.
4.MoveTowards:Mathf中MoveTowards函数的复杂版,对三个坐标都进行运算
5.SmoothDamp:平滑改变向量值
6.构造函数索引器等
7.set函数缩放函数Scale叉乘函数Cross:注意,Scale函数可以传入一个Vector3结构体使三个坐标各自按照指定比例缩放
8.允许Vector3作为Hash表中key的一些重写方法
9.用于光线等反射计算的Reflect函数:
10.求向量的单位向量:
11.向量的投影
12.求向量夹角
13.求向量终点距离(起点为同一点时)
14.求向量模长相关:
15.向量间的最值
16.各个方向向量以及将向量的坐标全部取正或取负
17.运算符重载
18.其他方法:在这个结构体中还有一些过时的内容如fwd静态属性等,就不再赘述了,此外Vector3结构体也是分为两部分的,另一部分中主要也是一些extern实现的拓展方法