当前位置: 首页 > article >正文

unity3d————四元数,欧拉角的互相转换的初步了解

代码示例:

public class siyuanshu : MonoBehaviour
{
    void Start()
    {
        //1.欧拉角转四元数
        Quaternion q2 = Quaternion.Euler(60, 0, 0);
        GameObject obj2 = GameObject.CreatePrimitive(PrimitiveType.Cube);
        obj2.transform.rotation = q2;

        //2.四元数转欧拉角
        print(q2.eulerAngles);

    }
}

运行结果:

 

1. Quaternion.Euler(float x, float y, float z)

  • 作用:这个方法接受三个float类型的参数,分别代表绕X轴、Y轴和Z轴旋转的欧拉角(以度为单位),并返回一个Quaternion对象,该对象表示这三个欧拉角对应的旋转。
  • 参数
    • x:绕X轴旋转的角度(度)。
    • y:绕Y轴旋转的角度(度)。
    • z:绕Z轴旋转的角度(度)。
    • 执行顺序    z-x-y
  • 返回值:一个Quaternion对象,表示给定的欧拉角旋转。
  • 在本代码中的使用Quaternion q2 = Quaternion.Euler(60, 0, 0); 这行代码创建了一个四元数q2,它表示绕X轴旋转60度,绕Y轴和Z轴不旋转(即旋转角度为0)。

2. GameObject.CreatePrimitive(PrimitiveType type)

  • 作用:这个方法接受一个PrimitiveType枚举类型的参数,并返回一个GameObject对象,该对象是一个具有指定基本形状(如立方体、球体等)的新游戏对象。
  • 参数
    • type:一个PrimitiveType枚举值,指定要创建的基本形状。
  • 返回值:一个GameObject对象,它是新创建的基本形状游戏对象。
  • 在本代码中的使用GameObject obj2 = GameObject.CreatePrimitive(PrimitiveType.Cube); 这行代码创建了一个新的立方体游戏对象,并将其赋值给obj2变量。

3. Transform.rotation

  • 作用:这是一个属性,用于获取或设置游戏对象的旋转(以Quaternion表示)。
  • 类型Quaternion
  • 可读写:是。
  • 在本代码中的使用obj2.transform.rotation = q2; 这行代码将之前创建的q2四元数(表示绕X轴旋转60度)赋值给obj2游戏对象的Transform组件的rotation属性,从而使立方体绕X轴旋转60度。

 在这部分代码中,实现了将一个欧拉角转换为四元数,并将这个四元数旋转应用到一个新创建的立方体游戏对象上。

 综上所述,这段代码通过Quaternion.Euler方法将欧拉角转换为四元数,然后通过GameObject.CreatePrimitive方法创建一个立方体游戏对象,最后通过Transform.rotation属性将四元数旋转应用到这个立方体上。这是Unity中常见的用于控制游戏对象旋转的方法。

public Vector3 eulerAngles { get; set; } 

eulerAngles 属性

  • 类型Vector3
  • 可读写:是
  • 描述
    • 获取:当你读取eulerAngles属性时,它返回一个Vector3,其中包含游戏对象当前旋转的欧拉角(X、Y、Z分量,以度为单位)。
    • 设置:当你设置一个Vector3eulerAngles属性时,游戏对象的旋转会被更新为对应的欧拉角旋转。Unity会自动将这个欧拉角转换为一个四元数(Quaternion),因为四元数在内部用于表示旋转,以避免万向锁(gimbal lock)等问题。


http://www.kler.cn/a/388591.html

相关文章:

  • python: postgreSQL using psycopg2 or psycopg
  • 项目集章程program charter
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • python装饰器的使用以及私有化
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • 【金融风控】特征评估与筛选详解
  • 【bayes-Transformer-GRU多维时序预测】多变量输入模型。matlab代码,2023b及其以上
  • Bert框架详解(上)
  • EM是什么?如何修复EM violation?
  • arm中内存读取延迟性能测试
  • goframe开发一个企业网站 rabbitmq队例15
  • 【网络面试篇】TCP 相关——重传机制、滑动窗口、流量控制、拥塞控制、Keep-Alive、KeepAlive
  • 优选算法 - 1 ( 双指针 移动窗口 8000 字详解 )
  • SpringFramework
  • VMware调整窗口为可以缩小但不改变显示内容的大小
  • 如何基于redis记录调用大模型问答的统一注册服务
  • Vue3 实现拖拽小图片覆盖大图片并下载合并后的图片
  • Flutter运行App时出现“Running Gradle task ‘assembleDebug“问题解决
  • Vue2 doc、excel、pdf、ppt、txt、图片以及视频等在线预览
  • 信创异构环境下审视云原生二层和三层容器网络
  • 共享汽车管理:SpringBoot框架的高效实现
  • Ubuntu 18在线安装Docker 实战 2024年11月
  • 访谈Sam Altman:他再次阐述对一个人AI公司的定义以及GPT系列规划
  • Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
  • sql server 自动kill 查询超过20分钟的语句
  • MISRA C2012学习笔记(9)-Rules 8.14