Unity3D - 2 模擬太陽系

Unity3D - 模擬太陽系

模擬太陽系動態圖(如不能顯示請點進去訪問)

首先是製做太陽系中的每一個行星,基本上都是先建立Sophere,而後改變起始位置,添加材質和貼圖,這裏就不贅述了。
模擬太陽系 - 1
給每一個行星建立材質包:
行星材質git

以後就是建立一個行星的移動腳本使得行星繞太陽公轉起來,這裏須要注意的就是隨機選取或者本身設一個參照軸,使得每顆行星公轉的法平面不一樣。github

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
    public Transform origin;
    public float speed;
    float ry, rx;
    // Use this for initialization  
    void Start()
    {
        speed = Random.Range(9, 12);
        rx = Random.Range(10, 60);
        ry = Random.Range(10, 60);
    }

    // Update is called once per frame  
    void Update()
    {
        this.transform.RotateAround(origin.position, new Vector3(0, rx, ry), speed * Time.deltaTime);
    }
}

將腳本掛載到全部行星上後全部行星就能動起來了。可是行星還不能自轉,因而添加一個自轉腳本掛載到全部星球上:dom

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotation : MonoBehaviour {

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        this.transform.RotateAround(this.transform.position, Vector3.up, Random.Range(1, 3));    
    }
}

這時全部的行星的移動就已經搞定了,須要注意的就是月亮繞地球的旋轉須要一個單獨的腳本,設定以地球爲旋轉圓心:this

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Moon_Move : MonoBehaviour {
    public Transform origin;
    public float speed = 4;
    float ry, rx;
    // Use this for initialization  
    void Start()
    {
        rx = Random.Range(10, 60);//隨機選取旋轉軸向量
        ry = Random.Range(10, 60);
    }

    // Update is called once per frame  
    void Update()
    {
        this.transform.RotateAround(origin.position, new Vector3(0, rx, ry), speed * Time.deltaTime);
    }
}

最後發現太陽系太過孤單,太空怎麼能少了星海做爲背景?添加一個背景板,貼上星空的圖片做爲背景美化一下:
星空背景spa

相關文章
相關標籤/搜索