Unity3D學習筆記(3)—— 製作簡單的太陽系
這次要實現一個簡單的太陽系,太陽本身自帶光源,其他星球圍繞太陽的轉速不一樣(越遠的公轉越慢),且不在一個法平面上。
首先,在場景中建立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個引數,第一個是圍繞的旋轉點
隨機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); } }
為了讓行星執行的軌跡顯現出來,可以給每個行星新增足跡元件(effects->trailer render):
最終執行結果