Unity API详解——Quaternion类

news2024/11/28 6:39:54

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的rotation
        rotations.eulerAngles = new Vector3(0.0f, speed * Time.time, 0.0f);
        A.rotation = rotations;
        //第二种方式:将三维向量代表的欧拉角直接赋值给transform的eulerAngles
        eulerAngle = 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://www.coloradmin.cn/o/470951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CH32V307环境参数在线监测系统(一)

CH32V307环境参数在线监测系统是以CH32V307VCT6为核心,由ESP8266模块、DHT11温湿度传感器模块、TFT LCD显示屏组成。系统实物图如下所示: 系统功能主要有RTC实时时钟、WIFI网络授时、DHT11温度测量、温湿度数据实时上传到onenet平台、屏幕定时刷新等功能…

在Docker上安装和运行MySQL容器(纯步骤)

在Docker上安装和运行MySQL步骤 本文章只有操作步骤,没有原理解释,只是在学习当中提醒自己安装步骤。 第一步:从远程仓库拉取MySQL镜像 1.从远程仓库搜索mysql镜像 docker search mysql2.pull拉取镜像 这里我选择的是mysql的5.7版本 docker…

盘点 5 个 yyds 的 AI 绘画辅助工具

国外著名的 AI 作图工具 Midjourney、Stable Diiffusion 都可以根据你输入的指令生成一张图片。 如果你想输出高质量的图片,需要掌握一些 prompt 指令技巧。本文章便盘点了 5 个 GitHub 上的开源项目,引领你更好的上手 AI 作图。 本期推荐开源项目目录&…

软件杯龙源风电赛题培训!千万分钟数据和全流程基线等你来战

‍‍ “中国软件杯”大学生软件设计大赛是一项面向中国在校学生的公益性赛事,大赛由国家工业和信息化部、教育部、江苏省人民政府共同主办,是全国软件行业规格最高、最具影响力的国家级一类赛事。其中,作为重点赛题的龙源风电赛,上…

我们分析了9.12亿篇博客文章,得出了11条内容营销发现

我们分析了 9.12 亿篇博客文章,想要更好地了解目前的内容营销领域。 具体来说,我们研究了这些文章的内容格式、字数和标题等因素与社交媒体分享和反向链接的关联性。 在我们的数据合作伙伴BuzzSumo的帮助下,我们有了一些非常有趣的发现。 …

Dex-Net使用手册————GQCNN网络

1. Dex-Net Package GitHub - BerkeleyAutomation/dex-net 🎈dex-net Python 包用于打开、读取和编写 HDF5 数据库的 3D 对象模型、平行下颚抓取和掌握鲁棒性指标。 🎈HDF5数据库还可用于生成大量数据集,将点云和抓取的元组与二进制抓取鲁棒…

【Python】【进阶篇】12、搭建Django开发环境

目录 搭建Django开发环境1. 安装Python解释器2. 安装MySQL数据库3. 安装Python包管理器4. 安装 Pycharm IDE 搭建Django开发环境 上一章我们介绍了 Django 框架的重要组件,常言道“工欲善其事,必先利其器”,在正式创建 Django 项目之前&…

AI绘画——Lora模型Niji-Expressive V2 launch(灵动优雅,张力尽显)

目录 Niji-Expressive V2 launch!! 灵动优雅,张力尽显 Vivid and elegant, full of tension 模型演示(多图预警) Niji-Expressive V2 launch!! 灵动优雅,张力尽显 本次升级泛用性,能在更多模型和采样方式上适用 …

《一文带你读懂:云原生时代业务监控》

点击上方蓝字关注我们! 对业务来说,完备的应用健康性和数据指标的监控非常重要,通过采集准确的监控指标、配置合理的告警机制,我们能够提前或者尽早发现问题,并做出响应、解决问题,进而保证产品的稳定性&am…

vue性能优化之虚拟列表滚动

一、前言 前端的性能瓶颈那就是页面的卡顿,当然这种页面的卡顿包含了多种原因。 例如HTTP请求过多导致数据加载变慢,下载的静态文件非常大导致页面加载时间很长,js中一些算法响应的时间过长等。很多前端工程师都花费很多的精力在dom渲染上来…

Java 入门 - 语法基础

hello world public class Hello {public static void main(String[] args) {System.out.println("hello world");} } 复制代码 public: 是关键字;表示公开的class: 是关键字;用来定义类Hello: 是类名;大小写敏感;命名…

BFS算法专题

BFS算法专题 框架篇LeetCode 111. 二叉树的最小深度解题思路代码实现 LeetCode 752. 打开转盘锁解题思路代码实现 LeetCode 773. 滑动谜题解题思路代码实现 总结 不要纠结,干就完事了,熟练度很重要!!!多练习&#xff0…

Vivado约束添加方法:一文全面解析IO和时序约束

FPGA开发离不开IO约束和时序约束,IO约束用于确定输入/输出端口的物理端口和电气特性,与芯片和电路设计有关。而时序约束则用于设定FPGA设计中的时序特性,以确保系统能够在预期时钟频率下正常运行。本文将介绍vivado中常见的设置约束的方法。 …

mysql 如何避免索引失效

案例演示 建表及初始化数据 CREATE TABLE staffs (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(24) NOT NULL DEFAULT ,age INT NOT NULL DEFAULT 0,pos VARCHAR(20) NOT NULL DEFAULT ,#职位add_time TIMESTAMP NOT NULL DEFAULT CURREN…

二维码在设备点维一体化管理中的应用

随着科技发展,设备点维一体化管理体系应运而生,该管理体系的出现让设备维护保养变得更加高效精细化。 设备点维一体化管理体系以设备点检和维护保养为基础,通过日常、专业及精密点检,对点检测得的数据和设备给油脂保养情况进行统…

一个开源、免费在线数据建模、元数据管理平台,简单易用

一、开源项目简介 ERD Online 是一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL查询等功能,辅以版本、导入、导出、数据源、SQL解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。 二、开源协议 …

全国各省份影像下载地址(11级别)

安徽省https://pan.baidu.com/s/1fMuWhVZFvSH1UlCGU1bPpA?pwdeasy澳门特别行政区https://pan.baidu.com/s/1aU2D4o2bfeHTJTb6AkUtVA?pwdeasy北京市https://pan.baidu.com/s/1eaNzAWm1pUx_rjhD_wHHhA?pwdeasy福建省百度网盘 请输入提取码甘肃省https://pan.baidu.com/s/1mAqf…

【Tools系列】IDA远程调试Linux文件

Date: 2023.4.28 文章目录 1、工具安装2、IDA+linux_server参考1、工具安装 IDA Pro 7.2 2、IDA+linux_server (1)进入到IDA的安装目录,找到文件夹/dbgsrv,其中有两个文件linux_server和linux_server64,分别为32位的服务端和64位的服务端,可根据调试目标进行选择。并将…

RocketMQ第二节(安装和模块详解)

目录 1:RocketMQ安装 1.1:下载安装包解压 1.2:修改运行配置 1.3:运行RocketMQ 1.3.1:启动NameServer 1.3.2:启动Broker 1.4:消息收发 1.5:服务关闭 2:RocketMQ模…

八部门联合推动IPv6创新发展 知道创宇助力IPv6快速安全改造

近日,工业和信息化部、中央网信办、国家发展改革委、教育部、交通运输部、人民银行、国务院国资委、国家能源局等八部门联合印发《关于推进IPv6技术演进和应用创新发展的实施意见》(以下简称“《实施意见》”),提出到2025年底&…