上次成功的创建了一个小型的场景,这次目的是使用脚本来进行场景中物件的创建。
第一步的目的如下,在一个平面上批量的创建黄色的Cube。
创建Cube使用的语句是
GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
然后给cube写入位置信息和颜色信息
cube.transform.position = new Vector3 (x, 0.5f, z);
cube.GetComponent ().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 ().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.AddComponent ();
不要太方便23333。
思路是,生成一个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);
贴完整代码
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 ().material.color = new Color (0.8f, 0.8f, 0f);
}
}
// Update is called once per frame
void Update () {
}
}
では、以上。