文章目录
如何获得其它物件的 Transform通过 Transform 调用子类通过 V3 结构体改变对象位置
注意看代码的注释块
如何获得其它物件的 Transform
我们先按下述代码用 Transform 方法创建一个 emptyTform ,使得该对象能够获得其他物件 Transform 的机会
using System.Collections;using System.Collections.Generic;using UnityEngine;public class EP20_01_Transform : MonoBehaviour{ public Transform emptyTform;//emptyTform为自命名 // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { }}
保存代码后,再将想要获取 Transform 值的物件直接拖拽到这里
我们尝试通过 Transform 获取一下这个对象的名字,在 start 里加上语句
void Start(){ Debug.Log(emptyTform.name);}
保存后去启动unity,成功打印!
同理我们再在 start 里加上语句
Debug.Log(emptyTform.position);
保存后调用,也成功地调用出了这个对象的位置
关于第二个旋转角度 rotation 我们有两种常见的表示方法,同样将这两句代码按顺序写入 start
Debug.Log(emptyTform.rotation);//表示旋转角度 - 4位数 Debug.Log(emptyTform.eulerAngles);//表示旋转角度 - 3位数
然后缩放 scale 的输出同理,仅一种,不演示了
Debug.Log(emptyTform.localScale);//表示缩放
通过 Transform 调用子类
child拼太快,都错了,谅解…
关于子类物体的 Transform 调用,就不需要将其拖进该对象 Transform 方法中
这里在 start 语句中写入语句,尝试调用子类的名字
Debug.Log(transform.GetChild(0).name);//0表示索引,即子类的第n-1个//这里调用一下子类的名字
成功,同理 GetChild(索引) 的方法同样适用于其他子类对象的调用
调用子类还有第二种方法,在 start 语句中写入语句(ctrl + D 复制)
Debug.Log(transform.Find("chlid (3)").name);//第二种找子类的方法
这里需要注意的是字符串的查找十分严格,必须与子类对象名一模一样才能查找到,否则报错
保存后调试,成功
不仅如此,我们还可以通过子对象去调用父类对象
Debug.Log(transform.Find("chlid (3)").parent);//找父类对象
注意点跟上面一样,不过多赘述
补充一点: Transform 还可以调用对象的组件,而且可以进行更改
我们在 chlid (2) 里创建上 新组件 SpriteRenderer
通过语句
transform.Find("chlid (2)").GetComponent<SpriteRenderer>().flipY = true;
成功
通过 V3 结构体改变对象位置
相当于自定义一个向量,比如下面的代码,我们将鼠标放在 Vector3 上点击 F12 可以转到反汇编,发现 Vector3 是有三个值,分别赋值
Vector3 vector3 = new Vector3(); vector3.x = 1; vector3.y = 2; vector3.z = 3; Debug.Log(vector3);
成功打印出来我们自定义的向量值
但是这种自定义一个变量的方法肯定是无用的,但是我们可以通过向量来改变这个对象的位置
Debug.Log(transform.position);//打印原先对象的位置 transform.position = new Vector3(0,0,0); Debug.Log(transform.position);//打印改变后的位置
为了使这种变化更直观,我们在代码的开头为这个对象 EP20_01_Transform 创建一个新的 Transform
public Transform cubeTform;
建立一个新对象 cube 拖拽进 EP20_01_Transform 的新的 Transform 中
并在 Update 中加入如下代码
cubeTform.position = cubeTform.position + new Vector3(0,0,0.1f); //每一帧这个对象的z坐标加1(向后) //等价于 cubeTform.position += new Vector3(0,0,0.1); Debug.Log(cubeTform.position);//打印每帧改变后的位置
因为运动不方便以静图的形式表示,所以这里我们打印每一帧的位置,如果你有一同操作,也能够发现这里的立方体以肉眼可见的速度迅速向后退去
如果你觉得运行速度太快,不想以帧为单位,换为秒的话,只需要在V3结构体后乘上 Time.deltaTime
cubeTform.position = cubeTform.position + new Vector3(0, 0, 0.1f) * Time.deltaTime; //每一秒这个对象的z坐标加1(向后)
这是改变位置,同理我们可以通过V3结构体对对象进行角度的变化或者缩放
cubeTform.eulerAngles += new Vector3(0, 90, 0) * Time.deltaTime;//变换角度 cubeTform.localScale += new Vector3(1f, 0, 0) * Time.deltaTime;//缩放
这串代码写入后,这个立方体会不断一边旋转一边缩放