实践要求:写一个程序,实现一个完整的太阳系,其他星球围绕太阳的转速必须不一样,并且不再一个法平面内。

法平面是指过空间曲线的切点,且与切线垂直的平面。要求不在一个法平面内,则在保证所有行星以及太阳在一条轴上时,另外两条轴的比例不相同即可。公转速度在RotateAround参数里面设置。如:

这个程序在课堂程序的基础上完成,使用了预制、动态生成对象,在位置上使用Vector3定好行星初始位置,使用RotateAround设置行星公转,使用Rotate设置行星自转。参数大部分参照了太阳系的参数,如行星大小,公转速度等按比例模拟。

显示效果:


制作概述:

1.制作太阳系预制

根据太阳系各行星的大小设置Transform中的Scale

想要给白色的球贴上图的,可以去网上找到太阳系贴图,直接百度搜索就好。

然后导入图片资源,再将对应的图片拖到对应的行星即可。

最后将Sun整个拖入Assets/Resources/Perfabs(这一步是为了后续改进,直接放在Hierarchy里面后面再挂载cs文件就可以直接运行)

到这预制就做好啦~

2.开始编写代码~

使用了课程中的MVC架构

新建一个RoundSun.cs

cs文件:

2.1声明对象

    public Transform Sun;
public Transform Mercury;
public Transform Venus;
public Transform Earth;
public Transform Moon;
public Transform Mars;
public Transform Jupiter;
public Transform Saturn;
public Transform Uranus;
public Transform Neptune;
public Transform Pluto;

2.2初始行星位置

void Start () {
Sun.position = Vector3.zero;
Mercury.position = new Vector3 (, , );
Venus.position = new Vector3 (, , );
Earth.position = new Vector3 (, , );
Moon.position = new Vector3 (, , );
Mars.position = new Vector3 (, , );
Jupiter.position = new Vector3 (, , );
Saturn.position = new Vector3 (, , );
Uranus.position = new Vector3 (, , );
Neptune.position = new Vector3 (, , );
Pluto.position = new Vector3 (, , );
}

2.3设置行星公转和自转

手动设置的参数,与真实太阳系有偏差

void Update () {
Vector3 a1 = new Vector3 (, , );
Vector3 a2 = new Vector3 (, , );
Vector3 a3 = new Vector3 (, , );
Vector3 a4 = new Vector3 (, , );
Vector3 a5 = new Vector3 (, , );
Vector3 a6 = new Vector3 (, , );
Vector3 a7 = new Vector3 (, , );
Vector3 a8 = new Vector3 (, , );
Vector3 a9 = new Vector3 (, , ); Mercury.RotateAround (Sun.position, a1, *Time.deltaTime);
Mercury.Rotate (Vector3.up**Time.deltaTime); Venus.RotateAround (Sun.position, a2, *Time.deltaTime);
Venus.Rotate (Vector3.up**Time.deltaTime); Earth.RotateAround (Sun.position, a3, *Time.deltaTime);
Earth.Rotate (Vector3.up**Time.deltaTime);
Moon.transform.RotateAround (Earth.position, Vector3.up, * Time.deltaTime); Mars.RotateAround (Sun.position, a4, *Time.deltaTime);
Mars.Rotate (Vector3.up**Time.deltaTime); Jupiter.RotateAround (Sun.position, a5, *Time.deltaTime);
Jupiter.Rotate (Vector3.up**Time.deltaTime); Saturn.RotateAround (Sun.position, a6, *Time.deltaTime);
Saturn.Rotate (Vector3.up**Time.deltaTime); Uranus.RotateAround (Sun.position, a7, *Time.deltaTime);
Uranus.Rotate (Vector3.up**Time.deltaTime); Neptune.RotateAround (Sun.position, a8, *Time.deltaTime);
Neptune.Rotate (Vector3.up**Time.deltaTime); Pluto.RotateAround (Sun.position, a9, *Time.deltaTime);
Pluto.Rotate (Vector3.up**Time.deltaTime);
}

这时候直接将cs挂载到Sun里,到这里已经可以运行实现啦。


接下来实现预制,动态生成对象吧。直接放代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class FirstController : MonoBehaviour, ISceneController {
void Awake() {
Debug.Log ("load sunt...\n");
SSDirector director = SSDirector.getInstance ();
director.setFPS ();
director.currentSceneController = this;
director.currentSceneController.LoadResources ();
} public void LoadResources() {
GameObject sunset = Instantiate<GameObject> (
Resources.Load <GameObject> ("Perfabs/Sun"),
Vector3.zero, Quaternion.identity);
sunset.name = "sunset";
Debug.Log ("load sunset...\n");
}
public void Pause(){
}
public void Resume(){
}
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () { }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public interface ISceneController {
void LoadResources();
void Pause();
void Resume();
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class SSDirector : System.Object {
private static SSDirector _instance; public ISceneController currentSceneController { get; set; }
public bool running{ get; set; } public static SSDirector getInstance() {
if (_instance == null) {
_instance = new SSDirector ();
}
return _instance;
} public int getFPS() {
return Application.targetFrameRate;
} public void setFPS(int fps) {
Application.targetFrameRate = fps;
}
}

在确保

在这个文件目录下

将FirstController挂载到主摄像机或者空对象即可运行

大致架构:

【Unity3D】实现太阳系的更多相关文章

  1. 用Unity3D实现太阳系仿真

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

  2. 【CityHunter】Unity3D设计AR探索模式

    为了增加游戏的乐趣性,我对项目进行了Unity3D的引入,经过一番折腾,终于做出了一个基本的AR探索模式的基本雏形. 途中的小方块就是虚拟物体,因为是静态图片,所以也不能看出什么来,只能文字形容一下: ...

  3. Unity3d学习 预设体(prefab)的一些理解

    之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体 ...

  4. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  5. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  6. warensoft unity3d 更新说明

    warensoft unity3d 组件的Alpha版本已经发布了将近一年,很多网友发送了改进的Email,感谢大家的支持. Warensoft Unity3D组件将继续更新,将改进的功能如下: 1. ...

  7. Unity3D框架插件uFrame实践记录(一)

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  8. Unity3D 5.3 新版AssetBundle使用方案及策略

    1.概览 Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代. 因此,本文的主要 ...

  9. 山寨Unity3D?搜狐畅游的免费开源游戏引擎Genesis-3D

    在CSDN上看到了<搜狐畅游发布3D游戏引擎Genesis-3D 基于MIT协议开源>(http://www.csdn.net/article/2013-11-21/2817585-cha ...

随机推荐

  1. PCB上的导线 怎么开窗 去掉绿油 把铜皮裸露

    开窗是个专业术语,你可以简单的理解为"去掉绿油,把铜皮裸露". 导线开窗用途一: 例如这个板子中的蛇形天线,就是导线开窗后的效果. 导线开窗用途二: 把需要过大电流的导线开窗,就可 ...

  2. nginx中有关命令和日志切割,配置文件加载的详细阐述

    一.Nginx简介 Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器.Nginx 已经在俄罗斯最大的门户网站── Ram ...

  3. WPF访问UserControl的自定义属性和事件

    要实现外部窗体能直接访问UserControl的属性必须把UserControl的属性定义为依赖属性: 一,在UserControl.cs中为TextBox控件的Text建立依赖属性,输入" ...

  4. 在VMWare上安装ubuntu及VMWare&amp;nbs…

    在VMWare上安装ubuntu及VMWare Tools 一.摘要 该文主要介绍了如何在虚拟机上安装ubuntu,和安装VMWare Tools设置共享文件夹,最后对ubuntu做了简单的介绍. 二 ...

  5. php中使用mysqli和pdo扩展,测试mysql数据库的执行效率。

    <?php /** * 测试pdo和mysqli的执行效率 */ header("Content-type:text/html;charset=utf-8"); //通过pd ...

  6. CI框架中,扩展验证码类。

    使用CI框架的朋友,应该都知道CI框架的的验证码辅助函数,不太好用.它需要写入到数据库中,然后再进行比对. 大家在实际项目中,好像不会这样去使用,因为会对数据库造成一定的压力. 所以,我们还是利用se ...

  7. 滴滴Booster移动APP质量优化框架 学习之旅

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 一.Booster简介 Booster是滴滴最近开源一个的移动应 ...

  8. 【原】:关于使用springmvc的responseBody注解返回json的一些总结

    配置不正确可能会出现406错误 1:首先需要导入三个jar包: 2:需要在springmvc的配置文件文件中添加转换器并开启注解驱动: 3:controller:这里返回object也是可以的; 4: ...

  9. day02-HTML(2)

    一.新知识 1.  !+tab   html5的标签结构   2.  Charset   编码 Ascll Ansi Unicode Gbk Gb2312 Big5 Utf-8   通用字符集 3.关 ...

  10. Mac下安装rJava,xlsx,ReporteRs包

    xlsx包可以用来读取excel数据,ReporteRs包可以用来直接输出word报告,这两个包都对rJava包有依赖,所以必须先安装rJava. (1)查看mac的java信息 java版本: &g ...