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 ...
随机推荐
- as8051入门
汇编例子 MAIN: MOV R0, #16 MOV R1, #16 LOOP: MOV A, R1 MOV @R0,A MOV A,0x0 MOV A, @R0 MOV SBUF, A INC R0 ...
- SPI接口(续二)
接下来看SPI接收器数据寄存器RXDAT,下表是它的全部位结构,其地址分别为0x40058014(SPI0).0x4005C014(SPI1). (1)第0到15位(RXDAT)为接收器数据,它包含接 ...
- PPT模板网址
PPT免费下载网址: https://www.1ppt.com/ PPT模板下载:www.1ppt.com/moban/ 行业PPT模板:www.1ppt.com/han ...
- Java基础之变量与常量
变量 定义:可以变化的量. Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序种最基本的存储单元,其要素包括变量名,变量类型和作用域. //数据类型 变量名 = 值:可以使用逗号 ...
- Vue.Draggable使用总结
Draggable为基于Sortable.js的vue组件,用以实现拖拽功能. 特性 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery为基础 和视图模型同步刷新 ...
- flutter-android
多端开发框架 含义:通过一套代码编译成在 H5/微信小程序/React Native/百度小程序/支付宝小程序等端运行的代码. 技术简介:Taro,uniapp Taro是一个开放式跨端跨框架解决方案 ...
- YML Exception 以及 java.nio.charset.MalformedInputException: Input length = 1
在springboot项目中,第一次遇到的问题是 YML Exception java.nio.charset.MalformedInputException: Input length = 1 ,此 ...
- hive:使用concat_ws实现 array转string案例
concat_ws(',',collect_set(if(step_name <> '',step_name,null))) AS step_names,
- ORA-01427: 单行子查询返回多个行 出现原因及对应防止措施
原因:没有做好子查询约束条件 解决方法:1.加 AND ROWNUM =1 条件 但筛选结果可能并非一定是你想要的 2.匹配查询唯一约束条件
- android studio真垃圾
开发人员写代码就行了,想用你写代码,安装配置费死个劲! 我不是针对你,除了visual studio ,所有的IDE都是垃圾.