Unity3D制作简单的太阳系

 原地址

这次要实现一个简单的太阳系,太阳本身自带光源,其他星球围绕太阳的转速不一样(越远的公转越慢),且不在一个法平面上。

        首先,在场景中创建1个太阳和9大行星,然后将它们分别命名。9大行星的排列顺序是:水星、金星、地球、火星、木星、土星、天王星、海王星、冥王星?然后将它们延X轴依次排列开,这样做的目的是可以很容易知道行星的旋转法线是(0,Y,Z),因此要确保行星不在一个法平面上,只需确保Y/Z不相等即可。

                    

        希望把太阳和其它行星区分开来,我决定给太阳以光明(我说要有光)。怎么办呢?Unity中并没有自发光组件,如果我们尝试在太阳上添加一个点光源,那么你肯定会发现奇怪的现象,太阳本身不发光,却会照亮他人...


              

        所以我使用了Unity第三方插件Glow11,Unity载入插件的方法:menu->Assests->import package->custom package,注意路径不能有中文。Glow11的使用方法:在主摄像机上添加Glow11组件,创建一个Material材质球,选择Shader为Glow11的自发光shader,将材质球挂载到Sun对象上,调整材质球和点光源颜色即可。



        接下来就是写脚本啦,脚本很简单,主要使用了Transform对象的RotateAround方法。该方法接受3个参数,第一个是围绕的旋转点,在这里即太阳的位置,第二个是旋转的法向量,在这里法向量在(0,Y,Z)平面上,第三个是旋转的速度。为了方便设置旋转中心和速度,我将它们设置成了公有变量。

public class rotate : MonoBehaviour {

    public Transform origin;
	public float speed = 20;
	float ry, rz;

	void Start() {
		ry = Random.Range(1, 360);
		rz = Random.Range(1, 360);
	}
	
    void Update () {
		Vector3 axis = new Vector3(0, ry, rz);
		this.transform.RotateAround(origin.position, axis, speed*Time.deltaTime);
	}
}
       随机Y和Z让行星尽量不在一个法平面上旋转。将脚本挂载到每一个行星上面,并设置好旋转中心(太阳)和旋转速度即可。

        为了让行星运行的轨迹显现出来,可以给每个行星添加足迹组件(effects->trailer render):




最终运行结果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值