Unity - 簡單實例化的應用


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

代碼描述:

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()配合實現功能
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM