【unity】【C#】变换组件 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;//缩放

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

  • 42
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值