• Unity常用的3D数学知识


    一.概述:

      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实现的拓展方法

  • 相关阅读:
    Visual Studio 2010使用Visual Assist X的方法
    SQL Server 2000 评估版 升级到 SQL Server 2000 零售版
    双网卡多网络单主机同时访问
    开发即过程!立此纪念一个IT新名词的诞生
    delphi dxBarManager1 目录遍历 转为RzCheckTree2树
    5320 软件集合
    delphi tree 从一个表复制到另一个表
    DELPHI 排课系统课表
    长沙金思维 出现在GOOGLE的 金思维 相关搜索里啦!!
    如何在DBGrid的每一行前加一个单选框?
  • 原文地址:https://www.cnblogs.com/movin2333/p/14952384.html
Copyright © 2020-2023  润新知