8.2.1 SetFromToRotation方法:创建rotation实例
基本语法:public voidSetFromToRotation(Vector3 fromDirection, Vector3 toDirection);
功能说明:此方法用于创建一个从fromDirection到toDirection的rotation。例如,设有以下代码:
Quaternion q1 = Quaternion.identity;
q1.SetFromToRotation(v1,v2);
transform.rotation = q1;
则相当于将GameObject对象进行如下变换:首先将GameObject对象自身坐标系的x、y、z轴方向和世界坐标系的x、y、z轴方向一致,然后将GameObject对象自身坐标系中向量v1指向的方向旋转到v2方向。
提示:不可直接使用transform.rotation.SetFromToRotation(v1,v2)方式进行设置,只能将实例化的Quaternion赋值给transform.rotation。
实例演示:下面通过实例演示方法SetFromToRotation的使用。
using UnityEngine;
using System.Collections;
public class SetFromToRotation_ts : 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);
}
}
在这段代码中,首先声明了三个GameObject类型的变量A、B和C,然后在Update方法中对q1调用方法SetFromToRotation,并将改变后的q1赋给C.rotation,注意不可直接使用C.rotation.SetFromToRotation(A.position,B.position)来设置C的rotation。最后在Scene场景中绘制直线以便更好的观察。请读者自行运行程序在Scene视图中查看,在程序运行时可以试着更改A或B的位置查看物体C的状态变化。图8-1是一张运行时截图及注释:
8.3.4 FromToRotation方法:Quaternion变换
基本语法:public staticQuaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection);
功能说明:此方法用来创建一个从参数fromDirection到toDirection的Quaternion变换。此方法功能和实例方法SetFromToRotation (fromDirection : Vector3, toDirection : Vector3)相同,只是用法上有些不同,请参考实例演示。
实例演示:下面通过实例演示方法FromToRotation的使用。using UnityEngine;
using System.Collections;
public class FromToRotation_ts : MonoBehaviour
{
public Transform A, B, C, D;
Quaternion q1 = Quaternion.identity;
void Update()
{
//使用实例方法
//不可直接使用C.rotation.SetFromToRotation(A.position,B.position);
q1.SetFromToRotation(A.position, B.position);
C.rotation = q1;
//使用类方法
D.rotation = Quaternion.FromToRotation(A.position, B.position);
//在Scene视图中绘制直线
Debug.DrawLine(Vector3.zero, A.position, Color.white);
Debug.DrawLine(Vector3.zero, B.position, Color.white);
Debug.DrawLine(C.position, C.position + new Vector3(0.0f, 1.0f, 0.0f), Color.white);
Debug.DrawLine(C.position, C.TransformPoint(Vector3.up * 1.5f), Color.white);
Debug.DrawLine(D.position, D.position + new Vector3(0.0f, 1.0f, 0.0f), Color.white);
Debug.DrawLine(D.position, D.TransformPoint(Vector3.up * 1.5f), Color.white);
}
}
在这段代码中,首先声明了4个Transform变量用于指向场景中不同的对象,然后在Update方法中调用方法SetFromToRotation使得C的旋转角度与向量A和B之间的夹角相同,接着使用方法FromToRotation使得D的旋转角度与向量A和B之间的夹角相同,如图8-7所示。请读者自行运行程序在Scene视图而非Game视图中查看。程序运行时可以在Scene视图中试着拖动A或B的位置观察C和D的变化。
本文章摘自图书《Unity API解析》,源码下载地址:http://www.ituring.com.cn/book/1474