Re: [請益] Unity StartCoroutine for loop

作者: gyd (阿龍哥)   2017-01-03 01:00:08
這是我重現的code, 在pc上執行起來沒問題
( 推薦一個plugin http://u3d.as/5E8 )
從你的描述上看, 你應該有做所謂的暫停的功能
請檢查你是否有在特定條件下把Time.timeScale設為0 (或小值, 如0.05f)
並且請在切Scene前或切Scene後將其重設為1
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class GameControl : MonoBehaviour
{
float startWait = 0.5f;
float spawnWait = 0.5f;
float waveWait = 0.5f;
int hazardCount = 5;
float xMin = -10f;
float xMax = 10f;
float yMax = 10f;
bool gameOver = true;
int waveCount = 1;
void Start()
{
StartCoroutine (SpawnWaves ());
}
IEnumerator SpawnWaves ()
{
yield return new WaitForSeconds (startWait);
while(true)
{
for (int i = 0; i < hazardCount; ++i){
Vector3 spawnPosition =
new Vector3 (Random.Range (xMin, xMax), yMax, 0);
Debug.LogFormat( "{0} trying to create enemy: {1} at {2}",
waveCount, i, spawnPosition );
yield return new WaitForSeconds (spawnWait);
}
waveCount++;
yield return new WaitForSeconds (waveWait);
if( waveCount > 3 )
{
Debug.Log( "Restart" );
Reload();
break;
}
}
}
void Reload()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
※ 引述《smailzhu (嗯嗯)》之銘言:
: 各位前輩,小弟我在練習開發android上的遊戲
: 我在電腦上執行
: SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex) ;
: 可以成功的重新開始這個scene
: 但是當我輸出成APK到手機上執行時
: 敵人就沒有辦法順利生成
: 我敵人生成的方式是在start()內呼叫 StartCoroutine (SpawnWaves ());
: IEnumerator SpawnWaves (){
: yield return new WaitForSeconds (startWait);
: while(true){
: for (int i = 0; i < hazardCount; ++i){
: Vector3 spawnPosition =
: new Vector3 (Random.Range (xMin, xMax), yMax, 0);
: //我有測試在這邊將xMin,xMax,yMax,hazard,hazardCount,i,Time.time顯示在螢幕上
: //在還沒有重新執行時i都順利增加,Time.time也會跑,可是當我重新開始時i跟時間
: //就只會卡在一個值了
: Instantiate (hazard, spawnPosition, transform.rotation);
: yield return new WaitForSeconds (spawnWait);
: }
: yield return new WaitForSeconds (waveWait);
: if (gameOver) {
: restartText.text = "Double click to Restart";
: restart = true;
: break;
: }
: }
: }
: 想請教各位前輩可以幫我提點一下嗎,謝謝
作者: gyd (阿龍哥)   2017-01-03 01:01:00
補充一下, 在此前題下, 會卡住不是因為Coroutine, 是因為WaitForSeconds
作者: smailzhu (嗯嗯)   2017-01-03 04:40:00
謝謝提點,我晚點來試試是不是延遲的問題成功了,謝謝你,我把三個延遲設初使值後又移掉還是正常了囧我覺得納悶的是為什麼我當初在測試電腦版正常,手機卻無法...
作者: madturtle (旅者‧愚人‧夢想家 )   2017-01-03 13:25:00
你那幾個public 變數是怎麼設的?有把game controller做成prefab 嗎?
作者: smailzhu (嗯嗯)   2017-01-06 21:18:00
我在Instantiate裡的hazard有做成prefab前面的public 是設public float

Links booklink

Contact Us: admin [ a t ] ucptt.com