3D数学(2022.11.25)

三角函数

Unity中会运用到角度制(Deg)和弧度制(Rad)的转换,弧度制是用圆的弧长来衡量角度的大小,π对应180度。这种转换在Unity中对应有两个方法:

  • 角度制转弧度制:Mathf.Deg2Rad * 要转换的角度
float x = Mathf.Deg2Rad * 180;
Debug.Log(x);

打印结果:3.141593

  • 弧度制转角度制:Mathf.Rad2Deg * 要转换的弧度
float y = Mathf.Rad2Deg * 3.14f;
Debug.Log(y);

打印结果:179.9088

  • 三角函数函数方法:
  • 正弦:Mahf.sin(float f)
  • 余弦:Mathf.cos(float f)
  • 正切:Mathf.tan(float f)或Mthf.tan2(float x, float y)
  • 反三角函数:在以上函数方法方法名前加A,例如Mathf.Asin(float f)

    PS:Unity中三角函数方法在计算时使用的角都是弧度制的,在计算使用时应进行角度和弧度制的转换
Debug.Log(Mathf.Sin(30 * Mathf.Deg2Rad));
Debug.Log(Mathf.Asin(0.5f)* Mathf.Rad2Deg);

坐标系中的Vector3与transform向量

  • 在Unity中Vector3向量是固定的,例如Vector3.forward固定为(0,0,1)
  • transform.forward是不固定的,表示当前选择的物体在世界坐标系中的方向,例如transiform.forward表示选中物体的正前方向在世界坐标系中的方向单位向量
Transform trans = getComponent<Transform>()
trans.Translate(Vector3.forward,space.self) //代码1
trans.Translate(transform.forward, space.world) //代码2

代码1和代码2的效果是相同的

向量

Unity中的向量代表的意义有位置,方向,带有长度的方向。向量的计算有加减,点乘,叉乘

向量a=(x1,y1,z1),向量b=(x2,y2,z2)

  • 向量的加法

    a+b = (x1+x2,y1+y2,z1+z2)
  • 向量的减法

    a-b = (x1-x2,y1-y2,z1-z2)
  • 向量的点乘(可以用来判断两个物体的前后关系)

    Mathf.Dot(a,b) = a·b = abcosθ = (x1x2,y1y2,z1*z2)
  • 向量的叉乘(可以用来判断两个物体的左右关系)

    Mathf.Cross(a,b) = a×b = (y1z2-z1y2,z1x2-x1z2,x1y2-y1x2)

四元数

  • 向量转四元数,根据向量表示的欧拉角生成一个四元数旋转:Quaternion.Euler()
  • 四元数转向量形式的欧拉角:Quaternion.eulerAngles
  • 根据一个轴和围绕轴旋转的角度生成一个四元数旋转:Quaternion.AngleAxis()
  • 根据起始方向和目标方向生成一个四元数旋转:Quaternion.FromToRotation()
  • 从一个旋转插值变换到另一个旋转:Quaternion.Lerp()/Quaternion.SLerp
  • 四元数乘四元数:第一个四元数表示旋转状态,第二个四元数表示一个旋转,得出的四元数表示第一个状态按照第二个旋转旋转后的状态
  • 四元数乘向量:第一个四元数表示一个旋转,第二个向量表示一个方向,得出的向量是第二个向量按照第一个旋转旋转后的方向

在Unity中改变一个物体的旋转状态有两种方式,一种是通过欧拉角来改变,虽然简单便于理解但是会出现万向锁;另一种是通过四元数来改变,虽然不会出现万向锁但是极难理解。

Unity中的3D数学的更多相关文章

  1. 关于Unity中的3D拾取

    3D拾取 3D游戏实际上看到的是2D画面,我们在屏幕上点击,想要找到哪个3D物体,我们实际上是在一个2维平面内做3D拾取. 3D拾取实际上是,当玩家点击屏幕的时候,会从显示屏幕的摄像头发射一条射线,射 ...

  2. Unity3d修炼之路:游戏开发中,3d数学知识的练习【1】(不断更新.......)

    #pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f); public var m_pB : Vector3 ...

  3. 游戏的物理和数学:Unity中的弹道和移动目标提前量计算

    下载地址:https://www.jianguoyun.com/p/DZPN6ocQ2siRBhihnx8 弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺 ...

  4. 3D语音天气球(源码分享)——在Unity中使用Android语音服务

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...

  5. NGUI研究院之在Unity中使用贝塞尔曲线(六)[转]

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...

  6. 在Unity中使用贝塞尔曲线(转)

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...

  7. Unity3D之空间转换学习笔记(三):3D数学

    3D数学基础 向量 向量可以看做具有方向和大小的一条线段. 比如:我们如果用点A减去点B,则可以得到一个向量,该向量的方向为点B面向点A的方向,而大小为两点的距离.这个方法在游戏开发中经常用到,比如我 ...

  8. NGUI研究之在Unity中使用贝塞尔曲线

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天由于工作的原因须要将贝塞尔曲线加在project中.那么我迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的随意角度的曲线,这两个点一 ...

  9. unity中camera摄像头控制详解

    目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...

  10. Unity3D学习笔记(五):坐标系、向量、3D数学

    Unity复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...

随机推荐

  1. Pytorch Dropout函数

    Dropout layers class torch.nn.Dropout(p=0.5, inplace=False) 随机将输入张量中部分元素设置为0.对于每次前向调用,被置0的元素都是随机的. 参 ...

  2. JS学习- Canvas - 遮盖组合

    Compositing 组合 globalCompositeOperation这个属性设定了在画新图形时采用的遮盖策略,其值是一个标识12种遮盖方式的字符串. 值 描述 图示 source-over ...

  3. windows 设置修改本地 hosts 访问 github 快速访问 提高访问 github 速度

    获取IP地址 查询 以下域名IP地址 github.com github.global.ssl.fastly.net assets-cdn.github.com 通过在线网址查询:https://we ...

  4. JAVA根据时间增加1天

    String time = "2021-12-1"; //指定时间 int day = 30;//指定增加天数 SimpleDateFormat sf = new SimpleDa ...

  5. Linux:服务器(CentOS)搭建FTP服务

    Vsftpd(very secure FTP deamon)是众多Linux发行版中默认的FTP服务器.本文以CentOS 8(腾讯云)服务器为例,使用vsftpd搭建Linux云服务器的FTP服务器 ...

  6. STM32F103 的 USART5使用

    STM32F103zet6 的串口5是UART5   不是  USART5

  7. JavaScript基础知识整理(引用类型-Date)

    Date Date类型可以用来保存时间,保存的日期可以精确到1970年1月1日之后或之前的100000000天. 要创建Date类型对象,可以使用new操作符加构造函数. var now = new ...

  8. 2.常用Dos命令

    #盘符切换 D:   C:#查看当前目录下的所有文件 dir#切换目录 cd change directory    #切换盘cd /d D:切换到D盘    #cd..返回上一级# 清理屏幕  CL ...

  9. 汇编debug工具Dosbox使用

    汇编debug工具DOSBOX使用说明 首先新建文件,更改后缀名为asm,然后写入一段汇编程序 之后打开DosBox    输入masm + 文件名(加不加文件名后缀都可以)但如果要加的话,应该加上. ...

  10. PHP Redis - List (列表)

    Redis列表是简单的字符串列表,按照插入顺序排序. 一个列表最多可以包含  232-1 个元素 (4294967295, 每个列表超过40亿个元素) 插入元素在列表头部(lPush,Lpushx) ...