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);
热门推荐
高考寓意好的礼品有哪些
Wi-Fi原理:详解无线网络传输技术的基础知识
大学生如何创新论文:从选题到写作的全方位指南
上海春季赏花活动推荐:十大花展/节全攻略
咒术回战人物大全:全面了解角色设定
如何定位解决二层环路问题
Ae:文本图层基础
深入分析TN和IPS液晶屏的差异及其潜在问题
IPS/VA/OLED显示器技术对比简析
社保:公司如何合规运营?
游戏如何云端保存数据库
如何选择合适的滤波器设计技术指标?
如何选择高质量手机拍照传感器:关键因素解析与购机建议
查征信有什么影响吗?分4种情况来看
蒙特维多云雾森林:中美洲的梦幻绿海
益生菌与肠道健康研究进展
钓鱼竿种类有哪些?除了手竿和海竿,还有矶竿、筏竿和路亚竿等!
马来西亚的文化礼仪:综合指南
去除脚臭的最好方法
了解急性鼻窦炎
2型糖尿病全面管理:饮食、运动、监测与药物治疗策略
车床安全操作与保养规程:从开机检查到定期维护
孕晚期的注意事项及解决方法
虫草花炒猪肉:一道滋补养生的美味佳肴
神经性头痛治疗的方法
图像质量评估:分辨率详解
高关税利好黄金?历史数据揭示真相
一文读懂如何判断肺结节是否严重?
诗经是什么?中国第一部诗歌总集的文学密码
股市低开怎么办?从四大维度全面解析低开原因及应对策略