Unity學習日記-Demo再升級,Script建立GameObject物件
阿新 • • 發佈:2019-02-17
上次成功的建立了一個小型的場景,這次目的是使用指令碼來進行場景中物件的建立。
第一步的目的如下,在一個平面上批量的建立黃色的Cube。
建立Cube使用的語句是
GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
然後給cube寫入位置資訊和顏色資訊
貼上完整程式碼,在場景裡面新建一個Empty GameObject,然後把Script附在Object,就可以看到效果了。cube.transform.position = new Vector3 (x, 0.5f, z); cube.GetComponent<Renderer> ().material.color = new Color (1f, 1f, 0f);
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中的音訊處理了。
では、以上。