Transform组件(2021.3.4f1c1)

UnityTransform组件详解:属性、方法与应用,
本文详细介绍了Unity引擎中Transform组件的基础属性(如位置、旋转、缩放等)、方法(如定位、旋转、变换向量等)以及进阶内容,涵盖了组件的使用、坐标系统和矩阵操作。

获取组件引用

Transform组件由于很基础,所以只要继承了MonoBeHaviour,默认就有transform变量引用了该组件.

transform /* = gameObject.getComponet<Transform>() */;

基础

属性

public Vector3 position;/*坐标*/
public Vector3 localPosition;/*相对于父级对象的坐标*/
public Quaternion rotation;/*存储对象在世界坐标下的旋转四元数,它角度不会超过180,使用它来旋转对象可能和预期结果大不相同*/
public Quaternion localRotation;/*相对于父级对象的旋转角度*/
public Vector3 localScale;/*相对于父级对象的缩放比例*/
public Transform parent;/*返回父级对象的Transform引用*/
public Transform root;/*返回根对象的Transform引用,自己就是根就返回自己*/
public int childCount;/*子对象计数(非活跃也计数)*/
public bool hasChanged;/*判断从上次赋值false后是否有改变,即使从A点移动到A点依然视为改变*/
public Vector3 right;/*在对象的红色(X)轴上的位置,呈现在摄像机里的位置会与旋转角度有关*/
public Vector3 up;/*在对象的绿色(Y)轴上的位置,呈现在摄像机里的位置会与旋转角度有关*/
public Vector3 forward;/*在对象的蓝色(Z)轴上的位置,呈现在摄像机里的位置会与旋转角度有关*/

方法

public Transform Find(strign n);/*返回对应名称的子对象的transform*/
public Transform GetChild(int index);/*返回对应索引的子对象的transform*/
public int GetSiblingIndex();/*返回对象在父级对象下的索引*/
public bool IsChildOf(Transform parent);/*判断传入的对象是否是父级对象*/
public void LookAt(Transform target);
public void LookAt(Transform target, Vector3 worldUp = Vector3.up);
public void LookAt(Vector3 worldPosition);
public void LookAt(Vector3 worldPosition, Vector3 worldUp = Vector3.up);/*使自己对象的forward指向参数对象或坐标,使自己对象的worldUp和世界坐标正Y轴同向或指向参数坐标*/
public void Rotate(Vector3 eulers);
public void Rotate(Vector3 axis, float angle);
public void Rotate(Vector3 eulers, Space relativeTo = Space.Self);
public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);
public void Rotate(float xAngle, float yAngle, float zAngle);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);/*以各种方式旋转游戏对象,旋转通常以欧拉角提供,而不是四元数,也可指定3轴的旋转和自定义轴的旋转角度,可以在世界轴或局部轴上指定旋转。*/
public void RotateAround(Vector3 point, Vector3 axis, float angle);/*绕指定点和方向旋转*/
public void SetParent(Transform p);
public void SetParent(Transform parent, bool worldPositionStays);/*修改父对象,真值表示世界坐标不变,假值本地坐标不变*/
public void Translate(Vector3 translation);
public void Translate(Vector3 translation, Space relativeTo = Space.Self);
public void Translate(float x, float y, float z);
public void Translate(float x, float y, float z, Space relativeTo = Space.Self);
public void Translate(Vector3 translation, Transform relativeTo);
public void Translate(float x, float y, float z, Transform relativeTo);/*向量移动,可指定坐标轴*/

 进阶内容

 属性

public Vector3 eulerAngles;/*欧拉旋转角度,要注意物体旋转到当前状态的方法并不一定如你预期一样(可能你让物体转动-90度,它保存为旋转270度),所以读取的值并不一定是你赋予它的值*/
public Vector3 localEulerAngles;/*相对于父级对象的欧拉旋转角度*/
public int hierarchyCapacity;/*用于存储所有深层子对象层次结构的数据的大小上限,当数据超出范围将调整大小,将容量设置为略大于最大预期大小的值可以减少内存使用并提高Transform的性能*/
public Matrix4x4 localToWorldMatrix;/*将一个点从局部空间转换为世界空间的矩阵(只读)。不要使用这个矩阵来设置着色器参数或执行与渲染相关的计算*/
public Matrix4x4 worldToLocalMatrix;/*将一个点从世界坐标转换为局部坐标的矩阵(只读)。不要使用这个矩阵来设置着色器参数或执行与渲染相关的计算*/
public Vector3 lossyScale;/*对象的全局比例,Scale不能方便的表示父级有变换的比例,这个值更理想*/

方法

public void DetachChildren();/*取消所有子对象的父级,原本的子对象并没有销毁*/

public void GetPositionAndRotation(out Vector3 Position, out Quaternion Rotation);/*获取Transform组件在世界坐标的位置和旋转*/
public void GetLocalPositionAndRotation(out Vector3 localPosition, out Quaternion localRotation);/*获取Transform组件在本地空间中的位置和旋转(即相对于其父转换)*/

public Vector3 TransformDirection(Vector3 direction);
public Vector3 TransformDirection(float x, float y, float z);/*将方向从局部坐标转换为世界坐标*/
public void TransformDirections(Span<Vector3> directions);
public void TransformDirections(ReadOnlySpan<Vector3> directions, Span<Vector3> transformedDirections);/*将方向从局部坐标转换为世界坐标,用转换后的值覆盖原始值或保存在第二组变量*/
public Vector3 InverseTransformDirection(Vector3 direction);
public Vector3 InverseTransformDirection(float x, float y, float z);/*将一个方向向量从世界坐标转换到局部坐标,此操作不受变换的比例或位置的影响.变换后的向量与原向量的长度相同。*/
public void InverseTransformDirections(Span<Vector3> directions);
public void InverseTransformDirections(ReadOnlySpan<Vector3> directions, Span<Vector3> transformedDirections);/*将多个向量从世界空间转换到局部空间,用转换后的值覆盖原始值或保存在第二组变量*/

public Vector3 TransformPoint(Vector3 position);
public Vector3 TransformPoint(float x, float y, float z);
public Vector3 TransformPoints(Span<Vector3> positions);
public void TransformPoints(ReadOnlySpan<Vector3> positions, Span<Vector3> transformedPositions);
public Vector3 InverseTransformPoint(Vector3 position);
public Vector3 InverseTransformPoint(float x, float y, float z);/*将位置从世界空间转换到局部空间,受比例影响*/
public Vector3 InverseTransformPoints(Span<Vector3> positions);
public void InverseTransformPoints(ReadOnlySpan<Vector3> positions, Span<Vector3> transformedPositions);/*将多个位置从世界空间转换到局部空间*/

public Vector3 TransformVector(Vector3 vector);
public Vector3 TransformVector(float x, float y, float z);/*将向量从世界坐标变换到局部坐标,不受位置影响,但受比例影响*/
public void TransformVectors(Span<Vector3> vectors> transformedVectors);
public void TransformVectors(ReadOnlySpan<Vector3> vectors, Span<Vector3> transformedVectors);
public Vector3 InverseTransformVector(Vector3 vector);
public Vector3 InverseTransformVector(float x, float y, float z);/*将向量从世界坐标变换到局部坐标,不受位置影响,但受比例影响*/
public void InverseTransformVectors(Span<Vector3> vectors> transformedVectors);
public void InverseTransformVectors(ReadOnlySpan<Vector3> vectors, Span<Vector3> transformedVectors);/*将多个向量从世界坐标变换到局部坐标*/

public void SetAsFirstSibling();/*将自己排在父对象下的子对象索引首位*/
public void SetAsLastSibling();/*排在末尾*/
public void SetSiblingIndex(int index);/*自定义序号*/

public void SetPositionAndRotation(Vector3 position, Quaternion rotation);/*设置旋转和位置*/
public void SetLocalPositionAndRotation(Vector3 localPosition, Quaternion localRotation);/*设置本地的旋转和位置*/

 继承的属性

public GameObject gameObject;/*游戏对象*/
public string tag;/*对象tag*/
public Transform transform;/*对象的Transform组件*/
public string name;/*对象的名称*/
public HideFlags hideFlags;/*对象隐藏、保存在场景中或由用户修改的状态*/

继承的方法 

public void BroadcastMessage(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);
public void BroadcastMessage(string methodName, SendMessageOptions options);/*调用一个函数,可以传参和设置是找不到接受消息对象时是否报错*/

public bool CompareTag(string tag);/*检测对象tag是否与参数一致*/

public T GetComponent();/*获得匹配的一个组件的引用*/
public Component GetComponent(Type type);/*非泛型版本*/
public Component GetComponent(string type);/*字符串版本*/
public T GetComponentInChildren(bool includeInactive = false);/*获取对象及子对象类型匹配的第一个组件,默认不检索非活动对象*/
public T GetComponentInParent(bool includeInactive = false);/*在对象及其父对象上检索*/
public T[] GetComponents();/*获得匹配的所有组件的引用列表*/
public void GetComponents(List<T> results);/*列表大小将改变切所有值被覆盖*/
public T[] GetComponentsInChildren(bool includeInactive);
public T[] GetComponentsInParent(bool includeInactive);

public void SendMessage(string methodName);
public void SendMessage(string methodName, object value);
public void SendMessage(string methodName, object value, SendMessageOptions options);
public void SendMessage(string methodName, SendMessageOptions options);/*在对象的每个MonoBehaviour上调用methodName方法,可以设置是找不到接受消息对象时是否报错,信息不会被发送到不活跃的对象*/
public void SendMessageUpwards(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);/*直到根的父对象都会收到消息*/
public bool TryGetComponent(out T component);/*将匹配的组件或者null放进参数,并返回匹配结果*/
public int GetInstanceID();/*返回对象的实例ID*/
public string ToString();/*返回对象的name*/

静态方法 

public static void Destroy(Object obj, float t = 0.0F);/*立即或延时销毁对象或组件*/
public static void DestroyImmediate(Object obj, bool allowDestroyingAssets = false);/*立即销毁对象,不可撤销的删除资产,应该不使用此函数*/
public static void DontDestroyOnLoad(Object target);/*在根路径的函数下调用,切换Scene时不会销毁target对象*/

public static T FindObjectOfType();
public static T FindObjectOfType(bool includeInactive);
public static Object FindObjectOfType(Type type);
public static Object FindObjectOfType(Type type, bool includeInactive);/*返回匹配类型的第一个对象*/

public static Object[] FindObjectsOfType(Type type);
public static Object[] FindObjectsOfType(Type type, bool includeInactive);
public static T[] FindObjectsOfType(bool includeInactive);
public static T[] FindObjectsOfType();/*返回安InstanceID排序的所有类型匹配的对象数组*/

/********************************下面函数未能在脚本里调用********************************/
public static T FindFirstObjectByType();
public static T FindFirstObjectByType(FindObjectsInactive findObjectsInactive);
public static Object FindFirstObjectByType(Type type);
public static Object FindFirstObjectByType(Type type, FindObjectsInactive findObjectsInactive);/*返回场景里匹配的第一个活动对象下的组件,也可以选择包含非活跃*/

public static T FindAnyObjectByType();
public static T FindAnyObjectByType(FindObjectsInactive findObjectsInactive);
public static Object FindAnyObjectByType(Type type);
public static Object FindAnyObjectByType(Type type, FindObjectsInactive findObjectsInactive);/*在场景里查找匹配的任一活动对象下的组件,也可以选择包含非活跃*/

public static Object[] FindObjectsByType(Type type, FindObjectsSortMode sortMode);
public static Object[] FindObjectsByType(Type type, FindObjectsInactive findObjectsInactive, FindObjectsSortMode sortMode);
public static T[] FindObjectsByType(FindObjectsSortMode sortMode);
public static T[] FindObjectsByType(FindObjectsInactive findObjectsInactive, FindObjectsSortMode sortMode);/*返回场景里匹配的活动对象下的组件,也可以选择包含非活跃,还能排序*/

运算符

bool/*将组件视为一个逻辑值,true表示有挂载*/
!=/*判断是否为不相同组件*/
==/*判断是否为相同组件*/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值