Unity—Transform类-position

ops/2024/9/19 11:28:38/ 标签: unity, 游戏引擎

概要


游戏对象(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);
 


http://www.ppmy.cn/ops/111998.html

相关文章

数据库常规操作

常用的 SQL 语法和操作: 数据定义语言(DDL) 1.创建数据库CREATE DATABASE database_name;2.删除数据库DROP DATABASE database_name;3.创建表CREATE TABLE table_name (column1 datatype constraints,column2 datatype constraints,...);4.删…

Python 解析 JSON 数据

1、有如下 JSON 数据,存放在 data.json 文件: [{"id":1, "name": "小王", "gender": "male", "score": 96.8}, {"id":2, "name": "小婷", "gender&qu…

[Linux#49][UDP] 2w字详解 | socketaddr | 常用API | 实操:实现简易Udp传输

目录 套接字地址结构(sockaddr) 1.Socket API 2.sockaddr结构 3. sockaddr、sockaddr_in 和 sockaddr_un 的关系 sockaddr 结构体 sockaddr_in 结构体(IPv4 套接字地址) sockaddr_un 结构体(Unix域套接字地址&a…

Vue3项目开发——新闻发布管理系统(七)

文章目录 九、新闻分类管理模块设计开发1、新闻分类主页面设计2、封装页面组件3、改造页面4、新闻分类表格渲染4.1封装API,获取新闻分类数据4.2 表格动态渲染4.3表格增加 loading 效果5、实现新闻分类添加和编辑功能5.1 点击显示弹层5.2封装弹层组件 CateEdit5.3 准备弹层表单…

【C++】二、数据类型 (同C)

2.1 整形 无特殊情况,一般用int 2.2实型(浮点型) 1. 单精度 foat 2. 双精度 double 输入小数时默认double,定义变量时可以使用float转换为单精度 3. 可使用科学计数法表示小数(看得懂即可) 4. 用于浮点型用…

USB开启ADB设置流程

第一步:设置里打开adb调试选项 源码路径:packages/apps/Settings/src/com/android/settings/development/AdbPreferenceController.java public void onAdbDialogConfirmed() {writeAdbSetting(true); } writeAdbSetting 函数所在源码路径&#xff1a…

只有IP地址没有域名怎么实现HTTPS访问?

🔐 实现IP地址HTTPS访问 🌐 确认公网IP地址 公网IP:确保你拥有一个公网IP地址,或者内网映射公网,这是实现HTTPS访问的前提。 📝 选择证书颁发机构(CA) 选择CA:选择一个…

大数据-Hadoop-基础篇-第四章-HDFS(分布式文件存储)

目录 参考概念组成体系结构 数据块HDFS 文件读取HDFS 文件写入常用命令1. Is2. put3.moveFromLocal.4.get5.rm6. mkdir7.cp8. mv9.appendToFile10. cat javaAPI引入包创建文件夹 参考 经典大数据开发实战(Hadoop &HDFS&Hive&Hbase&Kafka&Flume…

红帽9中nginx-源码编译php

什么是PHP-FPM? PHP-FPM(FastCGI Process Manager: FastCGI进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能。 进程包括master进程和worker进程。master进程只有一个,负责监听端口,接受来自web server 的…

【重学 MySQL】三十、数值类型的函数

【重学 MySQL】三十、数值类型的函数 基本函数角度与弧度互换函数三角函数指数与对数进制间的转换示例 基本函数 MySQL提供了一系列基本的数值函数,用于处理数学运算和数值转换。以下是一些常用的基本函数及其用法: 函数用法ABS(x)返回x的绝对值。SIGN…

手机玩机常识____展讯芯片刷机平台ResearchDownload的一些基本常识与问题解决

展讯ResearchDownload工具 展讯芯片的刷机工具--ResearchDownload下载工具"是一款专为用户设计的高效、便捷的下载管理软件,它能够帮助用户快速、稳定地从互联网上获取各种文件。这款工具以其强大的功能和良好的用户体验,在众多展讯芯片下载工具中脱…

springboot+security为什么@ControllerAdvice自定义的异常处理没有生效

意外遇到一个无语的bug。项目架构差不多,为什么本项目的ControllerAdvice自定义的异常处理没有生效,其他的就可以。 调试如下: 在捕获异常的位置debug ControllerAdvice 标注的类是否被 Spring 容器正确管理。 很明显,没有。找到…

QT --- 初识QT

一、通过代码构建helloworld界面 一般通过代码来构造界面的时候,通常会把构造界面的代码放到Widget/MainWindow的构造函数中。 Qt中每个类都有对应同名的头文件 上古时期,Qt用的是这种风格的文件。1998年之后,C标准成立了,C98标准…

《深度学习》深度学习 框架、流程解析、动态展示及推导

目录 一、深度学习 1、什么是深度学习 2、特点 3、神经网络构造 1)单层神经元 • 推导 • 示例 2)多层神经网络 3)小结 4、感知器 神经网络的本质 5、多层感知器 6、动态图像示例 1)一个神经元 相当于下列状态&…

软件工程知识点总结(7):软件项目管理

目录 1 软件项目管理 2 进度计划 2.1 WBS 2.2 WBS 工作分解结构 2.3 制定进度计划 ——Gantt 1 软件项目管理 软件项目管理是指软件生命周期中软件管理者所进行的一系列活动,其目的是在 一定的时间和预设范围内有效的利用人力、资源、技术和工具,使…

[数据集][目标检测]智慧交通铁路异物入侵检测数据集VOC+YOLO格式802张7类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):802 标注数量(xml文件个数):802 标注数量(txt文件个数):802 标注类别…

F12抓包11:UI自动化 - Recoder(记录器)

课程大纲 使用场景(导入和导出): ① 测试的重复性工作,本浏览器录制并进行replay; ② 导入/导出录制脚本,移植后replay; ③ 导出给开发进行replay复现bug; ④ 进行前端性能分析。 1、录制脚…

Eureka原理与实践:构建高效的微服务架构

Eureka原理与实践:构建高效的微服务架构 引言 随着微服务架构的日益普及,服务的数量和复杂性不断增加,如何有效地管理这些服务成为了一个重要的挑战。Eureka,作为Netflix开源的服务发现组件,凭借其简单、健壮的特性&…

SpringBoot 消息队列RabbitMQ使用延迟消息插件 接收延迟消息

介绍 需要确保MQ已经安装好了延迟插件。 创建延迟交换机与队列 RabbitListener(bindings QueueBinding(value Queue(value "test.queue",durable "true"),exchange Exchange(value "test.fanout",delayed "true"),key {&quo…

23ai DGPDB,Oracle资源池战略的最后一块拼图

Oracle对资源池是有执念的! 在我看来,这种执念一方面是应用架构的微服务化,数据库被拆分的越来越小,而服务器的硬件能力是不断提升的,CPU核心数、内存和存储的容量都按照摩尔定律在不断增加,这就使得数据库…