Unity - 簡單實例化的應用

項目描述:每幀實例化一個隨機顏色的物體(Cube),座標在某範圍內隨機;且物體每幀都會縮小,當縮小到必定的尺寸時,就銷燬物體dom

代碼描述:ide

public class CubeSpawner : MonoBehaviour
{

    public GameObject cubePrefabVar;    //實例化物體原型
    public List<GameObject> gameObjectList; //生成物體的表
    public float scalingFactor = 0.95f;     //每次縮小的比例
    public int numCubes = 0;    //生成物體編號

    void Start()
    {   
        gameObjectList = new List<GameObject>();    //初始化
    }

    void Update()
    {
        numCubes++;
        
        //實例化一個 cubePrefabVar物體,返回類型爲GameObject,接受者是gObj
        GameObject gObj = Instantiate(cubePrefabVar) as GameObject;

        //設置物體的名字,並設置隨機顏色
        gObj.name = "Cube " + numCubes;
        Color c = new Color(Random.value, Random.value, Random.value);
        gObj.GetComponent<MeshRenderer>().material.color = c;

        //物體的座標隨機分佈在 球心(0,0,0) * 10 內
        gObj.transform.position = Random.insideUnitSphere * 10;

        //將新建立的物體添加到 已存物體表 內
        gameObjectList.Add(gObj);

        //同時建立 待刪物體表
        List<GameObject> removeList = new List<GameObject>();
  
        //遍歷 已存物體表
        foreach(GameObject goTemp in gameObjectList)
        {
            //縮小每個 已存物體的幾何尺寸
            float scale = goTemp.transform.localScale.x;
            scale *= scalingFactor;
            goTemp.transform.localScale = Vector3.one * scale;

            //當尺寸達到臨界值,則將物體添加到 待刪物體表
            if (scale <= 0.1f)
                removeList.Add(goTemp);
        }
        
        //遍歷 待刪物體表
        foreach(GameObject goTemp in removeList)
        {
            //移除對象並銷燬
            gameObjectList.Remove(goTemp);
            Destroy(goTemp);
        }    

        //備註:C#不容許在遍歷 當前List 的 foreach()內 修改當前List 內的元素;
        //故本例須要兩個 foreach()配合實現功能
    }
}
相關文章
相關標籤/搜索