Unity—Transform类-position

概要

游戏对象(GameObject)位移、旋转、缩放、父子关系、坐标转换等相关操作都由它处理

是Unity提供的极其重要的类

Vector3

Vector3主要是用来表示三维坐标系中的 一个点 或者一个向量

申明

Vector3 v = new Vector3();

v.x = 10;

v.y = 10;

v.z = 10;

只传xy 默认z是0

Vector3 v2 = new Vector3(10, 10);

一步到位

Vector3 v3 = new Vector3(10, 10, 10);

Vector3 v4;

v4.x = 10;

v4.y = 10;

v4.z = 10;

Vector的基本计算

    • * /

Vector3 v1 = new Vector3(1, 1, 1);

Vector3 v12 = new Vector3(2, 2, 2);

对应位置相加相减

print(v1 + v12);

print(v1 - v12);

print(v1 * 10);

print(v12 / 2);

常用

print(Vector3.zero); 000

print(Vector3.right); 100

print(Vector3.left); -100

print(Vector3.forward); 001

print(Vector3.back); 00-1

print(Vector3.up); 010

print(Vector3.down); 0-10

Vector3.Distance(v1, v12)

常用的一个方法

//计算两个点之间的距离的方法

print(Vector3.Distance(v1, v12));

Transform

相对世界坐标系

this.gameObject.transform

通过position得到的位置 是相对于 世界坐标系的 原点的位置

可能和面板上显示的 是不一样的

因为如果对象有父子关系 并且父对象位置 不在原点 那么 和面板上肯定就是不一样的

print(this.transform.position);

相对父对象

这两个坐标 对于我们来说 很重要 如果你想以面板坐标为准来进行位置设置

那一定是通过localPosition来进行设置的

print(this.transform.localPosition);

他们两个 可能出现是一样的情况

1.父对象的坐标 就是世界坐标系原点0,0,0

2.对象没有父对象

注意:位置的赋值不能直接改变x,y,z 只能整体改变

不能单独改 x y z某一个值

//this.transform.position.x = 10;

this.transform.position = new Vector3(10, 10, 10);

this.transform.localPosition = Vector3.up * 10;

如果只想改一个值x y和z要保持原有坐标一致

//1.直接赋值

this.transform.position = new Vector3(19, this.transform.position.y, this.transform.position.z);

//2.先取出来 再赋值

//虽然不能直接改 transform的 xyz 但是 Vector3是可以直接改 xyz的

//所以可以先取出来改Vector3 再重新赋值

Vector3 vPos = this.transform.localPosition;

vPos.x = 10;

this.transform.localPosition = vPos;

如果想得到对象当前的 一个朝向

那么就是通过 trnasform.出来的

对象当前的各朝向

对象当前的面朝向

print(this.transform.forward);

对象当前的头顶朝向

print(this.transform.up);

对象当前的右手边

print(this.transform.right);

位移

理解坐标系下的位移计算公式

路程 = 方向 * 速度 * 时间

方式一 自己计算

想要变化的 就是 position

用当前的位置 + 我要动多长距离 得出最终所在的位置

this.transform.position = this.transform.position + this.transform.up * 1 * Time.deltaTime;

因为我用的是 this.transform.forward 所以它始终会朝向相对于自己的面朝向去动

this.transform.position += this.transform.forward * 1 * Time.deltaTime;

方向非常重要 因为 它决定了你的前进方向

this.transform.position += Vector3.forward * 1 * Time.deltaTime;

方式二 API transform.Translate()

参数一:表示位移多少 路程 = 方向 * 速度 * 时间

参数二:表示 相对坐标系 默认 该参数 是相对于自己坐标系的

1相对于世界坐标系的 Z轴 动 始终是朝 世界坐标系 的 Z轴正方向移动

this.transform.Translate(Vector3.forward * 1 * Time.deltaTime, Space.World);

2相对于世界坐标的 自己的面朝向去动 始终朝自己的面朝向移动

this.transform.Translate(this.transform.forward * 1 * Time.deltaTime, Space.World);

3相对于自己的坐标系 下的 自己的面朝向向量移动 (一定不会这样让物体移动) XXXXXXX

this.transform.Translate(this.transform.forward * 1 * Time.deltaTime, Space.Self);

4相对于自己的坐标系 下的 Z轴正方向移动 始终朝自己的面朝向移动

this.transform.Translate(Vector3.forward * 1 * Time.deltaTime, Space.Self);

相关推荐
牙膏上的小苏打23331 小时前
Unity Surround开关后导致获取主显示器分辨率错误
unity·主屏幕
Unity大海3 小时前
诠视科技Unity SDK开发环境配置、项目设置、apk打包。
科技·unity·游戏引擎
浅陌sss9 小时前
Unity中 粒子系统使用整理(一)
unity·游戏引擎
维度攻城狮13 小时前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2
为你写首诗ge16 小时前
【Unity网络编程知识】FTP学习
网络·unity
神码编程19 小时前
【Unity】 HTFramework框架(六十四)SaveDataRuntime运行时保存组件参数、预制体
unity·编辑器·游戏引擎
菲fay20 小时前
Unity 单例模式写法
unity·单例模式
火一线21 小时前
【Framework-Client系列】UIGenerate介绍
游戏·unity
ZKY_241 天前
【工具】Json在线解析工具
unity·json
ZKY_241 天前
【Unity】处理文字显示不全的问题
unity·游戏引擎