Unity入门之重要组件和API(3) : Transform

前言

Transform类主要处理游戏对象(GameObject)的位移、旋转、缩放、父子关系和坐标转换。

1.位置和位移

1.1必备知识点:Vector3

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

【声明】
Vector3 v1 = new Vector3();
Vector3 v2 = new Vector3(10, 10);
Vector3 v3 = new Vector3(10, 10, 10);
Vector3 v4;【Vector3 的基本计算:+ - * /】
print(v2 + v3);
print(v2 - v3);
print(v2 * 2);
print(v2 / 2);【常用向量】
print(Vector3.zero);    // (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)【计算两个点之间的距离】
print(Vector3.Distance(v2, v3));

1.2位置

【相对世界坐标系】
print(this.transform.position);【相对父对象】
print(this.transform.localPosition);【注意:位置的赋值不能直接改变x, y, z, 只能整体改变】
this.transform.position = new Vector3(10, 10, 10);
this.transform.localPosition = new Vector3(20, 20, 20);【对象当前的面朝向】
print(this.transform.forward);
【对象当前的头顶方向】
print(this.transform.up);
【对象当前的右手方向】
print(this.transform.right);

1.3位移

【位移计算公式:路程 = 方向 * 速度 * 时间】【方式一:自己计算】
float speed = 1.0f;
[相对自己的方向移动]
this.transform.position += this.transform.forward * speed * Time.deltaTime;
[相对世界坐标方向移动]
this.transform.position += Vector3.forward * speed * Time.deltaTime;【方式二:API】
参数一:位移量
参数二:参考坐标系
[1.相对于世界坐标系的 z轴 移动 (始终朝世界坐标系的z轴正方向移动)]
this.transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World);
[2.相对于世界坐标系的 自己的面朝向 移动 (始终朝自己的面朝向移动)]
this.transform.Translate(transform.forward * speed * Time.deltaTime, Space.World);
[3.相对于自己坐标系的 z轴 移动 (始终朝自己的面朝向移动)]
this.transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.Self);
[4.相对于自己坐标系的 自己的面朝向 移动 (错误移动)]
//this.transform.Translate(transform.forward * speed * Time.deltaTime, Space.Self);

2.角度和旋转

2.1角度相关

【相对世界坐标系】
print(this.transform.eulerAngles);【相对父对象】
print(this.transform.localEulerAngles);【注意:角度的赋值不能直接改变x, y, z, 只能整体改变】
this.transform.eulerAngles = new Vector3(10, 10, 10);
this.transform.localEulerAngles = new Vector3(20, 20, 20);

2.2旋转相关

1.自转
参数一:旋转量
参数二:参考坐标系,默认是相对于自己坐标系进行旋转
this.transform.Rotate(new Vector3(0, 10, 0) * Time.deltaTime);
this.transform.Rotate(new Vector3(0, 10, 0) * Time.deltaTime, Space.World);[相对于某个轴旋转]
参数一:相对哪个轴进行转动
参数二:旋转量
参数三:参考坐标系,默认是相对于自己坐标系进行旋转
this.transform.Rotate(Vector3.up, 10 * Time.deltaTime);
this.transform.Rotate(Vector3.right, 10 * Time.deltaTime, Space.World);2.公转(相对于某个点旋转)
参数一:相对于哪个点旋转
参数二:相对于哪个轴旋转
参数三:旋转量
this.transform.RotateAround(Vector3.zero, Vector3.right, 10 * Time.deltaTime);

3.缩放和看向

3.1缩放

【相对世界坐标系】
print(this.transform.lossyScale);【相对父对象】
print(this.transform.localScale);【注意:位置的赋值不能直接改变x, y, z, 只能整体改变】
this.transform.localScale = new Vector3(2, 2, 2);

3.2看向

【看向一个点,相对于世界坐标系】
this.transform.LookAt(Vector3.zero);【看向一个对象】
this.transform.LookAt(lookAtObj.transform);

4.父子关系

4.1获取和设置父对象

【获取父对象】
print(this.transform.parent.name);【脱离父子关系】
this.transform.parent = null;
this.transform.SetParent(null);【设置新的父对象】
this.transform.parent = GameObject.Find("Father").transform;
this.transform.SetParent(GameObject.Find("Father").transform);

4.2和所有子对象脱离关系

this.transform.DetachChildren();

4.3获取子对象

【按名字查找】
可以找到失活的对象,只能查找自己的子对象,不能查找子对象的子对象
this.transform.Find("Son");【遍历子对象】
for (int i = 0; i < transform.childCount; i++) {print(transform.GetChild(i).name);
}

4.4子对象的操作

【判断某个对象是否自己的父对象】
if(transform.IsChildOf(GameObject.Find("Father").transform)) {print("Father 是父对象");
}【得到自己作为子对象的编号】
print(transform.GetSiblingIndex());【把自己设置为第一个子对象】
transform.SetAsFirstSibling();【把自己设置为最后一个子对象】
transform.SetAsLastSibling();【把自己设置为指定位置的子对象】
transform.SetSiblingIndex(1);

5.坐标转换

5.1世界坐标转本地坐标

【世界坐标系的点 转换为 本地坐标系的点】
受缩放影响
transform.InverseTransformPoint(Vector3.forward);【世界坐标系的方向 转换为 本地坐标系的方向】
不受缩放影响
transform.InverseTransformDirection(Vector3.forward);
受缩放影响
transform.InverseTransformVector(Vector3.forward);

5.2本地坐标转世界坐标

【本地坐标系的点 转换为 世界坐标系的点】
受缩放影响
transform.TransformPoint(Vector3.forward);【本地坐标系的方向 转换为 世界坐标系的方向】
不受缩放影响
transform.TransformDirection(Vector3.forward);
受缩放影响
transform.TransformVector(Vector3.forward);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ScrapySharp框架:小红书视频数据采集的API集成与应用

引言 随着大数据时代的到来&#xff0c;数据采集成为了互联网企业获取信息的重要手段。小红书作为一个集社交和电商于一体的平台&#xff0c;其丰富的用户生成内容&#xff08;UGC&#xff09;为数据采集提供了丰富的资源。本文将介绍如何使用ScrapySharp框架进行小红书视频数…

便携式气象站的应用领域

在气象观测的广阔天地中&#xff0c;便携式气象站不仅集便携性、多功能性和高精度于一身&#xff0c;还以其快速部署、实时监测和数据传输等特点&#xff0c;在科研教学、环境监测、农业生产和灾害预警等多个领域发挥着重要作用。 便携式气象站的基本概念 便携式气象站&#…

高智能土壤养分检测仪:农业生产的科技新助力

在科技日新月异的今天&#xff0c;农业领域也迎来了革命性的变革。其中&#xff0c;高智能土壤养分检测仪作为现代农业的科技新助力&#xff0c;正逐渐改变着传统的农业生产方式&#xff0c;为农民带来了前所未有的便利与效益。 高智能土壤养分检测仪&#xff0c;是一款集高科技…

职场必备神器!图片提取文字!OCR文字识别助手:让灵感自由流动!

Hey&#xff0c;创意达人们&#xff01;是否曾在网页上看到令人心动的设计灵感&#xff0c;却因无法复制粘贴而苦恼&#xff1f;别担心&#xff0c;今天我要给你们安利一个办公小秘密——OCR文字识别助手&#xff0c;让你的灵感自由流动&#xff0c;创意无限&#xff01; 功能…

深入了解代理IP常见协议:区别与选择

代理服务器在网络使用中扮演着重要的角色&#xff0c;是您设备和互联网之间的中间层。它不仅可以增强网络访问的安全性和隐私保护&#xff0c;还可以提供许多灵活的应用。使用代理时&#xff0c;不同的协议类型对数据交换具有不同的规则和特征。常见的代理协议包括HTTP代理、HT…

轻松掌握图片压缩技巧,释放存储空间!

前言 在这个充满视觉冲击的时代&#xff0c;我们每天都在创造和分享图片。但你是否发现&#xff0c;手机和电脑的存储空间越来越不够用了&#xff1f;图片文件过大&#xff0c;不仅占用空间&#xff0c;还影响传输速度和网页加载。今天&#xff0c;就让我来教你几招&#xff0…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署MuseV (踩完了所有的坑):基于视觉条件并行去噪的无限长度和高保真虚拟人视频生成

目录 下载项目 创建虚拟环境 启动虚拟环境&执行项目依赖 基于DOCKER的尝试 A. 安装引擎 B. 下载桌面安装包 C. 安装桌面包 用Docker运行MuseV 1. 拉取镜像 ​编辑 2. 运行Docker镜像 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收…

Android APT实战

Android开发中,注解平时我们用的比较多,也许我们会比较好奇,注解的背后是如何工作的,这篇文章帮大家一步步创建一个简单的注解处理器。 简介 APT(Annotation Processing Tool)即注解处理器,在编译的时候可以处理注解然后搞一些事情,也可以在编译时生成一些文件之类的。…

Android Studio音频视频播放器课程设计

这个项目适合刚刚学习Android studio的初学者&#xff0c;实现音视频的基本播放功能&#xff0c;各项功能的页面都做的比较简单&#xff0c;特别适用于初学者&#xff0c;其特点在于本项目抛开了各种花里胡哨的制作&#xff0c;以最接近初学者的样式画面呈现&#xff0c;完全不…

20240711 每日AI必读资讯

&#x1f3a8;Runway Gen-3 Alpha 详细使用教程以及提示词指南大全 - 7月9日&#xff0c;著名生成式AI平台Runway在官网公布了&#xff0c;最新发布的文生视频模型Gen-3 Alpha的文本提示教程。 - 从技术层面来说&#xff0c;输入的文本提示会被转换成“向量”&#xff0c;这些…

深入理解Python密码学:使用PyCrypto库进行加密和解密

深入理解Python密码学&#xff1a;使用PyCrypto库进行加密和解密 引言 在现代计算领域&#xff0c;信息安全逐渐成为焦点话题。密码学&#xff0c;作为信息保护的关键技术之一&#xff0c;允许我们加密&#xff08;保密&#xff09;和解密&#xff08;解密&#xff09;数据。P…

通过Umijs从0到1搭建一个React项目

有一阵时间没写react了&#xff0c;今天通过umi搭建一个demo项目复习一下react&#xff1b;umi是一个可扩展的企业级前端应用框架&#xff0c;在react市场中还是比较火的一个框架。 Umi官方文档&#xff1a;Umi 介绍 (umijs.org) 一、构建项目。 1、安装包管理工具。 官方推…

力扣题解(设计跳表)

1206.设计跳表 已解答 不使用任何库函数&#xff0c;设计一个 跳表 。 跳表 是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树&#xff0c;其功能与性能相当&#xff0c;并且跳表的代码长度相较下更短&#xff0c;其设计思想与链表相似。 …

【观成科技】Websocket协议代理隧道加密流量分析与检测

Websocket协议代理隧道加密流量简介 攻防场景下&#xff0c;Websocket协议常被用于代理隧道的搭建&#xff0c;攻击者企图通过Websocket协议来绕过网络限制&#xff0c;搭建一个低延迟、双向实时数据传输的隧道。当前&#xff0c;主流的支持Websocket通信代理的工具有&#xf…

构建高精度室内定位导航系统,从3DGIS到AI路径规划的全面解析

室内定位导航系统是一种利用多种技术实现室内精准定位和导航的智能系统&#xff0c;即便没有卫星信号&#xff0c;也能实现精准导航。维小帮室内定位导航系统是基于自研的地图引擎与先进定位技术&#xff0c;结合智能路径规划算法&#xff0c;解决了人们在大型复杂室内场所最后…

【深度学习】图形模型基础(6):模型优化理论

1.引言 在之前的讨论中&#xff0c;我们构建了一个理论模型来表达最优决策规则&#xff0c;这是建立在我们对数据的概率模型有充分理解的基础上的。相对地&#xff0c;经验风险最小化&#xff08;Empirical Risk Minimization, ERM&#xff09;策略则在缺乏精确概率模型的情况…

Java语言程序设计——篇三(1)

选择结构 概述选择单分支if语句例题讲解 双分支if-else语句例题讲解 条件运算符多分支的if-else语句例题讲解 嵌套的if语句例题讲解 switch语句结构例题讲解代码演示运行结果 概述 Java中的控制结构&#xff0c;包括&#xff1a; 1、选择结构( if、if-else、switch ) 2、循环结…

仕考网:非应届生可以参加公务员考试吗?

往届生有资格参加国家公务员考试。根据《公务员录用规定》&#xff0c;只要满足一系列资格条件&#xff0c;就符合报考资格。 1、年龄在18到35岁之间。 2、具备良好的品德&#xff0c;身体健康且心理素质稳定&#xff0c;拥有拟任职位所需的工作能力。 3、至少为大学专科以上…

【排序 - 归并排序】

归并排序&#xff08;Merge Sort&#xff09;是一种高效的排序算法&#xff0c;基于分治&#xff08;Divide and Conquer&#xff09;策略。它将待排序数组分成两个较小的子数组&#xff0c;分别对它们进行排序&#xff0c;然后将排好序的子数组合并成一个整体有序的数组。归并…

愚人杯的RE题

easy_pyc pyc反编译成py文件 # uncompyle6 version 3.9.1 # Python bytecode version base 2.7 (62211) # Decompiled from: Python 3.11.8 (tags/v3.11.8:db85d51, Feb 6 2024, 22:03:32) [MSC v.1937 64 bit (AMD64)] # Embedded file name: enpyc.py # Compiled at: 2023…