【Unity】Transform—游戏物体的位置and位移、Vector基础

一、Vector3 基础

Vector3主要用来标识三维坐标系中的 一个点 或 一个向量
Vector3的本质是一个Unity提供好的结构体

现有:
image
Lesson6脚本的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson6 : MonoBehaviour
{
    void Start()
    {
        //Vector3的声明
        //方法一:不new (它是一个值类型,可以不new)
        Vector3 v;
        v.x = 10;
        v.y = 10;
        v.z = 10;

        //方法二:用无参构造声明
        Vector3 v2 = new Vector3();
        v2.x = 10;
        v2.y = 10;
        v2.z = 10;

        //方法三:它还有重载的有参构造函数
        //  不传z的值,z会默认为0
        Vector3 v3 = new Vector3(10, 10);
        //  传三个值,分别是x、y、z  (最常用的声明方式)
        Vector3 v4 = new Vector3(10, 10, 10);

        //Vector3的基本计算
        //运算后会有一个Vector3类型的返回值
        Vector3 v5 = new Vector3(3, 3, 3);
        Vector3 v6 = new Vector3(2, 2, 2);

        //1.加/减
        //计算结果为v5和v6的x、y、z分别相加/减
        print(v5 + v6);
        print(v5 - v6);

        //2.乘/除
        //v5的x、y、z分别 * 10
        print(v5 * 10);
        //v5的x、y、z分别 / 2
        print(v5 / 2);

        //常用的预设点/向量
        print(Vector3.zero); //对应点(0, 0, 0)
        //print(Vector3.one); //对应点(0, 0, 0)
        print(Vector3.right); //对应点(1, 0, 0)
        print(Vector3.left); //对应点(-1, 0, 0)
        print(Vector3.forward); //对应点(0, 0, 1)
        print(Vector3.back); //对应点(0, 0, -1)
        print(Vector3.up); //对应点(0, 1, 0)
        print(Vector3.down); //对应点(0, -1, 0)

        //补充:计算两个点之间的距离的方法
        //只需传入两个点,就能自动计算出两点的距离
        float f = Vector3.Distance(v5, v6);
    }
}

运行:
image

二、位置相关

现有:
image
Lesson6脚本的代码:

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

public class Lesson6 : MonoBehaviour
{
    void Start()
    {
        //1.相对世界坐标系的位置(与父GameObject对象无关)
        print(this.transform.position);

        //2.相对于父GameObject对象的位置
        //  如果想要以Inspector面板上的坐标数值为准来进行设置
        //  那一定是通过LocalPosition来进行设置
        print(this.transform.localPosition);
        //补充:他们两个有两种情况会出现面板数值一样
        //  1.对象没有父对象
        //  2.父对象的坐标 就是世界坐标系(0, 0, 0)点

        //3.位置的赋值
        //注意:无法单独对x、y、z其中一个值进行修改,只能使用Vector3进行整体修改
        //this.transform.position.x = 10; // X
        this.transform.position = new Vector3(10, 10, 10); // √
        //  对然不能直接改transform的x、y、z,但是Vector的是可以直接改的
        //  用Vector把位置取出来,
        Vector3 v = this.transform.localPosition;
        //  然后再修改
        v.x = 15;

        //4.得到对象当前的朝向相关
        //    1.对象当前的面朝向
        print(this.transform.forward);
        //    2.对象当前头顶的朝向
        print(this.transform.up);
        //    3.对象当前的右手边朝向
        print(this.transform.right);
        //    4.back、left、down同理...
    }
}

三、位移相关

坐标系下的位移计算公式:路程 = 方向 * 速度 * 时间
(因为是在多为坐标系中移动,所以要乘一个方向)

现有:
image
Lesson6脚本的代码:

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

public class Lesson6 : MonoBehaviour
{
    void Update()
    {
        //方式一:自己手动计算
        //用当前的位置 + 我要动多长距离 得出最终所在的位置
        //这样写 对象会始终朝自身坐标系的正前方移动
        this.transform.position += this.transform.forward * 1 * Time.deltaTime;  //(方向  * 速度 * 时间)
        //这样写 对象会朝着世界坐标系的前方(z轴正方向)移动
        this.transform.position += Vector3.forward * 1 * Time.deltaTime;

        //方法二:使用API计算
        //一个专门管位移的方法:Translate
        //参数1 表示位移了多少 (方向 * 速度 * 时间)
        //参数2 表示相对坐标系 (不写默认相对本地坐标系)
        //1.这样写 始终朝着世界坐标系的 Z轴移动
        //(因为Vector3.forward得到的仅仅是个方向(0, 0, 1)而已)
        this.transform.Translate(Vector3.forward * 1 * Time.deltaTime, Space.World);
        //2.这样写 始终朝着自己的面朝想移动 (常用)
        //(因为this.transform.forward得到的是世界坐标系下对象自己的面朝向)
        this.transform.Translate(this.transform.forward * 1 * Time.deltaTime,  Space.World);
        //3.这样写 始终朝着自己的面朝想移动 (常用)
        this.transform.Translate(Vector3.forward * 1 * Time.deltaTime, Space.Self);
        //4.这样写 不对!! X
        //(因为this.transform.forward得到的是世界坐标系下对象自己的面朝向,而参数2又是自己的坐标系,两者重叠后 方向将错乱)
        this.transform.Translate(this.transform.forward * 1 * Time.deltaTime, Space.Self);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值