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

news/2025/2/1 21:28:57 标签: unity

目录

备注内容

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



    }
}


http://www.niftyadmin.cn/n/5839589.html

相关文章

深度学习之“数据的相关性”

不同的数据集之间可能会存在关联,如一方变大,另一方也随之变大或者变小。例如,大多数图像的像素点是高度相关的。图像上的一个像素与其周围的像素点在很大概率上会类似。而”相关性“十分适合用于描述这种关系,描述相关性的统计量…

六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)

六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂) 文章目录 六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)1. 发布 和 订阅的概念 2. 发布订阅模式分类2.1 一个发布者,多个订阅者2.2 多个发布者,一个订阅者2.3 多个发布者…

嵌入式知识点总结 Linux驱动 (八)-Linux设备驱动

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.请简述主设备号和次设备号的用途? 2.字符驱动设备怎么创建设备文件? 3.设备驱动程序中如何注册一个字符设备?分别解释一下它的几个参数的含…

128周二复盘(164)学习任天堂

1.设计相关 研究历史上某些武器数值,对一些设定进行参数修改。兼顾真实性,合理性,娱乐性。 学习宫本茂游戏思想,简单有趣-重玩性,风格化个性化-反拟真。对堆难度与内容的反思。 后续将学习岩田聪以及别的任天堂名人的…

CSS(二)——选择器

1.基础选择器 &#xff08;1&#xff09;类选择器&#xff1a;用点&#xff08;.&#xff09;来查找&#xff0c;可以有多个属性值&#xff0c;用空格分开即可 注意&#xff1a;多个属性值是指定义class名字的时候可以定义多个属性值 <!DOCTYPE html> <html lang&qu…

Spring Boot基本项目结构

要写一个Spring Boot 项目对于新手小白来说&#xff0c;首先要了解Spring Boot 的基本架构&#xff0c;学会如何创建一个简单的spring boot项目。 springboot 基于maven做的&#xff08;前提保证maven是装好并且IDEA配置好的&#xff09;&#xff08;面向接口编程&#xff09;…

昆虫机器人:从仿生设计到未来应用

目录 引言&#xff1a;从科幻到现实的启示仿生昆虫机器人&#xff1a;技术突破与功能解析应用场景&#xff1a;农业与灾后救援的革新技术难点&#xff1a;微型机器人研发的挑战未来趋势&#xff1a;智能化与群体协作的潜力总结&#xff1a;昆虫机器人技术的广阔前景 1. 引言&am…

服务器虚拟化实战:架构、技术与最佳实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分&#xff0c;通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…