unity-Transform.TransformDirection的使用

发布于:2023-01-18 ⋅ 阅读:(415) ⋅ 点赞:(0)

在理解TransformDirection之前我们首先要知道两个东西,分别是自身坐标系和世界坐标系

自身坐标系和世界坐标系

场景中的物体有两个坐标系,一个是自身坐标系,也叫本地坐标系,另外一个是世界坐标系

比如说我们在场景中创建一个cube,把它的参数reset。在Scene窗口那里

 红色框框那里就可以修改物体所在的坐标系

 Global就是世界坐标系,Local就是自身坐标系,我们当前选择的是自身坐标系,我们切换世界坐标系看看,发现cube的坐标轴没有任何变化。但是我们回到自身坐标系,我们将cube的x轴的旋转值设置成90,然后再切换世界坐标系就会发现,两个坐标系的坐标轴不一样。

这是因为世界坐标系不会变,x轴指哪就一直指哪,但是自身坐标系不一样,自身坐标系会随着自身的旋转而改变坐标系。

在了解这两个坐标系之后,我们就可以通过这两个坐标系来讲解一下TransformDirection的使用

Transform.TransformDirection

作用:将相对 “当前游戏对象” 的坐标转化为基于世界坐标系的坐标(当自身坐标系转化到世界坐标系)

演示

默认是在自身坐标系。场景中添加一个cube,将它的x轴的Rotation设置成90,然后我们回到世界坐标系发现两个坐标系的z轴不一样,我们通过这两个坐标系来演示一下TransformDirection的作用

 创建一个C#脚本,将这个脚本拖给Main Camera,然后我们通过这个脚本演示一个它的作用

首先,代码是这样的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public GameObject cube;
    private void Update()
    {
        cube.transform.Translate(Vector3.forward);  
    }
}

这个vector.forward表示自身坐标系下的z轴方向,所以这个代码的意思就是让cube沿着自身坐标系下的z轴方向移动

然后改变一下上面的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public GameObject cube;
    private void Update()
    {
        cube.transform.Translate(cube.transform.TransformDirection(Vector3.forward));  
    }
}

 这个经过TransformDirection之后就变成了世界坐标系的z轴了,这个代码的意思就是让cube沿着世界坐标系的z轴移动

因为开始两个坐标系的坐标轴就不一样,自然这两次cube的移动方向也不一样,由此就可以看出TransformDirection的作用就是将自身坐标系转到世界坐标系,比如自身坐标系的z轴,经过转化之后就变成了世界坐标系的z轴。

如有错漏之处,敬请指正!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到