今天我们来谈谈关于Unity中的旋转。主要有三种方式。变换矩阵,四元数和欧拉角。
定义
可以执行任意的3d变换(平移,旋转,缩放,切边)并且透视变换使用齐次坐标。一般比较少用到。Unity中提供了一个Matrix4x4矩阵类
“四元数是最简单的超复数。 复数是由实数加上元素 i 组成,其中i^2 = -1。 相似地,四元数都是由实数加上三个元素 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = ijk = -1 , 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi + cj + dk,其中a、b、c 、d是实数”。这些概念很难懂吧。只要先记得Unity中的Quaternion有4个组件(x,y,z,w)
“用来确定定点转动刚体位置的3个一组独立角参量,由章动角θ、旋进角(即进动角)ψ和自转角j组成”
在Unity中,Quaternion.eulerAngles 返回旋转的角度,绕z轴旋转euler.z角度,绕x轴旋转euler.x度,绕y轴旋转euler.y度
转换
Quaternion q = Quaternion.LookRotation(new Vector3(0,0.5,1));
Matrix4x4 rot = new Matrix4x4();
rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));
Matrix4x4 rot = new Matrix4x4();
rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));
Vector4 vy = rot.GetColumn(1);
Vector4 vz = rot.GetColumn(2);
Quaternion newQ = Quaternion.LookRotation(new Vector3(vz.x,vz.y,vz.z),new Vector3(vy.x,vy.y,vy.z));
常用的函数
function ToAngleAxis (out angle : float, out axis : Vector3) : void
绕axis轴旋转angle,创建一个旋转
static function Angle (a : Quaternion, b : Quaternion) : float
返回a和b两者之间的角度。
var eulerAngles : Vector3
返回表示旋转的欧拉角度。表示旋转的角度,绕z轴旋转euler.z度,绕x轴旋转euler.x度,绕y轴旋转euler.y度(这样的顺序)。
function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void
把物体的fromDirection旋转到toDirection
function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
建立一个旋转使z轴朝向view y轴朝向up
static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
从from 转换到to,移动距离为t
static function Lerp (a : Quaternion, b : Quaternion, t : float) : Quaternion
跟Slerp相似,且比Slerp快,.但是如果旋转角度相距很远则会看起来很差
比较
可以做各种复杂的变换,但是学习曲线比较大,使用的内存也比较多,因为存储的数据量比较大。
简单理解,尤其是对美术和策划的同事。运算速度和消耗内存比较少。可能存在万向锁的问题(两个轴的旋转重合)
避免了万向锁的问题。理解起来不是那么直接。
有任何问题欢迎一起探讨ken@iamcoding.com
分享到:
相关推荐
在三维空间中,物体的旋转可以通过多种数学模型来表示,而在计算机图形学和游戏开发中,最常用的模型是欧拉角、四元数和矩阵。了解它们之间的优缺点,对于高效实现旋转动画非常重要。在Unity游戏引擎中,四元数被...
在Unity中,线性插值(Linear Interpolation,简称Lerp)和四元数(Quaternion)是两个重要的数学概念,常用于动画过渡、物体平滑移动和旋转等方面。 线性插值(Lerp)是计算两个数值之间按一定比例的中间值的过程...
在本案例中,我们关注的是使用Unity3D制作的手机游戏《最后一战》的完整源代码和资源。这款游戏中,开发者可能利用了Unity3D的各种特性来构建引人入胜的战斗场景、角色动画、物理效果以及用户界面。 1. **Unity3D...
Unity3D实现鼠标控制旋转转盘 Unity3D实现鼠标控制旋转转盘是 Unity3D 游戏开发中的一项重要功能。该功能可以让用户通过鼠标控制旋转转盘,实现更加真实的操作体验。在培训模拟考试软件中,这种功能尤其重要,让...
<embed id="UnityEmbed" src="WebPlayer.unity3d" width="600" height="450" type="application/vnd.unity" pluginspage="http://www.unity3d.com/unity-web-player-2.x" backgroundcolor="A0A0A0" bordercolor=...
在这个“unity3D动作RPG手游完整源码.zip”压缩包中,你将获得一个完整的动作角色扮演游戏(Action Role-Playing Game,简称ARPG)的源代码,这对于学习Unity3D游戏开发或者想要快速启动自己的项目来说非常有价值。...
该教程涵盖了 Unity3D 中的基本概念,如游戏对象、组件、脚本、碰撞检测、鼠标事件和旋转矩阵等。 一、 Unity3D 基础知识 -------------------- ### 1. 游戏对象(GameObject) 在 Unity3D 中,游戏对象是最基本...
本资源为一个基于Unity3D的益智类单机手游的完整源码,适合开发者进行学习和研究。以下将详细解析这个项目的相关知识点。 1. **Unity3D引擎**:Unity3D是一个使用C#编程语言的开源游戏引擎,支持Windows、Mac、...
本篇文章将详细讲解如何利用Unity3D的矩阵变换功能来实现UI元素的旋转。 首先,我们需要理解Unity3D中的矩阵变换。在图形学中,矩阵是一种强大的工具,用于表示物体的位置、旋转和缩放等几何变换。在Unity3D中,`...
<title>樱花飘落特效</title> <style> .cherry-blossom { position: absolute; width: 20px; height: 20px; background-image: url('path/to/cherry_blossom.png'); animation: fall 5s linear infinite; } ...
### Unity3D Webplayer UnityObject 详解 #### UnityObject简介 UnityObject 是一款JavaScript脚本,主要用于简化Unity的内容嵌入到HTML中。该脚本具备检测Unity网络播放器插件的功能,并能初始化网络播放器的安装...
Unity中的四元数(Quaternion)是一种数学工具,用于表示3D空间中的旋转。在游戏开发、计算机图形学以及许多其他领域,四元数是处理旋转的常见方式,因为它们能够避免旋转时出现的问题,比如万向节锁(Gimbal Lock)...
在Unity中,对3D模型进行缩放和旋转是基本的操控方式,能够帮助开发者构建动态且交互性强的游戏场景。本文将深入探讨Unity 3D如何实现模型的缩放和旋转功能。 一、模型缩放 在Unity中,缩放模型通常通过修改...
在Unity3D游戏开发中,UI设计是至关重要的部分,特别是在玩家交互和视觉体验上。本教程将聚焦于“Unity3D中UI弧形轮番旋转”这一技术,旨在实现类似《英雄联盟》中选择皮肤时的3D滚动视图效果。这个效果不仅增加了...
Unity3D是一款强大的游戏开发引擎,它提供了丰富的工具和功能,让开发者能够创建各种类型的游戏。在Unity3D中,用户界面(UI)系统被称为uGUI,这是一个强大的系统,允许开发者构建复杂的交互式用户界面,并与游戏...
在Unity引擎中,UGUI(Unity User Interface)是官方提供的一种强大的2D和3D图形渲染系统,用于创建用户界面。本项目“Unity UGUI三维菜单旋转循环”旨在利用UGUI系统开发一个创新的交互式菜单,该菜单具有3D旋转...
基于Unity3D的虚拟仿真案例 - 地下管廊管道系统源码.zip基于Unity3D的虚拟仿真案例 - 地下管廊管道系统源码.zip基于Unity3D的虚拟仿真案例 - 地下管廊管道系统源码.zip基于Unity3D的虚拟仿真案例 - 地下管廊管道系统...
在计算机图形学和游戏开发,特别是Unity引擎中,四元数被广泛应用于表示和操作物体的旋转。相较于欧拉角,四元数避免了万向节死锁(Gimbal Lock)问题,提供了更加平滑和高效的旋转表示。 在理解四元数与三维旋转的...
1. **Unity3D基本概念**:Unity3D采用组件式架构,每个游戏对象(GameObject)都可以包含多个组件,如Transform(位置、旋转、缩放)、Mesh Renderer(模型渲染)、Collider(碰撞检测)等。在这个场景中,每张扑克...