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);
热门推荐
耶鲁法学院教授:优绩主义,正在掏空中产家庭
如何以正确的方式申诉刷单问题?刷单申诉成功后需要注意哪些事项?
海参小孩子能吃吗?多大的小孩子能吃海参
普通仓vs保税仓vs监管仓:选择最适合你的仓储解决方案
日本金阁寺:金箔制成的宫殿,手写的门票,不能错过的世界文化遗产
不锈钢热处理工艺
极链科技成被执行人:曾计划在科创板上市,注册资本缩减37%
刚性兑付理财新规解读:对投资者的影响与应对策略
深度解析:非全日制研究生招生形式——同等学力究竟是什么?
Markdown中公式括号的使用指南:从基础到实战
男子称快递370克黄金被“代签收”损失20余万,类似案件多地曝出
“失控”的智能门锁
如何确保数控机床的加工质量?
公证遗嘱的法律规定:确保遗嘱真实有效的法律途径
纪念册平面设计中的点线面-记录成长故事的艺术
家务补偿金计算方法有哪些
股权拍卖流拍怎么办
拔牙后恢复期全指南:多久能恢复,如何促进康复
耳涨满感是什么感觉?症状、原因及缓解方法全解析
被保人如实告知的重要性
真爱的定义是什么?10个特征帮你识别真正的爱情
Excel制作CPK图表:从数据收集到结果分析的完整指南
科目二考试报考指南:内容详解与难点解析
汽车雾灯的功率多大?详解雾灯参数与使用规范
2024年中国游客出境游全景图:数据速递与趋势前瞻
PowerShell 用户列表:如何在 PowerShell 中列出用户
工字钢与H型钢的区别在哪里
什么是经济强国?经济强国的衡量标准是什么?成为经济强国需要具备哪些条件?
青岛跨省异地就医结算医院名单
语文教学情境创设与任务、活动设计策略