首页 > 其他分享 >Unity入门之重要组件和API(3) : Transform

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

时间:2024-07-08 10:28:25浏览次数:15  
标签:10 Vector3 Transform transform forward Unity API print 坐标系

前言

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);

标签:10,Vector3,Transform,transform,forward,Unity,API,print,坐标系
From: https://blog.csdn.net/UnityBoy/article/details/140173317

相关文章

  • 一起学Hugging Face Transformers(13)- 模型微调之自定义训练循环
    文章目录前言一、什么是训练循环1.训练循环的关键步骤2.示例3.训练循环的重要性二、使用HuggingFaceTransformers库实现自定义训练循环1.前期准备1)安装依赖2)导入必要的库2.加载数据和模型1)加载数据集2)加载预训练模型和分词器3)预处理数据4)创建数据加载器3......
  • Android 集成 Unity上的坑
    转载自CSDN1.Unity版本的差异Unity的版本在2019及其以下选择Mono方式打包出Android项目,反之选择IL2CPP方式打包Android项目为什么我会说这个Unity版本上会存在差异呢?因为我在工作时发现,我们项目原本是要升级到2022最新版的,但是发现2022用Mono方式打包出来的Android项目运行到An......
  • PHP转Go系列 | ThinkPHP与Gin框架之API接口签名设计实践
    大家好,我是码农先森。回想起以前用模版渲染数据的岁月,那时都没有API接口开发的概念。PHP服务端和前端HTML、CSS、JS代码混合式开发,也不分前端、后端程序员,大家都是全干工程师。随着前后端分离、移动端开发的兴起,用后端渲染数据的开发方式效率低下,已经不能满足业务对需求快速......
  • Linux系统配置Opencv+cuda+ffmpeg开发环境,-217:Gpu API call unknown error code问题
    Opencv是当前比较热门的图像处理开源算法库,但是随着深度学习在图像存储里领域的大放异彩,基于python的图像处理和深度学习算法大有超越opencv的趋势。opencv在最近的版本更新中,重点都放在了人工智能算法方面,本文介绍linux环境下配置支持GPU/cuda的ffmpeg和opencv开发环境,并将其中遇......
  • ts 常用api和特性
    交叉类型将多个类型进行合并成一个类型typePerson={name:string;age:number;}typeEmployee=Person&{employeeId:number;}联合类型联合类型通过|符号连接多个类型从而生成新的类型。它主要是取多个类型的交集,即多个类型共有的类型才是联合类型最终的类型t......
  • Apifox 6月更新|定时任务、内网自部署服务器运行接口定时导入、数据库 SSH 隧道连接
    Apifox新版本上线啦!!! 看看本次版本更新主要涵盖的重点内容,有没有你所关注的功能特性:自动化测试支持设置「定时任务」 支持内网自部署服务器运行「定时导入」数据库均支持通过SSH隧道连接自动化测试数据库操作优化 将Apifox更新至最新版,一起开启全新体验......
  • 解决《龙珠斗士Z》游戏启动问题:api-ms-win-crt-runtime-l1-1-0.dll文件缺失的详细指南
    对于热爱格斗游戏和《龙珠》系列的玩家来说,《龙珠斗士Z》无疑是一款令人兴奋的作品,它以其精美的画面、流畅的战斗体验以及对原作角色的精彩还原而受到广大玩家的喜爱。然而,在享受这场动漫与格斗完美融合的盛宴之前,一些玩家可能会遇到一个让人头疼的技术问题——游戏启动时提示......
  • .NET CORE WEBAPI 后端获取来源IP
    之前看别的地方说获取IP用ip=HttpContext.Current.Request.UserHostAddress;在ASP.NETCore2.0及更高版本中不起作用。您必须从ConfigureServices方法中的Startup.cs类中注入  HttpContextAccessor实例。 实际上换成ip=HttpContext.Connection.RemoteIpAddress.ToStr......
  • unity编辑器拓展,查找项目中预制体引用的组件或者脚本
    `usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEditor;usingUnityEngine.UI;usingSystem.Reflection;usingSystem;publicclassSearchComponent:EditorWindow{privatestringcomponentName="UnityEngine.......
  • 基于Sentence Transformer微调向量模型
    SentenceTransformer库升级到了V3,其中对模型训练部分做了优化,使得模型训练和微调更加简单了,跟着官方教程走了一遍,顺利完成向量模型的微调,以下是对官方教程的精炼和总结。一所需组件使用SentenceTransformer库进行向量模型的微调需要如下的组件:数据数据:用于训练和评估的数......