unity学习25:用 transform 进行旋转和移动,简单的太阳地球月亮模型,以及父子级关系

目录

备注内容

1游戏物体的父子级关系

1.1 父子物体

1.2 坐标关系

1.3 父子物体实际是用 每个gameobject的tranform来关联的

2  获取gameObject的静态数据

2.1 具体命令

2.2 具体代码

2.3 输出结果

3 获取gameObject 的方向

3.1 游戏里默认的3个方向

3.2 获取方向代码

3.3 输出

4 游戏里的  旋转,朝向

4.1 始终朝向某点:transform.LookAt() 

4.2  自转  transform.Rotate()

4.3  公转 transform.RotateAround()

4.4 自转+公转的  Sun- Earth- Moon 效果

5 游戏里的直线移动 transform.Translate()

5 游戏里 gameObject的父子关系


备注内容

  • 注释  //
  • 注释  /*  */  大段block注释

1游戏物体的父子级关系

1.1 父子物体

  • 游戏物体的父子级关系
  • 实际是用 每个gameobject的tranform来关联的

1.2 坐标关系

  • tranform.position           //这个是unity里的绝对位置
  • tranform.localPosition    //这个是相对于父物体的位置,也是unity编辑器里显示的坐标位置

1.3 父子物体实际是用 每个gameobject的tranform来关联的

  • 父子物体实际是用 每个gameobject的tranform来关联的

2  获取gameObject的静态数据

2.1 具体命令

//获取位置

       Debug.Log(transform.position);                     // 返回一个Vector3

       Debug.Log(transform.localPosition);            // 返回一个Vector3

//获取旋转的四元数,和欧拉角

       Debug.Log(transform.rotation);                    // 返回四元数

       Debug.Log(transform.localRotation);

       Debug.Log(transform.eulerAngles);             // 返回一个Vector3

       Debug.Log(transform.localEulerAngles);      // 返回一个Vector3

//获取缩放

       Debug.Log(transform.localScale);                // 返回一个Vector3

2.2 具体代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //获取位置
       Debug.Log(transform.position);
       Debug.Log(transform.localPosition);
        //获取旋转的四元数,和欧拉角
       Debug.Log(transform.rotation);
       Debug.Log(transform.localRotation);
       Debug.Log(transform.eulerAngles);
       Debug.Log(transform.localEulerAngles);
        //获取缩放
       Debug.Log(transform.localScale);


    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

2.3 输出结果

3 获取gameObject 的方向

3.1 游戏里默认的3个方向

  • z  蓝色,forward
  • X 红色,   right
  • Y 绿色,    up

3.2 获取方向代码,如transform.forward

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //获取位置
       Debug.Log(transform.position);
       Debug.Log(transform.localPosition);
        //获取旋转的四元数,和欧拉角
       Debug.Log(transform.rotation);
       Debug.Log(transform.localRotation);
       Debug.Log(transform.eulerAngles);
       Debug.Log(transform.localEulerAngles);
        //获取缩放
       Debug.Log(transform.localScale);

        //获取方向向量
       Debug.Log(transform.forward);
       Debug.Log(transform.right);
       Debug.Log(transform.up);

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

3.3 输出

4 游戏里的  旋转,朝向

4.1 始终朝向某点:transform.LookAt() 

        //一直面向/朝向某个点

        Vector3 pos1=new Vector3(0,0,0);

        transform.LookAt(pos1);

  • transform.LookAt(Vector3) 
  • 参数必须是1个 Vector3
  • 而Vector3 变量,定义时,必须new1个实例出来用
  •  Vector3 pos1=new Vector3(0,0,0);

  • 测试时注意:如果测试的GB是个球
  • 其实,这个物体的3个轴还是不变的,只是球上面的旋转曲线可以看出来,因为始终朝向某个点,所以其实球自身发生了旋转。

4.2  自转  transform.Rotate()

        //自转

        transform.Rotate(Vector3.up,3f);

  • transform.Rotate(Vector3.up,3f);
  • 参数1:坐标轴
  • 参数2:速度,注意浮点数需要时0.3f这样

4.3  公转 transform.RotateAround()

        //公转

        transform.RotateAround(Vector3.zero,Vector3.up,0.1f);

  • transform.RotateAround(Vector3.zero,Vector3.up,0.1f);
  • 参数1:公转的中心点
  • 参数2:坐标轴
  • 参数3:速度,注意浮点数需要时0.3f这样

4.4 自转+公转的  Sun- Earth- Moon 效果

  • 上面是代码测试效果
  • Sun放在 Vector(0,0,0) 点
  • Earth 挂代码 TransformTest1
  • Moon 挂代码 TransformTest1

TransformTest1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformTest1 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //一直面向/朝向某个点
        Vector3 pos1=new Vector3(0,0,0);
        transform.LookAt(pos1);

        //自转
        transform.Rotate(Vector3.up,3f);

        //公转
        transform.RotateAround(Vector3.zero,Vector3.up,0.1f);



    }
}

 TransformTest2 其实和 TransformTest1差不多

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformTest2 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //自转
        transform.Rotate(Vector3.up,1f);

        //公转
        transform.RotateAround(transform.parent.gameObject.transform.position,Vector3.up,0.5f);



    }
}

5 游戏里的直线移动 transform.Translate()

        //直线移动

        transform.Translate(Vector3.forward*0.1f);

5 游戏里 gameObject的父子关系

  • 修改 Earth的脚本
  • //获取父物体,父物体只有1个
  •        Debug.Log(transform.parent.gameObject);
  • //子物体个数
  •        Debug.Log(transform.childCount);
  • //解除与子物体的关系
  •        transform.DetachChildren();
  •  //获取子物体,可能有很多个
  •        Transform tran1=transform.Find("Moon");
  •        tran1=transform.GetChild(0);
  • //判断一个物体是不是另外一个物体的子物体
  • //transform默认就是this.transform
  •        bool res=tran1.IsChildOf(transform);
  •        Debug.Log(res);
  • //设置父物体(设置自身为自己的父物体--没意义只是测试)
  •         tran1.SetParent(transform);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformTest1 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       //获取父物体,父物体只有1个
       Debug.Log(transform.parent.gameObject);
       //子物体个数
       Debug.Log(transform.childCount);
       //接触与子物体的关系
       transform.DetachChildren();
       //获取子物体,可能有很多个
       Transform tran1=transform.Find("Moon");
       tran1=transform.GetChild(0);
       //判断一个物体是不是另外一个物体的子物体
       //transform默认就是this.transform
       bool res=tran1.IsChildOf(transform);
       Debug.Log(res);
        //设置父物体(设置自身为自己的父物体--没意义只是测试)
        tran1.SetParent(transform);
    }

    // Update is called once per frame
    void Update()
    {
        //一直面向/朝向某个点
        Vector3 pos1=new Vector3(0,0,0);
        transform.LookAt(pos1);

        //自转
        transform.Rotate(Vector3.up,3f);

        //公转
        transform.RotateAround(Vector3.zero,Vector3.up,0.1f);



    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C基础算法与实现

前言 通过业务侧输入需求,使用代码完成。 1.偶数立方和 编写函数求1~100中奇数的平方与偶数的立方的和 1.1代码实现结果 1.2源码示例 #include <stdio.h>// 计算1到100中奇数的平方与偶数的立方的和 int calculateSum() {int sum 0;// 遍历1到100之间的所有数字for (…

基于SSM实现的乡村振兴文化平台系统功能实现十八

一、前言介绍&#xff1a; 1.1 项目摘要 农耕文明是广大群众在几千年的农业生产生活中智慧的结晶&#xff0c;不仅是乡土文化的核心和精髓&#xff0c;还是中华文明的起源和基因。因此&#xff0c;传承和发扬优秀乡村文化&#xff0c;是传承农耕文明的必然要求。 文化振兴是乡…

如何让一个用户具备创建审批流程的权限

最近碰到一个问题&#xff0c;两个sandbox&#xff0c;照理用户的权限应该是一样的&#xff0c;结果开发环境里面我可以左右的做各种管理工作&#xff0c;但是使用change set上传后&#xff0c;另一个环境的同一个用户&#xff0c;没有相对于的权限&#xff0c;权限不足。 当时…

实现B-树

一、概述 1.历史 B树&#xff08;B-Tree&#xff09;结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…

解锁维特比算法:探寻复杂系统的最优解密码

引言 在复杂的技术世界中&#xff0c;维特比算法以其独特的魅力和广泛的应用&#xff0c;成为通信、自然语言处理、生物信息学等领域的关键技术。今天&#xff0c;让我们一同深入探索维特比算法的奥秘。 一、维特比算法的诞生背景 维特比算法由安德鲁・维特比在 1967 年提出…

CPU 100% 出现系统中断 怎么解决

CPU 100% 出现系统中断 怎么解决 电脑开机时会掉帧&#xff0c;切换到桌面时就会卡顿&#xff0c;然后打开任务管理器就会看到系统中断的cpu占用率达到100%&#xff0c;过一段时间再打开还是会有显示100%的占用率&#xff0c;这个问题怎么解决&#xff1f; 文章目录 CPU 100% …

Python 梯度下降法(五):Adam Optimize

文章目录 Python 梯度下降法&#xff08;五&#xff09;&#xff1a;Adam Optimize一、数学原理1.1 介绍1.2 符号说明1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码2.3 遇到的问题2.4 算法优化 三、优缺点3.1 优点3.2 缺点 Python 梯度下降法&#xff08;五&#xff09;&am…

labelme_json_to_dataset ValueError: path is on mount ‘D:‘,start on C

这是你的labelme运行时label照片的盘和保存目的地址的盘不同都值得报错 labelme_json_to_dataset ValueError: path is on mount D:,start on C 只需要放一个盘但可以不放一个目录

中间件安全

一.中间件概述 1.中间件定义 介绍&#xff1a;中间件&#xff08;Middleware&#xff09;作为一种软件组件&#xff0c;在不同系统、应用程序或服务间扮演着数据与消息传递的关键角色。它常处于应用程序和操作系统之间&#xff0c;就像一座桥梁&#xff0c;负责不同应用程序间…

玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

sizeof和strlen的对比与一些杂记

1.sizeof和strlen的对比 1.1sizeof &#xff08;1&#xff09;sizeof是一种操作符 &#xff08;2&#xff09;sizeof计算的是类型或变量所占空间的大小&#xff0c;单位是字节 注意事项&#xff1a; &#xff08;1&#xff09;sizeof 返回的值类型是 size_t&#xff0c;这是一…

书生大模型实战营6

文章目录 L1——基础岛玩转书生「多模态对话」与「AI搜索」产品MindSearch 开源的 AI 搜索引擎书生浦语 InternLM 开源模型官方的对话类产品书生万象 InternVL 开源的视觉语言模型官方的对话产品在知乎上的提交 L1——基础岛 玩转书生「多模态对话」与「AI搜索」产品 MindSea…

three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)

春节忙完一轮&#xff0c;总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论&#xff0c;所以像相机矩阵推导这种网上已经很多优质文章的内容&#xff0c;笔者就一笔带过。 然而关于负缩放&#xf…

Baklib解析内容中台与人工智能技术带来的价值与机遇

内容概要 在数字化转型的浪潮中&#xff0c;内容中台与人工智能技术的结合为企业提供了前所未有的发展机遇。内容中台作为一种新的内容管理和生产模式&#xff0c;通过统一管理和协调各种内容资源&#xff0c;帮助企业更高效地整合内外部数据。而人工智能技术则以其强大的数据…

Learning Vue 读书笔记 Chapter 4

4.1 Vue中的嵌套组件和数据流 我们将嵌套的组件称为子组件&#xff0c;而包含它们的组件则称为它们的父组件。 父组件可以通过 props向子组件传递数据&#xff0c;而子组件则可以通过自定义事件&#xff08;emits&#xff09;向父组件发送事件。 4.1.1 使用Props向子组件传递…

小程序电商运营内容真实性增强策略及开源链动2+1模式AI智能名片S2B2C商城系统源码的应用探索

摘要&#xff1a;随着互联网技术的不断发展&#xff0c;小程序电商已成为现代商业的重要组成部分。然而&#xff0c;如何在竞争激烈的市场中增强小程序内容的真实性&#xff0c;提高用户信任度&#xff0c;成为电商运营者面临的一大挑战。本文首先探讨了通过图片、视频等方式增…

【游戏设计原理】96 - 成就感

成就感是玩家体验的核心&#xff0c;它来自完成一件让自己满意的任务&#xff0c;而这种任务通常需要一定的努力和挑战。游戏设计师的目标是通过合理设计任务&#xff0c;不断为玩家提供成就感&#xff0c;保持他们的参与热情。 ARCS行为模式&#xff08;注意力、关联性、自信…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

读书笔记-《Redis设计与实现》(一)数据结构与对象(下)

各位朋友新年快乐~ 今天我们来继续学习 Redis 。 01 整数集合 当集合仅包含整数值&#xff0c;并且元素数量不多时&#xff0c;Redis 就会采用整数集合来作为集合键的底层实现。 typedef struct intset {// 编码方式uint32_t encoding;// 元素数量uint32_t length;// 数组in…

IP服务模型

1. IP数据报 IP数据报中除了包含需要传输的数据外&#xff0c;还包括目标终端的IP地址和发送终端的IP地址。 数据报通过网络从一台路由器跳到另一台路由器&#xff0c;一路从IP源地址传递到IP目标地址。每个路由器都包含一个转发表&#xff0c;该表告诉它在匹配到特定目标地址…