U3D Transform用法

Posted forever-ys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了U3D Transform用法相关的知识,希望对你有一定的参考价值。

  最近在学习unity3d,下面对Transform类做一个小结

一、常用属性和方法

  1.1 常用属性:

技术图片

用代码展示一下上面的一些属性,值得注意的是myCube是mySphere的父物体

using UnityEngine;

public class test : MonoBehaviour
{
    GameObject myCube;
    GameObject mySphere;
    
    void Start()
    {     
        myCube = GameObject.Find("Cube");
        mySphere = GameObject.Find("Sphere");
        Debug.Log("Cube position:" + myCube.transform.position);
        Debug.Log("Sphere position:" + mySphere.transform.position);
        Debug.Log("Sphere localPosition:" + mySphere.transform.localPosition);
        Debug.Log("eulerAngle" + myCube.transform.eulerAngles);
    }
}

结果如下:

技术图片

  

  position 和localPosition的区别:

  position是世界坐标中transform的位置,而localPosition是相对于父级变换的位置,即以父级物体的坐标为原点,它的相对位置。

  

  eulerAngles:欧拉角,当rotate小于中的各个值都小于360时,使用eulerAngles将可以正确的将rotate的值转换为欧拉角

   x、y、z角代表绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(这个顺序)。

  仅使用这个变量读取和设置角度为绝对值。不要递增它们,当超过角度360度,它将错误。使用Transform.Rotate替代。

using UnityEngine;

using System.Collections;

 

public class ExampleClass : MonoBehaviour {

    public float yRotation = 5.0F;

    void Update() {

        yRotation += Input.GetAxis("Horizontal");

        transform.eulerAngles = new Vector3(10, yRotation, 0);

    }

    void Example() {

        print(transform.eulerAngles.x);

        print(transform.eulerAngles.y);

        print(transform.eulerAngles.z);

    }

}

  不要分别设置欧拉角其中一个轴(例如: eulerAngles.x = 10; ),因为这将导致偏移和不希望的旋转。当设置它们一个新的值时,要同时设置全部,如上所示。

   

  translate:可以使物体向某方向移动物体多少距离。它有许多个重载

    void Translate(Vector3 translation, Space relativeTo = Space.Self): 移动transform在translation的方向和距离。

    如果relativeTo留空或者设置为Space.Self,移动被应用相对于变换的自身轴。(当在场景视图选择物体时,x、y和z轴显示)如果相对于Space.World 移动被应用相对于世界坐标系统。

using UnityEngine;

using System.Collections;

 

public class ExampleClass : MonoBehaviour {

    void Update() {

        transform.Translate(Vector3.forward * Time.deltaTime);

        transform.Translate(Vector3.up * Time.deltaTime, Space.World);

    }

}

 

 

    void Translate(float x, float y, float z, Space relativeTo = Space.Self):: 移动变换由x沿着x轴,y沿着y轴,z沿着z轴。 

using UnityEngine;

using System.Collections;

 

public class ExampleClass : MonoBehaviour {

    void Update() {

        transform.Translate(0, 0, Time.deltaTime);

        transform.Translate(0, Time.deltaTime, 0, Space.World);

    }

}

  还有一些这里就不一一例举了

 

  rotate:旋转

    transform.Rotate(0, 90, 0);//分别绕X,Y,Z轴旋转

    transform.Rotate(Vector3.right * Time.deltaTime);//以欧拉角旋转,顺序是ZXY,right是向X轴旋转1度

    transform.Rotate(0, 45, 0, Space.World);//绕世界坐标系的XYZ轴旋转,也就是其顶层父物体的坐标系,如果自身在顶层则没有区别,并不是绕点旋转,而是不按照自身的坐标系旋转

    transform.Rotate(Vector3.up, Space.Self);//绕自身坐标系旋转,这是默认的
    void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self):按照angle度围绕axis轴旋转变换。

 

  下面例子将使挂载脚本的物体绕Y轴不停地每次旋转45度

using UnityEngine;

public class MyRotate : MonoBehaviour
{
    void Update()
    {
        transform.Rotate(Vector3.up*Time.deltaTime, 45);
    }
}

  在代码中直接使用小写的transform代表的是挂载该脚本的物体的transform

  控制物体旋转的时候可能会弄不明白让它沿着哪个轴转,个人总结出了一个小技巧,即你在Rotate中使用了哪个轴就代表绕哪个轴转,上面的代码用的是Vector3.up,使用了包含Y轴的参数,所以是按Y轴旋转,当改成

Vector3.back则绕X轴旋转

 

二、Transform完整的内容(来自unity圣典)

  Variables 变量

childCount The number of children the Transform has.
该变换的子对象数量。
eulerAngles The rotation as Euler angles in degrees.
此旋转作为欧拉角度。
forward The blue axis of the transform in world space.
在世界空间坐标,变换的蓝色轴。也就是z轴。
hasChanged Has the transform changed since the last time the flag was set to ‘false‘?
此变换自从上次标识是否被设置为false了?
localEulerAngles The rotation as Euler angles in degrees relative to the parent transform‘s rotation.
旋转作为欧拉角度,相对于父级的变换旋转。
localPosition Position of the transform relative to the parent transform.
相对于父级的变换的位置。
localRotation The rotation of the transform relative to the parent transform‘s rotation.
该变换的旋转角度相对于父级变换的旋转角度。
localScale The scale of the transform relative to the parent.
相对于父级变换的缩放。
localToWorldMatrix Matrix that transforms a point from local space into world space (Read Only).
变换点的矩阵从局部坐标到世界坐标(只读)。
lossyScale The global scale of the object (Read Only).
该对象的整体缩放(只读)。
parent The parent of the transform.
该变换的父对象。
position The position of the transform in world space.
在世界空间坐标transform的位置。
right The red axis of the transform in world space.
在世界坐标空间,变换的红色轴。也就是x轴。
root Returns the topmost transform in the hierarchy.
返回最高层级的变换。
rotation The rotation of the transform in world space stored as a Quaternion.
在世界坐标空间,储存为四元数变换的旋转角度。
up The green axis of the transform in world space.
在世界坐标空间,变换的绿色轴。也就是Y轴。
worldToLocalMatrix Matrix that transforms a point from world space into local space (Read Only).
变换点的矩阵从世界坐标到局部坐标(只读)。

  Functions 函数

DetachChildren Unparents all children.、
所有子对象解除父子关系。
Find Finds a child by name and returns it.
通过名字查找子对象并返回它。
GetChild Returns a transform child by index.
通过索引返回一个变换的子对象。
GetSiblingIndex Gets the sibling index.
获取该对象的同级索引。
InverseTransformDirection Transforms a direction from world space to local space. The opposite of Transform.TransformDirection.
变换的方向从世界坐标转换到局部坐标。和Transform.TransformDirection相反。
InverseTransformPoint Transforms position from world space to local space. The opposite of Transform.TransformPoint.
变换位置从世界坐标到局部坐标。和Transform.TransformPoint相反。
InverseTransformVector Transforms a vector from world space to local space. The opposite of Transform.TransformVector.
变换一个向量从世界坐标空间到局部坐标空间。这个操作与Transform.TransformVector相反。
IsChildOf Is this transform a child of /parent/?
这个变换是parent的子对象?
LookAt Rotates the transform so the forward vector points at /target/‘s current position.
旋转此变换,让向前向量指向target的当前位置。(照相机的视口对准目标)
Rotate Applies a rotation of /eulerAngles.z/ degrees around the z axis, /eulerAngles.x/ degrees around the x axis, and /eulerAngles.y/ degrees around the y axis (in that order).
应用一个欧拉角的旋转角度,eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴(这样的顺序)。
RotateAround Rotates the transform about axis passing through point in world coordinates by angle degrees.
围绕世界坐标的point点的axis旋转该变换angle度。
SetAsFirstSibling Move the transform to the start of the local transfrom list.
移动该变换到此局部变换列表的开始。
SetAsLastSibling Move the transform to the end of the local transfrom list.
移动该变换到此局部变换列表的末尾。
SetParent Set the parent of the transform.
设置该变换的父级。
SetSiblingIndex Sets the sibling index.
设置同级对象的索引。
TransformDirection Transforms direction from local space to world space.
变换方向从局部坐标转换到世界坐标。
TransformPoint Transforms position from local space to world space.
变换位置从局部坐标到世界坐标。
TransformVector Transforms vector from local space to world space. \\变换一个向量从局部坐标空间到世界坐标空间。
Translate Moves the transform in the direction and distance of translation.
移动transform在translation的方向和距离。 

 

 

 

以上是关于U3D Transform用法的主要内容,如果未能解决你的问题,请参考以下文章

u3d使用horizontal移动物体

u3d Animator和脚本控制FPS骑士

U3D中的两个forward

U3D物体移动方式小结

U3D OnDrawGizmos

在U3D中 怎么获得模型旋转的角度的值?