当前位置:首页 » 《关于电脑》 » 正文

【unity】【C#】变换组件 Transform 和 V3结构体

12 人参与  2024年10月23日 08:01  分类 : 《关于电脑》  评论

点击全文阅读


文章目录

如何获得其它物件的 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;//缩放

这串代码写入后,这个立方体会不断一边旋转一边缩放


点击全文阅读


本文链接:http://zhangshiyu.com/post/175892.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1