1. 程式人生 > >Unity學習日記-Demo再升級,Script建立GameObject物件

Unity學習日記-Demo再升級,Script建立GameObject物件

上次成功的建立了一個小型的場景,這次目的是使用指令碼來進行場景中物件的建立。

第一步的目的如下,在一個平面上批量的建立黃色的Cube。


建立Cube使用的語句是

				GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
然後給cube寫入位置資訊和顏色資訊
				cube.transform.position = new Vector3 (x, 0.5f, z);
				cube.GetComponent<Renderer> ().material.color = new Color (1f, 1f, 0f);
貼上完整程式碼,在場景裡面新建一個Empty GameObject,然後把Script附在Object,就可以看到效果了。
using UnityEngine;
using System.Collections;
//[ExecuteInEditMode]
public class CreateCube : MonoBehaviour {

	// Use this for initialization
	void Start () {
		int n = 1;
		for (int x = -4; x < 5; x = x + 2) {
			for (int z = -4; z < 5; z = z + 2) {
				GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
				cube.transform.position = new Vector3 (x, 0.5f, z);
				cube.GetComponent<Renderer> ().material.color = new Color (1f, 1f, 0f);
				Debug.Log (">> Cube " + n + " Created.");
				n++;
			}
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
[ExecuteInEditMode]
這條語句可以讓我們在編輯模式就能看到新建的Cube們,如果註釋掉,那麼在Play Mode才能看到它們。但如果啟用這句話的時候,最後會生成茫茫多的Cube。。。

好的,下面我們再來升級一下,我們希望這回的小方塊們也能像上次一樣,在滑鼠懸停的時候改變顏色。方法非常簡單,只需要在生成Cube之後,為這個cube增加上次我們寫的指令碼元件
cube.AddComponent<SwitchLight> ();
不要太方便23333。

下面再來,生成一圈cube。像這樣:


思路是,生成一個cube,進行旋轉和位移,再生成下一個。

Unity裡面旋轉有好幾種表示方式,比如四元數和尤拉角,我還沒深入研究,因此沒有寫旋轉的函式,而是直接修改方塊的Rotation屬性。

			GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
			cube.transform.position = new Vector3 (0, 0.5f, 0);
			cube.transform.rotation = Quaternion.Euler (0, 30 * i, 0);
			cube.transform.Translate (0, 0, 3);

仍然很粗暴,可以看到之前說了好幾次的首字母大小寫的問題,第二三行,position和rotation開頭小寫,所以是變數,兩句話都是直接的賦值,而第四行Translate開頭大寫,是一個函式,表示沿著z軸移動3個單位。

貼完整程式碼

using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class CreateCubeCircle : MonoBehaviour {

	// Use this for initialization
	void Start () {
		for (int i = 0; i < 12; i++) {
			GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
			cube.transform.position = new Vector3 (0, 0.5f, 0);
			cube.transform.rotation = Quaternion.Euler (0, 30 * i, 0);
			cube.transform.Translate (0, 0, 3);
			cube.GetComponent<Renderer> ().material.color = new Color (0.8f, 0.8f, 0f);
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

至此,對我而言Unity場景搭建相關的學習可以告一段落了(我的目的也僅僅是Unity中搭建一個圓周形揚聲器陣列),接下來要把重點轉向Unity中的音訊處理了。

では、以上。