項目描述:每幀實例化一個隨機顏色的物體(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()配合實現功能
}
}