Stage.3 —— 太阳系

2023-12-16 04:50
文章标签 太阳系 stage.3

本文主要是介绍Stage.3 —— 太阳系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

13:所以说为什么是hero?
k :干嘛一定要是村民什么的啊
13:是牧师啊!
k :啧~
13:喂。。
k :这种毫无个性的角色定位一定都是那种一上来就领便当的啦
13:游戏还没开始呢怎么就领便当了,话说你这家伙这么看不起牧师,你自己还不是。。。
k :所以啊。。
13:(完全没在听人说话。。。)
k :我们先把太阳系那个做了吧
13:━┳━ ━┳━。。。
k :┳━━ ┳━━ 怎么了?
13:怎么说呢,究竟是习惯了还是已经麻木了呢,我自己都不太清楚了。。。
k :干嘛啦,我又怎么了,我说啊,你是不是也差不多该反省一下自己那边了啊?
13:哈?我?
k :不要每次都指望我的跳跃性思维停下来等你哦?
13:你倒是有自知之明啊。。
k :其实吧,就是那个啦,就好像写博客写到一半的时候突然发现标题写错了,然后就将错就错写下去那种感觉啦
13:这算什么感觉啊!还有别把这种很不妙的东西说出来啊。。
k :很好,那我们赶紧开始吧(打哈欠。。)
13:(一点都不好。。。)|||
k :其实说到底就是简单的旋转而已啦
13:额。。嗯,是吧
k :所以呢
13:嗯
k :你写啊
13:。。。行,我写,你闭嘴吧

//transform.RotateAround( 定点 Vector3, 旋转轴 Vector3, 旋转角度 float)
Vector3 parent_position = transform.parent;
transform.RotateAround(parent_position, Vector3. Y, speed * Time. deltaTime);

这样就可以实现让子物体围绕其上的物体旋转了,毕竟我们肯定是要把行星放到恒星下面的嘛
k :唔。。。
13:(打代码)
k :嗯。。。
13:。。。(叹气),算了,刚刚开玩笑的,你有什么就说啊
k :不对
13:啊?
k :对啊,行星不是他们所在的平面不是不一样吗,这样子的话不是都是在同一个平行面上转吗
13:但是我们一开始可以初始化他们的空间位置不在同一个平面,然后。。。额,好像不对,这样等下虽然是不在一个平面了但是不会绕太阳转而是变成绕太阳所在的垂直轴线转了。。。
k :只要绕跟行星太阳的连线垂直的那条轴线旋转就好了吧
13:也是呢,那要。。。
k :这样就好吧,我们在太阳的脚本上对行星的位置初始化

    //太阳的脚本void Start () {//获得所有行星Transform[] children = this. gameObject.GetComponentsInChildren<Transform> ();//太阳跳过int i = 1;foreach(Transform child in children) {//月球也要跳过if (child.name == "moon")continue;//随机y值float y = (float)Random.Range (0, 5);//和太阳的距离递增 radius = 10 * i,在这个范围内随机生成一个z值float z = (float)Random.Range (0, 10 * i);//根据半径和z值计算出x值float x = Mathf.Sqrt (100 * i * i - z * z);child.transform. position = new Vector3 (x, y, z);i++;}}

然后只要根据中心对称和相似性计算出旋转轴就好了,简单画一下图设一下变量就可以得到从物体位置到旋转轴的转化了

//行星的脚本
int z;
int y;
int x;
//向量投影到x,z平面上的模长
int radius_plane;
void Start () {//如果是地球,初始化月球位置if (this.transform. name == "Earth") {Transform[] earth_moon_system = this.transform. GetComponentsInChildren<Transform> ();earth_moon_system [1].transform. position = new Vector3 (1, 0, 1);}//获得this.z = transform. position. z;this.y = transform. position. y;this.x = transform. position. x;this.radius_plane = Mathf. Sqrt (x * x + z * z);
}
void Update () {this.transform. RotateAround(this.transform.parent.position,//利用垂直,根据相似性得到旋转轴,旋转点在(0,0,0)方便想象new Vector3 (Mathf.Abs(y) * z / radius_plane * -1,radius_plane,Mathf.Abs(y) * x / radius_plane * -1 ),Time. deltaTime * speed_public);//顺便自转一下this.transform. Rotate (Vector3. up * Time. deltaTime * speed_self);
}

这样就行了呢
13:(明明是笨蛋,但就是数学好。。。)
k :还差呢
13:诶?八大行星不是都在这里了吗?而且冥王星应该已经out了吧。。。
这里写图片描述
k :嗯?不是还有一个外面的一圈吗?
13:哈?
k :柯伊伯陨石带
13:说吧,从哪个电视节目里听来的
k :cctv9
13:就知道。。。嘛,其实也不难啦,用一个死循环放在协程(Coroutine)里去跑就行了
k :欸?携。。携程?跑高铁吗
13:(写下)
k :哦
13:哦什么啊,你根本就不懂吧。。。但是讲起来有点难呢,而且我也有点困了呢,你可以看看这个http://dsqiu.iteye.com/blog/2029701
k :emmmm。。。
13:但是我们这里不用太深奥的东西了,其实大概理解为一个协同的进程,就是把我们所要执行的一些可以并行的任务放到另外一个线程中去执行,这就是Coroutine的功能,关键是我们可以在代码的任何一个地方使用它。嘛,具体的话你自己看了,反正我们只需要这样写就够了

//计数
int star_dust_counter = 0;
//IEnumerator一个迭代器
IEnumerator Kuiper_Generator(){//看似是死循环,但是 yield return 语句会把控制权交还给主线程while(true){int type = Random.Range (1, 4);//我们在半径100的位置生成陨石圈float x = (float)(Random.Range (-1000, 1000) / 10.0);float z = Mathf.Sqrt (100 * 100 - x * x) * (star_dust_counter % 2 == 0 ? 1 : -1);//克隆预制体GameObject star_dust = (GameObject)Instantiate (Resources.Load("Free_Rocks/_prefabs/rock" + type), new Vector3(x, 0, z), Quaternion.identity);star_dust.transform.parent = this.transform;//同样,预制体挂有与行星相同的脚本,因为他们的行为是一样的//获取脚本的速度变量并初始化star_dust.GetComponent<PlanetActionController> ().speed_public = (float)Random.Range (5, 10);star_dust_counter++;//设置数量上限if (star_dust_counter == 100)yield break;yield return star_dust_counter;}
}

然后在Start()里面把这句加上去就好了

//开始协程
StartCoroutine (Kuiper_Generator ());

点击,运行~
这里写图片描述
k :喔~
13:还行呢
k :这岩石挺帅的呢
13:还好啦,Assets Store里面可以找到挺多的
k :切,我还以为是你自己做的呢
13:确实不是我做的。。。但是被你这么说很不爽啊
k :那这些是怎么弄的?
13:嗯?哦,这个在网上随便找一张填满整张图片的行星表面的图片就行了,然后保存到当前项目的Asset文件夹里面,然后我们在unity -> Asset 里面直接把图片拖到物体上就好了
k :这么简单呢
13:嗯,就是这样而已
k :那后面的背景呢
13:在Main Camera里添加Component -> Rendering -> Sky Box的组件就好了,然后Custom Skybox选择默认的一个Diffuse就是黑色的了
k :哦~
13:。。怎么发现你一直都在问我呢,感觉好像是在配合你跟别人解说一样感觉很恶心
k :嗯,哪里,谁啊?(棒读)我想你是太累了吧,要记得去神奇宝贝中心休息一下哦
13:原来你知道我很累啊?还有为什么是去。。。
k :那今天就到此为止了!其实我们还可以简单的给一个Sphere添加rigidbody(addForce()给他一个力), trail renderer 就可以做出流星的效果哦!
13:你倒是。。。
k :总有一天我要撕裂这虚假的天空!
13:你到底是哪个片场的!?
- 完
这里写图片描述

这篇关于Stage.3 —— 太阳系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/499161

相关文章

太阳系模型_飞机游戏JAVA084-097

来源:http://www.bjsxt.com/ 1、S01E084-087太阳系模型实操 package com.test.util;/*** 游戏中关于窗口大小的常量*/public class Constant {public static final int GAME_WIDTH = 500;public static final int GAME_HEIGHT = 500;}/

JS+HTML5的Canvas画图模拟太阳系运转

查看效果:http://hovertree.com/texiao/html5/9.htm地球自传 http://hovertree.com/texiao/html5/8.htm代码如下: <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><titl

150行Python代码模拟太阳系行星运转

今天我们用Python来模拟一下太阳系行星运动轨迹~ 先上成品图(运行效果含音乐的呦) 想要实现这样的效果并不难 准备材料 首先我们需要准备这样一些材料 宇宙背景图 背景透明的行星图   编写代码 代码分块详解 导入需要的模块 import pygame   import sys   import mat

如何在Adobe Illustrator中创建太阳系行星图标包

(本教程由寻图标icon.52112.com提供) 宇宙是广袤空间和其中存在的各种天体以及弥漫物质的总称,宇宙起源是一个极其复杂的问题。 千百年来,科学家们一直在探寻宇宙是什么时候、如何形成的。直到今天,许多科学家认为,宇宙是由大约137亿年前发生的一次大爆炸形成的。今天

OpenGL实现太阳系

效果演示 2D视角 3D视角 程序功能大致分为太阳系行星生成、公转、自转以及视角的移动,分别由相应按键控制: p/P:逆时针/顺时针自转 q/Q:逆时针/顺时针公转 l/f:线框模型/填充模型显示行星 2/3:以2D/3D视角观察太阳系,同时会生成行星轨道 点击鼠标左/右键:2D俯视高度增加/减小 w/a/s/d:控制视角向前/左/后/右移动(x、z轴) z/c:控制视

OpenGL简单实现太阳系模拟

#include "stdafx.h"#include <glut.h>#include <stdlib.h>#include "math.h"#include <gl\glaux.h> // GLaux库的头文件#pragma comment( lib, "glaux.lib") // GLaux连接库//行星序是水星、金星、地球、火星、木星、土星、天王星、和海王星//adam,h

【OpenGL】模拟太阳系

当然是先上运行效果: 再上代码: /*****************************************************Project Name: 模拟太阳系*Author: lishichengyan*Student ID: ???*Description: ???*Date: 2017.11.01*************************

太阳系三维可视化系统:探索宇宙奥秘的窗口

随着科技的飞速发展,人类对宇宙的探索已经迈入了一个全新的时代。太阳系作为我们最熟悉的家园,其奥秘一直吸引着无数科学家和天文爱好者的目光。太阳系三维可视化系统,正是一个帮助我们直观了解太阳系各行星运行规律、探索宇宙奥秘的重要工具。 一、重现太阳系的辉煌 太阳系三维可视化系统通过高精度的数据和先进的计算机技术,将太阳系的各个行星、卫星以及小行星带等天体的运行轨迹、大小、质量等属性以三维立体

用javascript伪造太阳系模型系统

这个东西,是我在读在职研的课堂上无聊的时候随便弄的,实现了椭圆和圆形的轨道运转。这些东西吧,其实都是很简单的,在游戏领域,轨道运动是很有意义的,我就顺便把代码po出来,做备忘吧。 由于是无聊时的即兴之作,并没有考虑性能优化和使用html5的canvas或者svg,只是用了最简单的div而已,要想用html5请自行实现了。 <!DOCTYPE html><html><head><title>

基于 HTML5 + WebGL 的 3D 太阳系系统

前言 近年来随着引力波的发现、黑洞照片的拍摄、火星上存在水的证据发现等科学上的突破,以及文学影视作品中诸如《三体》、《流浪地球》、《星际穿越》等的传播普及,宇宙空间中那些原本遥不可及的事物离我们越来越近,人们对未知文明的关注和对宇宙空间的好奇达到了前所未有的高度。站在更高的立足点上,作为人类这个物种中的一员,我们理所应当对我们生活的星球、所在的太阳系有一定的认识,对 8 大行星各自的运行轨道、质