Unity常用的3D数学知识

2021/6/29 23:53:31

本文主要是介绍Unity常用的3D数学知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一.概述:

  Unity中常用的3D数学公式大部分是初高中的数学知识,封装在Mathf\Vector2\Vector3\Vector4\Quotinion等类中,可以到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中提供了Vector2\Vector3\Vector4对应相应空间中的二维向量\三维向量\四维向量,我们着重介绍常用的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实现的拓展方法

 



这篇关于Unity常用的3D数学知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程