Unity控制物體生成–協程方法
(一)協程的定義與啟動
//創建協程,命名Generate,并定義內容
private IEnumerator Generate()
{
yield return new WaitForSeconds(3f);//協程需要使用yield
Debug.Log("過了3s");
}
//使用StartCoroutine方法,傳入協程引數,啟動協程
StartCoroutine(Generate());
//停止協程
StopCoroutine(Generate());
(二)使用協程控制物體生成
1.首先我們創建或找到要生成的物體,存盤為預置體,這里以一個藍色方塊為例,可以創建一個地板來作為參照物方便觀察和設定生成范圍,


ps:將藍色方塊拖入下方資源檔案夾存盤為預置體,然后將場景中的藍色方塊洗掉掉,留下一個空白的場景,
2.創建一個空物體作為藍色方塊的生成器,命名為BlockCreater,創建管理方塊生成的腳本,命名BlockGenerator,并將腳本拖拽給BlockCreater,然后開始撰寫腳本,

3.腳本代碼如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockGenerator : MonoBehaviour
{
public GameObject BlueBlock;//定義一個GameObject類用來代表方塊
public float MaxRange;//定義兩個值來控制生成物體的坐標值,避免修改腳本來除錯生成范圍
public float MinRange;
public Coroutine coroutine;//定義一個協程變數來獲取協程的啟動與關閉
void Start()
{
StartRun(); //為了方便演示,在游戲一開始就啟動協程,也可以在用于點擊事件或者別的呼叫時再啟動協程,
Invoke("StopRun", 9);//協程啟動后會每隔3s生成一個方塊,但是在第9秒后呼叫關閉協程的方法,使協程關閉,
//關閉協程的方法同樣也可以被別的參考或事件觸發,這里不做詳解,
}
void Update()
{
}
//創建生成物體的方法
private void BlockCreat()
{
//使用Instantiate方法時設定生成的物體x和y軸為隨機值,這里也可以設定三個坐標全隨機,方便演示就只改變x和y軸,
//Quaternion.identity為默認旋轉(即不旋轉),this.transform使生成的物體為生成器的子物體,
GameObject.Instantiate(BlueBlock, new Vector3(Random.Range(MinRange, MaxRange), Random.Range(MinRange, MaxRange), -2.4f), Quaternion.identity, this.transform);
}
//創建協程,命名Generate,并定義內容
private IEnumerator Generate()
{
while(true)//用while寫個死回圈讓協程一直啟動,
{
BlockCreat();
// Debug.Log("生成了一個方塊");
yield return new WaitForSeconds(3f);//協程的等待時間是3s
}
}
//定義一個負責啟動協程的方法
private void StartRun()
{
coroutine= StartCoroutine(Generate());
}
//定義一個負責關閉協程的方法
private void StopRun()
{
StopCoroutine(coroutine);
}
}
4.在外部腳本中設定MaxRange和MinRange,協程每3s生成一個隨機位置的方塊,在第九秒時停止協程,效果圖:


(三)總結:協程不僅能控制物體生成,該方法可以用來控制游戲中的大部分事件和物體行為,擁有更好的封裝性,更方便代碼的撰寫和管理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236670.html
標籤:其他
上一篇:微信小游戲報錯修復
下一篇:飛機大戰
