用Unity3D模拟太阳系仿真

模拟要求

写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。

操作步骤

1.创建如下结构 sun 里包括8大行星, 并且设置好距离和大小

建立结构

建议用2D显示来直观设置距离

2.在网上找到相应贴图 添加到assets

贴图网址
网址失效 素材更新链接如下
链接: https://pan.baidu.com/s/1w0xSMt_0HgBLbVhco9b6GA 提取码: ead5


而且把对应行星的贴图图片拖到对应的球体上(给白色小球上色)得到下面结果

3.创建c#脚本 使每个行星绕太阳转

创建plantMove.cs文件 代码如下

把此脚本拖到sun 物体即可,代码就是在sun 里面找到各个行星,并且设置运动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class plantMove : MonoBehaviour
{// Use this for initialization  void Start(){}// Update is called once per frame  void Update(){GameObject.Find("Sun").transform.Rotate(Vector3.up * Time.deltaTime * 5 );GameObject.Find("Mercury").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 60 * Time.deltaTime);//设置公转的方向和速度  方向轴为(0, 1, 0) 速度为 60GameObject.Find("Mercury").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 58);//设置自转 自转速度为10000/58   58是水星的自传周期  倒数就是时间  下同GameObject.Find("Venus").transform.RotateAround(Vector3.zero, new Vector3(0, 1, -0.1f), 55 * Time.deltaTime);GameObject.Find("Venus").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 243);GameObject.Find("Earth").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);GameObject.Find("Earth").transform.Rotate(Vector3.up * Time.deltaTime * 10000);GameObject.Find("Moon").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 5 * Time.deltaTime);GameObject.Find("Moon").transform.Rotate(Vector3.up * Time.deltaTime * 10000/27);GameObject.Find("Mars").transform.RotateAround(Vector3.zero, new Vector3(0.2f, 1, 0), 45 * Time.deltaTime);GameObject.Find("Mars").transform.Rotate(Vector3.up * Time.deltaTime * 10000);GameObject.Find("Jupiter").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 2, 0), 35 * Time.deltaTime);GameObject.Find("Jupiter").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.3f);GameObject.Find("Saturn").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0.2f), 20 * Time.deltaTime);GameObject.Find("Saturn").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.4f);GameObject.Find("Uranus").transform.RotateAround(Vector3.zero, new Vector3(0, 2, 0.1f), 15 * Time.deltaTime);GameObject.Find("Uranus").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.6f);GameObject.Find("Neptune").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 1, -0.1f), 10 * Time.deltaTime);GameObject.Find("Neptune").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.7f);}
}

代码解释:

我们通过GameObject.Find(“value”)来找到各个球体 然后通过调用RotateAround()设置公转,通过调用Rotate()方法设置自转

4. 进一步思考

运行下发现月球绕地球旋转不对劲, 其原因是地球的自转影响了月球的公转, 月球是相对一个自转的地球来的 月球公转叠加了地球自转。

所以怎么去处理这个问题呢? 怎么让月球公转和地球自转不相关呢?

这里有一个解决方案

在原来的Sun里再加入一个对象名为EarthClone,而且大小和位置都和地球相同, 然后我对EarthClone设置和Earth一样的公转 但是不设置自转 把Moon放到EarthClone里让Moon相对与EarthClone公转 这样就能解决问题了

文件结构:


加入和更改下列代码

 void Update(){GameObject.Find("Sun").transform.Rotate(Vector3.up * Time.deltaTime * 5 );GameObject.Find("Mercury").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 60 * Time.deltaTime);GameObject.Find("Mercury").transform.Rotate(Vector3.up * Time.deltaTime * 1 / 58);GameObject.Find("Venus").transform.RotateAround(Vector3.zero, new Vector3(0, 1, -0.1f), 55 * Time.deltaTime);GameObject.Find("Venus").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 243);GameObject.Find("Earth").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);GameObject.Find("Earth").transform.Rotate(Vector3.up * Time.deltaTime * 10);//只设置公转 不设置自传GameObject.Find("EarthClone").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);//令Moon相对与不自转的EarthClone公转GameObject.Find("Moon").transform.RotateAround(GameObject.Find("EarthClone").transform.position, new Vector3(0, 1, 0), 250 * Time.deltaTime);GameObject.Find("Moon").transform.Rotate(Vector3.up * Time.deltaTime * 10/27);GameObject.Find("Mars").transform.RotateAround(Vector3.zero, new Vector3(0.2f, 1, 0), 45 * Time.deltaTime);GameObject.Find("Mars").transform.Rotate(Vector3.up * Time.deltaTime * 10);GameObject.Find("Jupiter").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 2, 0), 35 * Time.deltaTime);GameObject.Find("Jupiter").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.3f);GameObject.Find("Saturn").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0.2f), 20 * Time.deltaTime);GameObject.Find("Saturn").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.4f);GameObject.Find("Uranus").transform.RotateAround(Vector3.zero, new Vector3(0, 2, 0.1f), 15 * Time.deltaTime);GameObject.Find("Uranus").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.6f);GameObject.Find("Neptune").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 1, -0.1f), 10 * Time.deltaTime);GameObject.Find("Neptune").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.7f);}

5.结果显示

把cs脚本拖到Sun对象里 运行查看结果

用Unity3D实现太阳系仿真相关推荐

  1. python模拟太阳系_用Unity3D实现太阳系仿真

    用Unity3D模拟太阳系仿真 模拟要求 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上. 操作步骤 1.创建如下结构 sun 里包括8大行星, 并且设置好距 ...

  2. unity3d 模拟电脑实现_基于Unity3D的机器人仿真实验系统

    龙源期刊网 http://www.qikan.com.cn 基于 Unity3D 的机器人仿真实验系统 作者:庄严 卢阿丽 杨庆 来源:<电子技术与软件工程> 2018 年第 03 期 摘 ...

  3. 【Unity3D小工具】Unity3D中实现仿真时钟、表盘、仿原神时钟

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  4. VISSIM/vissim与Unity3D的联合仿真实例

    看到一篇有意思的TRB论文,把重点部分翻译了一下,分享给大家,一起学习. 论文网址: https://www.semanticscholar.org/paper/The-Use-of-Emerging ...

  5. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

    一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...

  6. 数字模型制作规范(转自Unity3D群)

    本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的.当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸.单位,模型归类塌陷.命名.节点编辑, ...

  7. unity支持的模型数据格式,unity3d模型制作规范

    1. 单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例.统一单位为米. 2 ...

  8. Unity3d 数字模型制作规范

    数字模型制作规范 本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的.当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸.单位,模型归类塌陷 ...

  9. Unity3D 模型制作规范

    转自:http://blog.sina.com.cn/s/blog_b73d49ee010188l6.html 本文提到的所有数字模型制作,全部是用 3D MAX 建立模型,即使是不同的驱动擎,对模型 ...

最新文章

  1. Android使用SAX解析XML(6)
  2. c语言二分法查找一个数_算法简解-二分查找
  3. XSSFWorkbook与HSSFWorkbook的区别
  4. nuxt webpack配置css,基于nuxt通过webpack配置ant-Design-vue的主题切换配置
  5. SVN的配置与使用方法
  6. cxGrid 怎样才能让不自动换行 WordWrap:=false
  7. EF6.0新特性-DbCommandInterceptor实现非SQL端读写分离
  8. 引言:扇贝 2017 服务端技术回顾
  9. 没有灵魂的微信小程序代码转支付宝小程序代码
  10. 百度Echarts 全国省市地图 动态数据图形报表
  11. c#控制台应用程序读取 config
  12. bch verilog代码_(15-7-2)BCH Verilog HDL 语言编写的(15,7,2)BCH编码和译码功能 VHDL-FPGA- 272万源代码下载- www.pudn.com...
  13. 广东省计算机设计大赛文档,广东省大学生计算机设计大赛.doc
  14. ACR2010_中轴型SpA患者使用TNF拮抗剂治疗后放射学进展与全身炎症消退相关
  15. 北京邮电/北京航空航天大学上机题目
  16. 应用市场建站系统 171cms app下载站源码
  17. 【Unity3D实现自定义调色板】
  18. 信息安全技术期末总复习
  19. VR写实材质技术实例教程
  20. 线程池有哪几种状态,分别是如何发生变化的?

热门文章

  1. 阅读:朱自清《大学的路》
  2. 分享一个运维同学常用的站点监测和测速网站17ce.com, 备用
  3. 手写Android性能监测工具,支持Fps/流量/内存/启动等
  4. cesium 近地天空(天空盒子)
  5. 达林顿管 ULN2803
  6. 数字(数码)舵机和模拟舵机的区别
  7. C#小项目飞翔的小鸟游戏详细教程(Flying bird),基于Winform框架
  8. 造轮子前先看看现有的开源轮子
  9. Minecraft我的世界服务器配置记录
  10. 评高级工程师职称论文发表的要求有哪些