当前位置: 首页 > news >正文

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 updatevoid 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 framevoid 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 updatevoid 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 framevoid 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 updatevoid Start(){}// Update is called once per framevoid 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 updatevoid Start(){}// Update is called once per framevoid 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 updatevoid Start(){//获取父物体,父物体只有1个Debug.Log(transform.parent.gameObject);//子物体个数Debug.Log(transform.childCount);//接触与子物体的关系transform.DetachChildren();//获取子物体,可能有很多个Transform tran1=transform.Find("Moon");tran1=transform.GetChild(0);//判断一个物体是不是另外一个物体的子物体//transform默认就是this.transformbool res=tran1.IsChildOf(transform);Debug.Log(res);//设置父物体(设置自身为自己的父物体--没意义只是测试)tran1.SetParent(transform);}// Update is called once per framevoid Update(){//一直面向/朝向某个点Vector3 pos1=new Vector3(0,0,0);transform.LookAt(pos1);//自转transform.Rotate(Vector3.up,3f);//公转transform.RotateAround(Vector3.zero,Vector3.up,0.1f);}
}

http://www.lryc.cn/news/529526.html

相关文章:

  • 【项目集成Husky】
  • 基于Spring Security 6的OAuth2 系列之七 - 授权服务器--自定义数据库客户端信息
  • 【Matlab高端绘图SCI绘图模板】第006期 对比绘柱状图 (只需替换数据)
  • Java 大视界 -- Java 大数据在生物信息学中的应用与挑战(67)
  • .NET Core 中依赖注入的使用
  • deepseek 潜在变量Z的计算;变分自编码器(VAE); 高斯混合模型(GMM)
  • rsync安装与使用-linux015
  • CAP 定理的 P 是什么
  • 【multi-agent-system】ubuntu24.04 安装uv python包管理器及安装依赖
  • JavaScript原型链与继承:优化与扩展的深度探索
  • 5 长度和距离计算模块(length.rs)
  • ollama改模型的存盘目录解决下载大模型报c:盘空间不足的问题
  • OSCP:常见文件传输方法
  • B站吴恩达机器学习笔记
  • Java 性能优化与新特性
  • 【计算机网络】host文件
  • 【C语言】在Windows上为可执行文件.exe添加自定义图标
  • 爬虫基础(五)爬虫基本原理
  • 力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)
  • FFmpeg rtmp推流直播
  • WordPress Icegram Express插件Sql注入漏洞复现(CVE-2024-2876)(附脚本)
  • 重构字符串(767)
  • IO进程线程复习
  • 深入理解Linux内核的虚拟地址到物理地址转换机制及缓存优化
  • 2025年01月29日Github流行趋势
  • yolov11、yolov8部署的7种方法(yolov11、yolov8部署rknn的7种方法),一天一种部署方法,7天入门部署
  • 【ArcGIS遇上Python】批量提取多波段影像至单个波段
  • Node.js MySQL:深度解析与最佳实践
  • wordpress外贸独立站常用询盘软件
  • Kotlin 委托详解