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

Unity API详解——Quaternion类

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://www.lryc.cn/news/63495.html

相关文章:

  • 8个免费的PNG素材网站推荐
  • ChatGPT技术原理 第二章:自然语言处理基础
  • 国民技术N32G430开发笔记(8)- 内部Flash的读写操作
  • JVM 基本知识
  • 【源码解析】流控框架Sentinel源码解析
  • redis面试重点------源于黑马
  • jQuery知识点二
  • 4 月份 火火火火 的开源项目
  • PAT A1011 World Cup Betting
  • Android 拍照以及相册中选择(适配高版本)————上传头像并裁剪(一)
  • 带你了解现在的LED显示屏技术
  • AI模型推理(1)——入门篇
  • MySQL--表的基本查询--0410--15
  • Scala语言入门以及基本语法
  • Linux shell编程 循环语句for continue break
  • leetcode 643. 子数组最大平均数 I
  • TDA4VM/VH 芯片硬件 mailbox
  • 如何利用Trimble RealWorks三维激光扫描仪进行外业测量和内业处理?
  • mysql数据备份
  • 排队接水--贪心
  • 数字温度传感器-DS18B20
  • 【算法】【算法杂谈】从M个数中等概率的选出n个数,保证每一个数的选中概率都是n/m(蓄水池算法)
  • vue3+ts+vite自适应项目——路由、layout布局
  • 数据库之约束、索引和事务
  • centos --libreoffice使用
  • Steam-V Rising 私人服务器架设教程
  • SpringBoot+Vue3实现登录验证码功能
  • spring2:创建和使用
  • 前端如何处理后端一次性传来的10w条数据?
  • Codeforces Round 867 (Div. 3)(A-G2)