赞
踩
Vector3主要用来标识三维坐标系中的 一个点 或 一个向量
Vector3的本质是一个Unity提供好的结构体
现有:
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); } }
运行:
现有:
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同理... } }
坐标系下的位移计算公式:路程 = 方向 * 速度 * 时间
(因为是在多为坐标系中移动,所以要乘一个方向)
现有:
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); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。