unity 五种旋转方式localEulerAngles、eulerAngles、rotation、localRotation和Rotate的区别

 

本文详细解析了Unity中transform.localEulerAngles、transform.eulerAngles、transform.rotation等属性的使用方法,并通过实例对比了不同旋转方式的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1   transform.localEulerAngles

使用localEulerAngles进行旋转的时候,我们要使用transform.localEulerAngles = new Vector3(x, y,z); 其中,new Vector(x,y,z)为游戏物体最终旋转到的目标角度,x.y,z的值分别都是以0为基准,假设游戏物体的初始角度为(x1,y1,z1),则游戏物体从(x1,y1,z1)旋转到(x,y,z),但是是以父游戏物体的坐标系为参考(自己是顶级游戏物体除外)

举个例子:

    假如游戏物体A,B,都没有父游戏物体,B初始旋转角度为(0,0,0),A的初始旋转角度为(0,0,45),编写脚本并把它挂载到B上,脚本编写如下:

  1.  
    using System.Collections;
  2.  
    using System.Collections.Generic;
  3.  
    using UnityEngine;
  4.  
     
  5.  
    public class Test2 : MonoBehaviour {
  6.  
     
  7.  
    private float agent;
  8.  
    void Start () {
  9.  
    agent = 0f;
  10.  
    }
  11.  
     
  12.  
    // Update is called once per frame
  13.  
    void Update () {
  14.  
    agent += Time.deltaTime*50;
  15.  
    transform.localEulerAngles= new Vector3(0f,agent,0f);
  16.  
    }
  17.  
    }
cs

这时,在程序还在跑着的时候,把B拽到A下,作为A的子游戏物体,这时,B的旋转角度为(0f,agent,0f),结果证明也是这样,如下动图:

结论:通过

 transform.localEulerAngles= new Vector3(0f,agent,0f);

设置的角度是相对角度(类似于相对路径)

 

1.2  transform.eulerAngles

transform.eulerAngles= new Vector3(x,y,z)

new Vector(x,y,z)为游戏物体最终旋转到的目标角度,x.y,z的值分别都是以0为基准,假设游戏物体的初始角度为(x1,y1,z1),则游戏物体从(x1,y1,z1)旋转到(x,y,z),,同时也以世界坐标系为参考,而不是以父级游戏物体的坐标系为准。

举个例子:

    假如游戏物体A,B,都没有父游戏物体,B初始旋转角度为(0,0,0),A的初始旋转角度为(0,0,45),编写脚本并把它挂载到B上,脚本编写如下:

  1.  
    using System.Collections;
  2.  
    using System.Collections.Generic;
  3.  
    using UnityEngine;
  4.  
     
  5.  
    public class Test2 : MonoBehaviour {
  6.  
     
  7.  
    private float agent;
  8.  
    void Start () {
  9.  
    agent = 0f;
  10.  
    }
  11.  
     
  12.  
    // Update is called once per frame
  13.  
    void Update () {
  14.  
    agent += Time.deltaTime*50;
  15.  
    transform.eulerAngles= new Vector3(0f,agent,0f);
  16.  
    }
  17.  
    }
cs

这时,在程序还在跑着的时候,把B拽到A下,作为A的子游戏物体,这时,你猜,B的旋转角度是如何变化?

如果是以父级游戏物体的坐标系为准为准的话,那么B的旋转角度为(0f,agent,0f)

但是,事实证明,B的旋转角度不仅仅是y轴的值变,连x轴、z轴的值都在变,如下动图:

结论:通过

transform.eulerAngles= new Vector3(x,y,z)

设置的角度是绝对角度(类似于绝对路径)

2.1   transform.rotation

//将欧拉旋转角转换为四元素旋转角

Quaternion rotation= Quaternion.Euler(new Vector3(x, y,z));

Transform.rotation=rotation;

 new Vector(x,y,z)为游戏物体最终旋转到的目标角度,x.y,z的值分别都是以0为基准,假设游戏物体的初始角度为(x1,y1,z1),则游戏物体从(x1,y1,z1)旋转到(x,y,z),,同时也以世界坐标系为参考,而不是以父级游戏物体的坐标系为准。

举个例子:

    假如游戏物体A,B,都没有父游戏物体,B初始旋转角度为(0,0,45),A的初始旋转角度为(0,0,45),编写脚本并把它挂载到B上,脚本编写如下:

  1.  
    using System.Collections;
  2.  
    using System.Collections.Generic;
  3.  
    using UnityEngine;
  4.  
     
  5.  
    public class Test2 : MonoBehaviour {
  6.  
     
  7.  
    private float agent;
  8.  
    void Start () {
  9.  
    agent = 0f;
  10.  
    }
  11.  
     
  12.  
    // Update is called once per frame
  13.  
    void Update () {
  14.  
    agent += Time.deltaTime*50;
  15.  
    transform.rotation = Quaternion.Euler(new Vector3(0f,agent,45f));
  16.  
    }
  17.  
    }
cs

这时,在程序还在跑着的时候,把B拽到A下,作为A的子游戏物体,这时,你猜,B的旋转角度是如何变化?

如果是以父级游戏物体的坐标系为准为准的话,那么B的旋转角度为(0,agent,45f)

但是,事实证明,B的旋转角度不仅仅是y轴的值变,连x轴、z轴的值都在变,如下动图:

结论:通过

Quaternion rotation= Quaternion.Euler(new Vector3(x, y,z));

Transform.rotation=rotation;

设置的角度是绝对角度(类似于绝对路径)

 

2.2  transform.localRotation

类似于localEulerAngles,不再叙述

                

 

3  transform.Rotate(参数)

transform.Rotate(x,y,z):以自身坐标系为参考,而不是世界坐标系,分别以x度y度z度绕X轴、Y轴、Z轴匀速旋转

transform.Rotate(轴,Space.Self):以自身坐标系为参考

Transform.Rotate(轴,Space.World):以世界坐标系为参考

还有其它四种方式就不一一介绍了

 

 

3月3日补充:

需求:我想拿到下面图中游戏物体B的相对与游戏物体A的三维坐标 (0,20,0)

只需通过   游戏物体B实例对象. transform.localEulerAngles  即可拿到,打印输出如下:

但是当B的坐标出现有负数呢?如下图:

打印输出为:

不知你有没有看出点什么?

是不是有这样的规律:

360+(-10)=350,360+20=380(即为20),360+0=360(即为0)

 

当游戏物体B不再是A的子物体时,如下图:

是否还能通过这种方式获取呢?

答案是肯定的,如下图:

 

 

好了,本文到此结束,如果本文对你有帮助,资助2毛钱作为鼓励呗,穷逼一个,就当筹个网费吧

 

 

 

 
Unity旋转实现一些方法总结(案例:通过输入,玩家进行旋转移动)
方法简单直观,但长期旋转可能导致数值不稳定。使用四元数插值方法(如Slerp)可以实现更稳定平滑的旋转效果,但需要一定的数学基础。适用于让物体朝向特定目标。可以将欧拉角转换为四元数进行旋转。在选择使用哪种方法时,应根据具体需求、旋转的复杂性性能要求来权衡。对于简单的旋转,可能足够;而对于需要平滑过渡或精确控制的旋转,使用四元数插值方法可能更合适。
Unity3D中的欧拉角使用(二) ——localRotation
5-12
那么在利用Quaternion.Eular(x,y,z)将欧拉角转化为四元数给localRotation赋值的时候是否有限制呢? 【结果分析】很多资料提到Rotate()方法在使用的时候不要超过360°,我们发现在上面的测试中,角度值超过360度并不影响,只需要除以360取余数即可。 全文总述,明确结论 五、结论 transform.localRotation = Quaternion.Eular...
unity】关于unity3D摄像机视角移动的几种方式详解_unity鼠标控制摄像头...
5-14
Unity3D中的Transform组件是每个GameObject对象都有的组件,它控制着对象的位置、旋转缩放。 在介绍视角移动前,本文将先介绍transform的position、rotation两个属性unity中的坐标系。 1、几种坐标系 在unity中常见的有两种坐标系,分别是全局坐标(World Space)局部坐标(Local Space),在unity场景窗口(Scene)中可以切...
Unity3D——旋转RotaterotationeulerAngles
Rotate  欧拉角旋转 1.Transform.Rotate(float xAngle, float yAngle, float zAngle);每一帧都绕自身坐标轴的X轴、Y轴、Z轴旋转x度、y度、z度。 void Update () { this.transform.Rotate(0f, 0f, 2f);//每一帧绕自身坐标轴Z轴旋转2度 } 2.Transform.Rot...
Unity物体旋转
05-12 8531
Unity物体旋转
Unity】常见对象旋转方法_unity旋转代码
5-13
usingUnityEngine; publicclass_Rotation:MonoBehaviour { //选择最终角度 Quaternion qua; voidStart() { //确定好旋转的最终角度,在当前坐标系y轴上加200度。然后将欧拉角转为四元数。 qua = Quaternion.Euler(this.transform.localEulerAngles +newVector3(0,200,0)); ...
...的几种方式#自我总结#_transform.localrotation
5-7
transform.localRotation = Quaternion.Euler(newVector3(x, y, z)); transform.Rotate( ) 旋转的顺序是:Z,X,Y public voidRotate(Vector3eulerAngles,SpacerelativeTo= Space.Self); transform.Rotate(Vector3.right * s * Time.deltaTime);//绕自身x轴旋转,每秒s度 ...
unity之物体旋转 物体向目标物体转向以及移动到该物体
最新发布
04-02 198
物体旋转 物体向目标物体转向以及移动到该物体
Unityrotationlocalrotation区别
【代码】Unityrotationlocalrotation区别
...rotation,localEulerAngles,localRotation,万向节锁)_unity...
5-12
localRotation 简单就是本地的四元数了。 eulerAngles 欧拉角,也就是我们熟悉的(0,0,0)了,也就是属性面板上的类型。记得属性面板上的数字永远是本地欧拉角 localEulerAngles 本地旋转欧拉角了 欧拉旋转会导致的万向节锁 那么看起来欧拉角用起来又方便又简单,为啥要有四元数呢,这就谈谈欧拉旋转的问题,但是Unity已经...
rotationlocalRotationeulerAngleslocalEulerAnglesRotate...
5-4
本文深入探讨Unity中物体旋转的不同方式,包括使用Quaternion.Euler、Quaternion.AngleAxis、localRotationRotate方法的效果对比,特别是在有父物体存在的情况下的表现。通过实例演示,帮助读者理解世界坐标局部坐标下的旋转差异。 摘要生成于C知道,由 DeepSeek-R1 满血版支持,前往体验 > ...
unity 朝着一个方向旋转
方向转为浮点数(来源:CodeMonkey插件) float GetAngleFromVectorFloat(Vector3 dir) { dir = dir.normalized; float n = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; if (n < 0) n += 360; return n; //用法: tranform.eulerAngles=ne
【100个 Unity小知识点】 | Unity中的 eulerAngleslocalEulerAngles细节剖析
热门推荐
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营变现任何实时互动的2D3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏! Unity 小知识点学习 Unity中的 rota.
unitylocalRotation赋值_unity rotation赋值
5-14
unitylocalRotation赋值 transform.localPositiontransform.localScale都是直接赋值三元数,给旋转赋值需要用 方法一: xxx.transform.localEulerAngles = new Vector3 (0.0f,0.0f,0.0f); 方法二: xxx.transform.rotation=Quaternion.Euler(0.0f,0.0f,0.0f);...
unity Transform组件变量,localPositionposition的区别rotation属性Rotate()方法的区别
01-18 8403
Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎。通过一张图片来看看它的属性 Debug.Log("position " + transform.position); //世界坐标的位置 Debug.Log("localPosition " + transform.localPosition); //相...
Unity欧拉角、四元素、旋转
 
02-03 2508
欧拉角 欧拉角eulerAnglesUnity3D是一个Vector3类的变量,一个GameObject的旋转量通常就是欧拉角来描述的 用一句话说,欧拉角就是物体绕坐标系三个坐标轴(x,y,z轴)的旋转角度。 1.transform.localRotation //transfrom组件属性2.transform.localEulerAngles //transform组件属性3.transform.rotation //transform组件属性4.transfrom.eularAngles
unity引擎之Rotation旋转
08-03 2万+
一、Unity中的Rotation         在unity中,旋转的表示的常用方法之一,是一个三维向量(x、y、z): 图1、Unity中的旋转         实际上这是欧拉角。这三个分量分别是绕x轴、y轴、z轴旋转的角度。         要对一个object进行旋转,还可以通过代码: transform.Rotate(x, y, z); 这里,如果看过《坐标系》一文...
Unity 之利用 localEulerAngle与EulerAngle 控制物体旋转
08-25 1921
Unity 之利用 localEulerAngle与EulerAngle 控制物体旋转
unity旋转方式
03-14 236
//第一种 // transform.Rotate(new Vector3(90, 0, 0)); // transform.Rotate(0,25*Time.deltaTime ,0,Space.Self ); //第二种 // transform.Rotate(Vector3.up ,90); //第三种 四元数 //transform.rotation = Quaternion.Euler(...
Unity_物体旋转方法归纳
07-17 1万+
0、旋转的三种方式 1、矩阵旋转 2、欧拉旋转 会造成万向节锁问题 3、四元数旋转 可避免万向节锁现象 1、方法1 Transform.rotation / Transform.localRotation 旋转角度 void Update() { if (Input.GetMouseButtonDown(0)) { print("物体的原始旋转信息:" + transform.eulerAngl
unity 五种旋转方式区别
unity 五种旋转方式localEulerAngleseulerAnglesrotationlocalRotationRotate区别
unity,欧拉角
Unity中,欧拉角(Euler Angles)用于描述物体的旋转状态,它由三个角度组成,通常是俯仰角(Pitch)、偏航角(Yaw)翻滚角(Roll)。在Transform组件中,可以通过eulerAngles属性获取或设置物体的欧拉角。例如,当物体绕X轴旋转时,它的欧拉角表示为(X,0,0),当物体绕Y轴旋转时,它的欧拉角表示为(0,Y,0),当物体绕Z轴旋转时,它的欧拉角表示为(0,0,Z)。欧拉角在游戏开发中非常常用,可以用于控制物体的旋转状态,实现各种动态效果。
Unity所有关于旋转的方法详解
02-17 9819
我们在Inspector面板上看到的rotation其实是欧拉角,我们将Inspector面板设置成Debug模式,此时看到的local Rotation才是四元数。Unity中的欧拉旋转是按照Z-X-Y顺规执行的旋转,一组欧拉旋转过程中,相对的轴向不会发生变化。Transform.Rotate(new Vector3(30,60,30)),它代表执行了一组欧拉旋转,它相对的是旋转前的局部坐标朝向。正是这种顺规轴向的定义,导致了万向节死锁的自然形成。
unity3d坐标系以及ue的比较
02-16 2784
unityue都采用左手坐标系在3d软件中,大多数软件都用红色代表x轴,绿色代表y轴,蓝色代表z轴。在unity中X轴代表右方,Y轴代表上方,Z轴代表前方;在ue中X轴代表前方,Y轴代表右方,Z轴代表上方;
unity3D物体旋转
11-06 1527
在3D世界里,物体有位置姿态信息,位置很好理解,就是在空间中的坐标,有绝对坐标(position,世界坐标)相对坐标(localPosition,相对于父物体的坐标)。 姿态就不好理解了,描述的是物体旋转,有三个姿态,偏航,俯仰,翻滚。 分别是物体按照x,y,z三轴旋转的结果 旋转unity3d中用四元数来表示,四元数的一种超复数,由一个实部3...
localEulerAngleseulerAngles的理解
12-01 1938
localEulerAngles设置的是物体的相对角度(如果把物体做成其他物体的子物体,则轴也改变成与父物体相同的方向) eulerAngles设置的是物体的绝对角度(如果把物体做成其他物体的子物体,轴不会改变成它父物体的方向,但它的x、y、z轴会因为父物体x、y、z轴的改变而变化角度值) 在控制相机的时候,如果不需要把maincamera放在其他物体下面当子物体就无所谓是localEulerAngles还是eulerAngles,如果需要把camera放在其他物体下面做子物体就需要根据需要选择是local
transform.localRotation transform.Rotation什么区别
05-10
`transform.rotation` `transform.localRotation` 都是 Unity 中 Transform 组件的属性,用于控制游戏对象的旋转。 `transform.rotation` 是基于世界坐标系的旋转角度,它表示物体相对于世界坐标系的旋转变换。当你改变 `transform.rotation` 的值时,游戏对象将在三维空间中旋转。 而`transform.localRotation` 是基于本地坐标系的旋转角度,它表示物体相对于其父对象坐标系的旋转变换。当你改变 `transform.localRotation` 的值时,游戏对象将在其父对象所在的坐标系中旋转。 因此,`transform.rotation` `transform.localRotation` 的主要区别在于它们的参考系不同。如果你希望旋转对象相对于其父对象而不是相对于世界坐标系,则应该使用 `localRotation`。否则,可以使用 `rotation` 实现旋转

posted on 2025-05-15 12:29  漫思  阅读(27)  评论(0)    收藏  举报

导航