Transform 变换,是场景中最常打交道的类,用于控制物体的位移,旋转,缩放等功能。
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
function
Transform
Class, inherits from Component, IEnumerable
Position, rotation and scale of an object.
控制物体的位置,旋转和缩放。
Every object in a scene has a Transform. It's used to store and manipulate the position, rotation and scale of the object. Every Transform can have a parent, which allows you to apply position, rotation and scale hierachically. This is the hierarchy seen in the Hierarchy pane. They also support enumerators so you can loop through children using:
// Movesall transform children 10 units upwards!
for (var child: Transform in transform) {
child.position += Vector3.up *10.0;
}
for (var child: Transform in transform) {
child.position += Vector3.up *10.0;
}
每一个场景中的物体都有Transform这个类,他是用来储存和处理物体的位移,旋转和缩放的。每一个Transform都可以有一个父物体,这可以让你得到下游节点的位移旋转和缩放。这个层次结构关系可以从Hierarchy面板中看到。他还支持enumerators,以使用循环来遍寻所有的子节点。
Variables
position: Vector3 物体在世界坐标中的位置。 transform.position=Vector3(10,10,10)//把物体放到(x=10,y=10,z=10)的位置
localPosition: Vector3 相对位置,或自身位置,物体相对于父物体的位置。
eulerAngles: Vector3 轴向旋转角度,相对于世界坐标。单位为度(°)
localPosition: Vector3 相对轴向旋转角度,或自身的旋转角度,物体相对于父物体的旋转。一般使用和处理物体的旋转角度时都会使用到这个数值。
right: Vector3 物体自身的红色轴向(X轴)在世界坐标中所指向的位置。注意在maya中x轴指向物体的左边,而unity中的x轴则指向物体的右边。rigidbody.velotity=transform.right*moveSpeed;//向物体的右侧以moveSpeed的速度移动
up: Vector3 物体自身的绿色轴向(Y轴)在世界坐标中所指向的位置。
forward: Vector3 物体自身的蓝色轴向(Z轴)在世界坐标中所指向的位置。
rotation: Quaternion 以四元数来表达的物体自身的旋转。四元数可以快速的处理物体的旋转方向的计算,搭配Quaternion可以用来计算各种需要的旋转方案。具体应用方法参见Quaternion篇
localRotation: Quaternion 相对于父物体的用四元数来表达的旋转。
localScale: Vector3 物体相对于父物体的缩放
parent: Transform 物体的父物体。 如果没有则返回null。 如果改变父物体的位置,旋转和缩放,会同时影响并改变子物体的位置,旋转和缩放,但是保持相对位置,相对旋转和相对缩放。
worldToLocalMatrix: Matrix4x4 一个表达从世界坐标到相对坐标位置的四维矩阵,Read Only。 如果你对矩阵不是很了解,请使用Transform.InverseTransformPoint。
LocalToWorldMatrix: Matrix4x4 一个表达从相对坐标到世界坐标位置的四维矩阵,Read Only。 如果你对矩阵不是很了解,请使用Transform.TransformPoint。
root: Transform 返回物体的最高层的父物体。如果物体本身就是最高层,则返回物体本身。
childCount: Int 返回物体的子物体数量。
lossyScale:Vector3 返回物体相对于世界坐标的缩放值。 Read Only。没什么用的一个属性,当子物体被旋转后也不是特别精确,也不推荐大家用。如果想要计算物体的世界坐标缩放,最好自己写计算公式。
Functions
1)Translate, 用来移动物体的函数,非常常用的一个函数。
function Translate (translation : Vector3, relativeTo : Space = Space.Self) : void
把物体向translation方向移动,距离为translation.magnitude。 relativeTo表示这个移动的参考坐标系。
function Translate (x : float, y : float, z : float, relativeTo : Space = Space.Self) : void
同上
function Translate (translation : Vector3, relativeTo : Transform) : void
如果relativeTo 不是null, 则以目标物体relativeTo的自身轴向作为参考坐标系。
function Translate (x : float, y : float, z : float, relativeTo : Transform) : void
同上
脚本:
var speed=30;
//将物体以30米每秒的速度向前移动。
trasform.Translate(Vector3.forward*speed*Time.deltaTime);
2)Rotate,用来旋转物体的函数,非常常用,在知道需要旋转的角度的情况下。如果要让物体旋转到指定位置,需要搭配Quaternion来使用。
function Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void
旋转eulerAngles度(3个轴向分别旋转),以relativeTo为参考坐标系
function Rotate (xAngle : float, yAngle : float, zAngle : float, relativeTo : Space = Space.Self) : void
同上
function Rotate (axis : Vector3, angle : float, relativeTo : Space = Space.Self) : void
以axis为轴旋转angle度,以relativeTo为参考坐标系
3)RotateAround 让物体以某一点为轴心成圆周运动。
function RotateAround (point : Vector3, axis : Vector3, angle : float) : void
让物体以point为中心,绕axis为轴向旋转angle度。 保持原来与point的距离。
4)LookAt 让物体的z轴看向目标物体
function LookAt (target : Transform, worldUp : Vector3 = Vector3.up) : void
让物体的z轴看向target的位置,并以worldUp为y轴指向方向。
5)TransformDirection
function TransformDirection (direction : Vector3) : Vector3
返回以物体自身为坐标轴的向量direction在世界坐标中的朝向向量。
function TransformDirection (x : float, y : float, z : float) : Vector3
同上
6)InverseTransformDirectio n
function InverseTransformDirectio n (direction : Vector3) : Vector3
function InverseTransformDirectio n (x : float, y : float, z : float) : Vector3
与TransformDirection相反,从世界坐标转换到自身相对坐标。
7)TransformPoint
8)InverseTransformPoint
9)DetachChildren
function DetachChildren () : void
把自身所有的子物体的父物体都设成世界,也就是跟自己的所有子物体接触父子关系。
10)Find
function Find (name : string) : Transform
找到一个名字是name的物体并返回
如果没有找到则返回null。 如果字符串被/隔离,函数则会像文件路径一样逐级下查。
// Themagical rotating finger
function Update() {
aFinger = transform.Find("LeftShoulder/Arm/Hand/Finger");
aFinger.Rotate(Time.deltaTime*20,0, 0);
}
function Update() {
aFinger = transform.Find("LeftShoulder/Arm/Hand/Finger");
aFinger.Rotate(Time.deltaTime*20,0, 0);
}
11)IsChildOf
function IsChildOf (parent : Transform) : bool
如果物体是parent的父子层级关系下的一员,返回true;
原文:http://blog.sina.com.cn/s/blog_4a2183a60100niet.html