每个游戏对象有且仅有一个 Transform 组件,Transform 组件保存了游戏对象的位置信息,用户可以通过操作 Transform 组件实现对游戏对象的平移、旋转、缩放等变换。每个 Script 组件需要继承 MonoBehaviour,MonoBehaviour 中有 Transform 属性。
1)获取当前游戏对象的 Transform 组件
1 2 3 4
| this.transform; gameObject.tramsform; GetComponent<Transform>(); gameObject.GetComponent<Transform>();
|
2)获取其他游戏对象的 Transform 组件
1 2 3
| GameObject.Find("name").transform GameObject.FindGameObjectWithTag("tag").transform transform.FindChild("name");
|
3)Transform 中属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| gameObject
name、tag
position、localPosition
eulerAngles、localEulerAngles、rotation、localRotation
localScale
right、up、forward
root、parent、hierarchyCount、childCount
camera、light
animation、audio、collider、renderer、rigidbody
|
说明:rotation 属性是一个四元数(Quaternion)对象,unity编辑器里显示的是欧拉角,虽然欧拉角直观易理解( (x,y,z) 以 x,y,z 为轴旋转对应的角度),但是会有可能发生万向节死锁,所以一般都是用四元数操作旋转的,可以通过如下方式将向量转换为 Quaternion:
注:
- 万向节死锁:绕某一个轴旋转可能会覆盖另一个轴的旋转,从而失去某一个维度的自由度(unity中创建一个游戏物体,rotation设置为(90,0,0),此时修改y和z的效果是一样的,都是绕着z轴旋转,y上的修改被覆盖了)
- 四元数:具体由一个标量(旋转角度)加一个向量(轴)组成,四元数主要是认为旋转是可以通过绕着某一个轴,旋转一定角度实现的,这里与欧拉角的区别就是不限制轴向量只能是unity的那三个轴方向。
1 2 3 4 5 6 7 8 9 10 11
| Quaternion q = new Quaternion(Mathf.Sin(30 * Mathf.Deg2Rad), 0, 0, Mathf.Cos(30 * Mathf.Deg2Rad)) Quaternion q2 = Quaternion.AngleAxis(60, new Vector3(1,0,0))
Vector3 relativePos = target.position - transform.position; Quaternion quaternion = Quaternion.LookRotation(relativePos);
Quaternion q3 = Quaternion.Euler(60,0,0)
Vector3 v = q3.eulerAngles
|
4)Transform 中方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Translate(Vector3 translation)
Rotate(Vector3 eulerAngles)
RotateAround(Vector3 point, Vector3 axis, float angle)
RotateAroundLocal(Vector3 point, Vector3 axis, float angle)
LookAt(transform)
GetType()
FindChild("name")
Find("name")
GetChild(index)
GetChildCount()
GetComponent<T>
GetComponentsInChildren<T>()
|
引用
https://blog.csdn.net/m0_37602827/article/details/125326051