织梦如何做淘宝客网站,黑帽seo培训大神,广州天河区租房,网上卖东西哪个平台好Quaternion类又称四元数#xff0c;由x、y、z和w这4个分量组成#xff0c;属于struct类型。在Unity中#xff0c;用Quaternion来存储和表示对象的旋转角度。Quaternion的变换比较复杂#xff0c;对于GameObject一般的旋转及移动#xff0c;可以用Transform中的相关方法实现…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);}
}