Unity中的3D数学
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数学的更多相关文章
- 关于Unity中的3D拾取
3D拾取 3D游戏实际上看到的是2D画面,我们在屏幕上点击,想要找到哪个3D物体,我们实际上是在一个2维平面内做3D拾取. 3D拾取实际上是,当玩家点击屏幕的时候,会从显示屏幕的摄像头发射一条射线,射 ...
- Unity3d修炼之路:游戏开发中,3d数学知识的练习【1】(不断更新.......)
#pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f); public var m_pB : Vector3 ...
- 游戏的物理和数学:Unity中的弹道和移动目标提前量计算
下载地址:https://www.jianguoyun.com/p/DZPN6ocQ2siRBhihnx8 弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺 ...
- 3D语音天气球(源码分享)——在Unity中使用Android语音服务
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
- NGUI研究院之在Unity中使用贝塞尔曲线(六)[转]
鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...
- 在Unity中使用贝塞尔曲线(转)
鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...
- Unity3D之空间转换学习笔记(三):3D数学
3D数学基础 向量 向量可以看做具有方向和大小的一条线段. 比如:我们如果用点A减去点B,则可以得到一个向量,该向量的方向为点B面向点A的方向,而大小为两点的距离.这个方法在游戏开发中经常用到,比如我 ...
- NGUI研究之在Unity中使用贝塞尔曲线
鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天由于工作的原因须要将贝塞尔曲线加在project中.那么我迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的随意角度的曲线,这两个点一 ...
- unity中camera摄像头控制详解
目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...
- Unity3D学习笔记(五):坐标系、向量、3D数学
Unity复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...
随机推荐
- Vue项目打包报错 error TS6504
此处提醒:项目是vite还是vue/cli,打包有区别 打包报错问题: 原因: package.json中,build配置vue-tsc的问题,把对应的命令给删掉: . 语法检查问题: 要么<s ...
- C#如何将光标定位到文本框末尾(最后一位)
代码如下:private void Movetoend(){//让文本框获取焦点this.TextBox1.Focus();//设置光标的位置到文本尾this.TextBox1.Select(this ...
- 理解函数调用_使用严格模式边使用arguments别名
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 整数中出现1的次数(从1到n整数中1出现的次数)
offer_31 概要:整数中出现1的次数(从1到n整数中1出现的次数) 题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有 ...
- mac新仙剑奇侠传 2018
新仙剑奇侠传 201803重制 下载,挂载后,拖动app到applications应用程序 文件夹即可. https://590m.com/f/28636472-500476381-5c8846 (访 ...
- golang 解决 socket: too many open files, 以及 too many open files
同事写的一段代,码业务场景:需要多次GET请求一个三方服务的http 接口,获取数据后写入文件.发现有部分文件没有写入.查看日志出现了报错"socket: too many open fil ...
- 移动端唤起QQ聊天 (ios android 包含微信、qq内置浏览器)
var u = navigator.userAgent; var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); if(isiOS){ if(u ...
- linux 系统⽇常管理--运维必备
[监控系统的状态] 1. w 查看当前系统的负载 相信所有的linux管理员最常⽤的命令就是这个'w' 了,该命令显⽰的信息还是蛮丰富 的.第⼀⾏从左⾯开始显⽰的信息依次为:时间,系统运⾏时间,登录⽤ ...
- 攻防世界Web进阶篇——warmup
打开链接,发现是一张滑稽 查看页面源代码,发现文件 于是打开source.php,发现 打开hint.php,根据提示得知flag在ffffllllaaaagggg文件中 回到source.php,检 ...
- 实验:在Arduino上使用printf格式化输出到串口
那么在pcDuino上如何用printf函数将数据从串口送出来呢?这就需要修改Arduino上的串口的库文件了.修改 步骤如下: 1.在 pcduino上arduino的库文件路径是:/usr /a ...