Unity API详解——Quaternion类

article/2025/10/31 2:55:23

Quaternion类又称四元数,由x、y、z和w这4个分量组成,属于struct类型。在Unity中,用Quaternion来存储和表示对象的旋转角度。Quaternion的变换比较复杂,对于GameObject一般的旋转及移动,可以用Transform中的相关方法实现。本博客介绍Quaternion类的一些实例属性、静态方法和运算符,并对Quaternion类相乘运算符“*”的两种重载格式在功能上的异同进行了简要的注解。

文章目录

    • 一、Quaternion类实例属性
      • 1、基本语法
      • 2、功能说明
      • 3、代码实现
    • 二、Quaternion类实例方法
      • 1、基本语法
      • 2、功能说明
      • 3、代码实现

一、Quaternion类实例属性

在Quaternion类中,设计的实例属性主要有eulerAngles属性:欧拉角

1、基本语法

public Vector3 eulerAngles { get; set; }

2、功能说明

此属性用来返回或设置Quaternion实例对应的欧拉角

  • 对GameObject对象的Transform进行欧拉角的变换次序是,先绕z轴旋转相应的角度,再绕x轴旋转相应的角度,最后再绕y轴旋转相应的角度。注意不同的旋转次序得到的最终状态是不同的
  • 对GameObject独享的旋转角进行赋值的方式通常由两种:第一种是将Quaternion实例赋值给transform的rotation,第二种是将三维向量代表的欧拉角直接赋值给transform的eulerAngles

3、代码实现

下面通过实例演示属性eulerAngles的使用,创建一个立方体,将EulerAngle_test.cs挂载在立方体上,将A、B同时拖放物体给它赋值,对于公开的变量来说,Unity编辑器会在 Inspector面板自动实例这个类型默认的空物体,方便赋值,如果没赋值就使用变量 会报第错 “未赋值的引用异常”。
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class EulerAngle_test : MonoBehaviour
{public Transform A, B;Quaternion rotations = Quaternion.identity;Vector3 eulerAngle = Vector3.zero;float speed = 10.0f;void Update(){//第一种方式:将Quaternion赋值给transform的rotationrotations.eulerAngles = new Vector3(0.0f, speed * Time.time, 0.0f);A.rotation = rotations;//第二种方式:将三维向量代表的欧拉角直接赋值给transform的eulerAngleseulerAngle = new Vector3(0.0f, speed * Time.time, 0.0f);B.eulerAngles = eulerAngle;}
}

在这里插入图片描述

二、Quaternion类实例方法

在Quaternion类中涉及的实例方法有SetFromToRotation方法、SetLookRotation方法ToAngleAxis方法,静态方法AngleAxis和实例方法TOAngleAxis功能相近

1、基本语法

public void SetFromTorotation(Vector3 fromDirection, Vector3 toDirection);

2、功能说明

此方法用于创建一个从fromDirection到toDirection的rotation,比如如下代码:

Quaternion q1 = Quaternion.identity;
q1.SetFromToRotation(v1,v2);
transform.rotation = q1;

则相当于将GameObject对象进行如下变换:首先将GameObject对象自身坐标系的x、y、z轴方向和世界坐标系x、y、z轴方向一致,然后将GAmeObject对象自身坐标系中向量y1指向的方向旋转到v2方向

notes:不可以直接及使用transform.rotation.SetFormToRotation(v1, v2)方式进行设置,只能将实例化的Quaternion赋值给transform.rotation

3、代码实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SetFromRotation_test : MonoBehaviour
{public Transform A, B, C;Quaternion q1 = Quaternion.identity;void Update(){//不可直接使用C.rotation.SetFromToRotation(A.position,B.position);q1.SetFromToRotation(A.position, B.position);C.rotation = q1;//在Scene面板中绘制直线Debug.DrawLine(Vector3.zero, A.position, Color.red);Debug.DrawLine(Vector3.zero, B.position, Color.green);Debug.DrawLine(C.position, C.position + new Vector3(0.0f, 1.0f, 0.0f), Color.black);Debug.DrawLine(C.position, C.TransformPoint(Vector3.up*1.5f),Color.yellow);}
}

http://chatgpt.dhexx.cn/article/ORtNRhVd.shtml

相关文章

Unity3D - 详解Quaternion类[转载]

一、简介 Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉卢云哈密顿在1843年发现的数学概念。四元数的乘法不符合交换律。从明确地角度而言,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话&…

【Unity】Unity常用类:向量Vector3、四元数Quaternion

文章目录 Vector3构造函数静态变量变量运算符常用方法(静态)OrthoNormalize(正交标准化)Reflect(反射)Lerp(线性插值) Quaternion构造函数静态变量变量常用方法Eular(欧拉…

unity学习笔记——Quaternion(四元数)

本篇文章转自https://www.cnblogs.com/driftingclouds/p/6626183.html Quaternion类 Quaternion(四元数)用于计算Unity旋转。它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值。 Unity内部使用四元数来表…

【Unity编程】Unity中关于四元数的API详解

Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计算Unity旋转。它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值。 Unity内部使用四元数来表示所有的旋转。 Quaternion是基于复数&am…

四元数快速入门【Quaternion】

四元数(Quaternion)是用于旋转和拉伸向量的数学运算符。 本文提供了一个概述,以帮助理解在空间导航等应用程序中对四元数的需求。 推荐:用 NSDT场景设计器 快速搭建3D场景。 可以通过多种方式在空间中准确定位、移动和旋转物体。 …

四元数(Quaternion)食用指南

四元数(Quaternion)食用指南 “这简直就是黑魔法!” 开发时,每次遇到旋转问题时总会心头一震,在欧拉角和四元数这两种处理方式的选择上犹豫不决,不知不觉就陷入了四元数的淤泥中…接下来,我决定…

Unity3D - 详解Quaternion类

一、简介 Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉卢云哈密顿在1843年发现的数学概念。四元数的乘法不符合交换律。从明确地角度而言,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话&…

int 的最大值

int 的最大值 java int 类整数的最大值是 2 的 31 次方 - 1 2147483648 - 1 2147483647 可以用 Integer.MAX_VALUE 表示它,即 int value Integer.MAX_VALUE; Integer.MAX_VALUE 1 Integer.MIN_VALUE -2147483648 再大的数就要用 long (最大值 …

Python获取int最大值和float最大值

计算机所能表示的最大值,根据你的计算机的位数决定。有机计算机是64位,有的是32位,因此具体情况各不相同。本人的电脑是64位的。 1.获得int型的最大值 import sys MAX_INTsys.maxsize print(MAX_INT)2.获得float型的最大值 ##灰常简单 max…

C语言数据类型 int、long int 最大值

一、注意:前提是32位计算机: unsigned int 0~4294967295 int -2147483648~2147483647 unsigned long 0~4294967295 long -2147483648~2147483647 long long的最大值:9223372036854775807 long …

C++-int最大值

uint范围 0-255 int范围 -128 - 127 -2147483647 原码1111 1111 1111 1111 1111 1111 1111 1111-2147483647-1-2147483648;由于cpu里面存的是补码计算-2147483647  补码1000 0000 0000 0000 0000 0000 0000 0001-1       补码1111 1111 1111 1111 1111 1111 1111 11…

c语言求int的最大值最小值,c语言 int最大值是多少?

喵喔喔 int最大值,根据编译器类型不同而变化,具体如下:1、对于16位编译器,int占16位(2字节)。int的最大值为32767.2、对于32位和64位编译器,int占32位(4字节)。int的最大值为21474836473、可以通过打印sizeof(int)查看…

C语言|int型最大值和最小值

一.int型的最值 有符号 最小值:-2147483647-1最大值:2147483647 无符号 最大值:0xffffffff最小值:0 大家可以在整形类型的取值范围限制头文件中查看:limits.h 二.int型最小值的原因 当我们直接给int型变量赋-214748364…

软件测试管理神器之zentao(禅道)-BUG管理

软件测试管理神器之zentao(禅道)-BUG管理 禅道在遵循其管理方式基础上,结合国内研发现状,整合了bug管理,测试用例管理,发布管理,文档管理等功能,完整的覆盖了软件研发项目的整个生命周期。在禅道软件中&…

软件测试Bug

bug组成 缺陷编号-测试管理系统自动生成缺陷标题->用简短精确的话语来描述你的bug缺陷类型--代码错误(功能--预期结果--Bug/未做功能---bG)/设计缺陷(需求不全面,考虑的场景遗漏)/界面优化(U-—致,去检查ui)缺陷等级-->致命(系统瘫痪、环境出错、无法进入下一步测试)/严…

禅道—禅道Bug管理模块

禅道官网:https://www.zentao.net/ 简介: 开源免费的项目管理软件、集产品管理、项目管理、测试管理一体以及事物管理组织管理的功能 使用原因: 开源 方便跟踪管理Bug使用简单易学及多种管理于一身 1、Bug操作流程 2、Bug的几种解决方案 …

软件测试bug文章,软件测试技术之说一个让你印象最深的bug?

本篇文章主要讲述软件测试技术之说一个让你印象最深的bug?,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。 今天来聊一下测试面试必问题目:说一个让你印象最深的bug? 被问到这个问题,如果面试者之前没有总结和准备过,会一下子被问懵逼,瞬间紧张…

软件测试常见Bug清单

软件测试中,bug的类型有很多种,比如:代码错误、界面优化、设计缺陷、需求补充和用户体验等; 一般情况下,需求补充和设计缺陷比较好区分,但是代码错误、界面优化和用户体验区分不是很明显; 下面…

禅道的Bug管理流程介绍

禅道是一款以Bug管理为核心,覆盖全人员、全流程的全生命周期项目管理软件。能够为项目研发提供全程支撑,持续对团队的研发项目进行有序的管理和跟进,完整覆盖研发项目的核心流程。 非常多团队关注禅道的主要原因是关注禅道作为Bug管理工具、…

常用BUG管理工具系统

常用BUG管理系统 1.EasyBUG 优点: 1)基于WEB的在线的,不用配置; 2)界面简单,操作容易上手,基本上只要是会上网的人一看就会用 3)拥有截图功能,以图片的形式直接存在,而不是以附件形式; 4)BUG解决流程记录在案;有统计报表,一目了然; 5)国产且免费的。 缺点:…