Unity中Vector3的三维向量和旋转详解
创作时间:
作者:
@小白创作中心
Unity中Vector3的三维向量和旋转详解
引用
CSDN
1.
https://blog.csdn.net/wangzhae/article/details/136311121
在Unity引擎中,Vector3是三维向量的基础数据类型,广泛应用于坐标、旋转和缩放等场景。本文将详细介绍Vector3的创建、修改、向量计算以及旋转方式(欧拉角和四元数)等核心知识点,并通过代码示例帮助读者快速掌握这些基础操作。
Vector3基础概念
Vector是Unity中的结构体类型,其中:
- Vector2包含两个变量
- Vector3包含三个变量
- Vector4包含四个变量
在Unity中,Vector3主要用于表示三维空间中的向量,其常用的变量为x、y、z,可以代表坐标、旋转、缩放等信息。
创建和修改Vector3
创建结构体
// 向量
Vector3 v = new Vector3(1, 1, 1);
// 坐标
Vector3 v = new Vector3(1, 1, 1);
// 旋转
Vector3 v = new Vector3(45, 90, 1);
// 缩放
Vector3 v = new Vector3(1, 1, 0.5f);
v = Vector3.zero; // 快速创建零向量
v = Vector3.one; // 快速创建全1向量
修改结构体
v.x = 0; // 修改v的x分量为0
向量计算
Vector3 v = new Vector3(0, 0, 0);
Vector3 v2 = Vector3.forward; // 等于Vector3(0, 0, 1)
Debug.Log(Vector3.Angle(v, v2)); // 计算两个向量夹角 90度
Debug.Log(Vector3.Distance(v, v2)); // 计算两个点距离 1.414214
Debug.Log(Vector3.Dot(v, v2)); // 计算点乘 0
Debug.Log(Vector3.Cross(v, v2)); // 计算叉乘 (0.00, -1.00, 0.00)
Debug.Log(Vector3.Lerp(Vector3.zero, Vector3.one, 0.5f)); // 插值计算 (0.5, 0.5, 0.5)
Debug.Log(Vector3.Lerp(Vector3.zero, Vector3.one, 0.8f)); // 插值计算 结果是(0.8, 0.8, 0.8)
Debug.Log(v.magnitude); // 向量模长 结果是1
Debug.Log(v.normalized); // 单位向量 结果是(1.00, 0.00, 0.00)
旋转方式
旋转是三维空间中物体姿态变化的重要组成部分,常见的旋转方式有欧拉角和四元数两种。
欧拉角
欧拉角通过三个角度(绕x轴、y轴和z轴的旋转角度)来描述物体的旋转。这种方法在三维图形学和游戏开发中非常常见,但可能会造成万向节死锁问题。
Vector3 v = new Vector3(0, 30, 0);
四元数
四元数是一种复数类型,可以用来表示三维空间中的旋转。四元数由四个实数组成,可以通过将欧拉角转换为四元数来描述物体的旋转。这种方法在三维动画和游戏开发中也有广泛的应用,且不会造成万向节死锁。
- 使用给定的x,y、z、w分量构造新的四元数
Quaternion quaternion = new Quaternion(float x, float y, float z, float w);
- 使用欧拉角转四元数
Vector3 rotate = new Vector3(0, 30, 0); // 定义欧拉角
Quaternion quaternion = Quaternion.identity; // 定义空的四元数
quaternion = Quaternion.Euler(rotate); // 欧拉角转四元数
rotate = quaternion.eulerAngles; // 四元数转为欧拉角
- 通过角色看向的方向获取
quaternion = Quaternion.LookRotation(new Vector3(0, 0, 0));
调试输出
在开发过程中,调试输出是非常重要的环节,可以帮助开发者快速定位问题。Unity提供了多种调试输出方式:
Debug.Log(); // 正常输出
Debug.LogWarning(); // 警告
Debug.LogError(); // 错误
此外,还可以使用以下方法绘制调试信息:
- 绘制一条线
Debug.DrawLine(v1, v2, Color.blue);
- 绘制射线
Debug.DrawRay(v1, v2, Color.blue);
热门推荐
猜谜语的艺术,揭秘语言游戏的乐趣与智慧
比第一次高考分低的复读生们
如何在C语言中化简一个分数
焦虑症引起的口干口苦怎么治疗
太阳能板连接方式探究:串联与并联,哪种更具优势?
为什么自行车也爱“镁”?
音乐中的人工智能:MusicBrainz Picard 等应用和工具
Windows 10系统屏幕模糊怎么办?六步解决屏幕显示问题
如何选择适合宠物狗狗的沐浴露(从品牌、成分和功能三方面考虑,保护宠物健康)
高古珠玉“灰皮沁”:一种独特的自然沁色现象及其鉴定价值
非农数据将如何影响黄金走势?
武汉方言里的“个斑马”:从三国战将到市井俚语
这9种东西千万别装进保温杯,“伤杯又伤身”,绝非危言耸听!
【STM32开发指南】STM32F103内核Cortex-M3详解
什么是情绪价值 如何提供情绪价值
一次性了解变速套件的主流品牌
换个发型如换脸,这几款型男发型绝了
“罐”字的笔顺、笔画顺序及书写指南
如何在低级格式化后恢复数据
解放战争中,明明和桂系不对付,老蒋却为何又让李宗仁掌管北平?
“行辕”和“剿总”,哪个级别更高权力更大?
企业标注地图 加强企业地理定位的策略
高效释放手机存储:彻底清理缓存大法!
桃树花后防治蚜虫应注意什么?
蛏子什么时候最肥?竹蛏什么季节最好吃?
胃癌征兆:5个身体警报,你注意到了吗
电脑上的 caps 键有什么作用
语文该怎么学(提高语文水平的策略)
道家修炼体系分类研究
日式昆布柴鱼出汁+味噌汤