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. zabbix监控网络断网情况--初级版

    zabbix初级监控,通过IMCP方式PING即可 添加网络网关IP地址,鉴于zabbix一般报警方式采取发送邮件.钉钉.微信报警需要网络环境支持,于是至少设置zabbix服务器双网通,建议有条件上三 ...

  2. Webservice或WebAPi Post类型传参,类对象格式转换

    有类: public class ImgInfo { public int fs { get; set; } public string FileName { get; set; } public s ...

  3. 【ZYNQ学习】ZYNQ架构介绍

    在上一篇博客中,主要介绍了ZYNQ的基本信息以及如何在vivado上实现自己的设计,但是在实际应用中,掌握ZYNQ的架构是必要的,因此在这篇博客中主要记录一下ZYNQ的架构 本篇博客的主要参考是ZYN ...

  4. 统计包含关键字的 Key 的数量

  5. centos7 部署 DNS 主从

    centos7 部署 DNS 主从 环境 名称 ip地址 cpu 内存 yz-dns-master 10.148.100.81 4c 8G yz-dns-slave 10.148.100.82 4c ...

  6. C++实现双向链表的相关操作代码

    #include<iostream>#include<cstdlib>using namespace std;#define OK 1#define ERROR 0#defin ...

  7. Mac如何卸载软件 Mac如何删除软件

    初次接触Mac苹果电脑的用户可能不知道如何卸载已经装好的应用软件,之前有给大家介绍Mac如何安装软件,现在教大家如何卸载软件,其实非常简单,让我们看看吧: 1.首先我们打开Finder,就是我们Doc ...

  8. HDFS文件块

    知识点补充 HDFS优缺点: 优点 (1)高容错性.节点存放的副本比较多. (2)适合处理大数据. GB.TB.PB级别的数据都可以处理. (3)可以构建在廉价的机器上,通过多副本机制来提高可靠性. ...

  9. laravel 导出

    常规导出xlsx  更多的是导出小数据  需要大数据导出的时候 需要临时更改内存大小  ini_set('memory_limit', '1024M');  不更改内存的情况 可以选择队列导出到服务器 ...

  10. 管理名称空间资源(Kubernetes)

    管理名称空间资源 名称空间(Namespace)是Kubernetes集群级别的资源,用于将集群分隔为多个隔离的逻辑分区以配置给不同的用户.租户.环境或项目使用.例如,可以为development.q ...