unity的Transfom杂谈笔记

朝向功能

主要是一个物体朝向另一个物体,这样可以获得该物体的旋转,可以实现你想要的功能。
物体朝向示意图
当移动Cube2时,cube1始终发生转向朝向他

 void Update()
    {
        transform.LookAt(cube2.transform);
    }

运用Transfom.LookAt(transfom参数),该函数主要是另一个物体。

获取面板中Transfom.Rotation的x,y,z的值

初始值

获得值

 private float xRotation;
    private float yRotation;
    private float zRotation;
    void Start()
    {
        xRotation = transform.rotation.eulerAngles.x;
        yRotation = transform.rotation.eulerAngles.y;
        zRotation = transform.rotation.eulerAngles.z;
        Debug.Log(xRotation);
        Debug.Log(yRotation);
        Debug.Log(zRotation);
    }

这里用到transform.rotation.eulerAngles,主要就是获取当前物体的欧拉角

改变面板上面的xyz会有效果

X

在这里插入图片描述
x变大,物体就会往下旋转,身体结构来说就是往下趴

Y

在这里插入图片描述
Y变大会想物体的右边旋转

Z

在这里插入图片描述

Z越大,会正身围绕着正前方逆时针旋转

常见的rotationAPI

transform.rotation = Quaternion.Euler(90f, 0, 0);

这里是直接进行对rotation的x,y,z进行赋值,操作空间还是挺大的。通常是直接固定方向,可以一个物体进行来回移动,直接修改rotation,再让物体向前运动。

transform.Rotate

1.void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);
应用一个欧拉角的旋转角度,eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴(这样的顺序)。

 transform.Rotate(Vector3.up * RotatSpeed * Time.deltaTime, Space.World);

根据一个旋转方向角度进行旋转,后面的Space.World根据世界坐标来旋转。(我设置的RotatSpeed=90)。
效果如下:
效果图

Transfom坐标

世界坐标

当我们获取物体的坐标时,总是会写着一行代码

Debug.Log(this.gameObject.transform.position);

可是这里的坐标时物体对应的世界坐标。并不一定是自身面板的坐标。
在这里插入图片描述
我先设置它的世界坐标
在这里插入图片描述
这是运行结果,返回它的世界坐标。

自身面板的坐标

在这里插入图片描述
添加一个空物体,将cube作为空物体的子物体。
在这里插入图片描述
此时的cube面板的坐标并不是原来的面板坐标。而是以空物体为原点的坐标。
此时我们再加一句代码

Debug.Log(this.gameObject.transform.position);
Debug.Log(this.gameObject.transform.localPosition);

在这里插入图片描述
运行结果发现,第一个还是世界坐标,没有发生变化,第二个输出的就是cube的面板的坐标信息。
LocalPosition的坐标可以看出,物体面板上面的坐标是和父物体的左边有关的。默认物体的父物体是世界,所以原点就是世界坐标的(0,0,0)圆心,当添加父物体后就会发生以父物体为原点。

物体的朝向

我们要移动时通常要控制人物的朝向。
所以有时会用这样的代码

	void Update()
    {
        transform.position = transform.position+ Vector3.right* 5f * Time.deltaTime;
    }

在这里插入图片描述
看起来一切正常。
我们旋转一下cube
在这里插入图片描述
让他变成这样
此时我们再运行一下
在这里插入图片描述
此时他还是这样运行,我们想让他根据物体的右方向运行,这明显不是我们想要的结果。
所以就要换脚本

transform.position = transform.position+ transform.right* 5f * Time.deltaTime;

在这里插入图片描述
这样就成为我们想要的结果,以物体的右方向运动,而不是以世界坐标的方向运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值