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);
热门推荐
万用表教你家电维修科学原理
智能锁故障?这些小技巧让你秒变维修达人!
电饭锅维修指南:常见故障检修与维护
山西张家界旅游攻略,找导游娜娜超值体验!
山西人必打卡:张家界绝美景点大揭秘!
英谷峡:山西版张家界的隐藏秘境
普陀山的观音传说:从"不肯去"到"南海圣境"
学习制定理财目标
副市长简报:“杭州六小龙”——东方神秘力量
羊肚菌的生长环境要求与生长周期详解
羊肚菌高产栽培技术
农村宅基地自建房屋买卖是否有效?法院判了!
城市户口买了农村房屋该怎么过户
华为手机桌面图标丢失?这些方法帮你快速找回!
职场必备:如何快速开具规范的工作证明?
心理学:别急着证明别人错
老师教你如何“证明自己”
心力衰竭患者家庭护理要点
从心衰预防、治疗到康复,指南建议这样做
张家界玻璃桥:世界之最的惊险挑战
从张家界到潘多拉星球:《阿凡达》取景地深度游
美国收费公路全攻略:如何线上缴费?这些实用信息请收好
为何中国高速收费,却年年亏损,而美国免费还能盈利?
金融科技助力量化投资新纪元
Alpha模型和马科维茨问题:量化交易的秘密武器
内分泌科主任提醒:二甲双胍缓释片这样服用最安全
瞬感血糖仪+二甲双胍:糖尿病患者的控糖新选择
邹大进教授:通过生活方式干预摆脱二甲双胍依赖
东方卫视春晚,《繁花》剧组重聚引爆期待!
周深、阿云嘎加盟东方卫视春晚,海派文化遇上实力唱将!