Perpaduan menyediakan pelbagai kaedah untuk menunggu atau menjeda skrip.
<.> 1. Gunakan pembetulan dan
Ini adalah kaedah yang paling mudah dan langsung. Letakkan kod yang anda perlukan untuk menunggu dalam fungsi Coroutine, dan gunakan masa menunggu WaitForSeconds
yang ditentukan. Ingat, fungsi coroutine perlu dimulakan dengan .
WaitForSeconds
<.> 2. Gunakan pembetulan dan StartCoroutine(yourFunction)
private void Start() { StartCoroutine(Waiter()); } private IEnumerator Waiter() { // 旋转 90 度 transform.Rotate(new Vector3(90, 0, 0), Space.World); // 等待 4 秒 yield return new WaitForSeconds(4); // 旋转 40 度 transform.Rotate(new Vector3(40, 0, 0), Space.World); // 等待 2 秒 yield return new WaitForSeconds(2); // 旋转 20 度 transform.Rotate(new Vector3(20, 0, 0), Space.World); }
<<> dan adalah bahawa ia menggunakan masa yang tidak sesuai untuk menunggu. WaitForSecondsRealtime
tunjukkan masa menunggu WaitForSecondsRealtime
WaitForSeconds
Time.timeScale
Kaedah ini sesuai untuk adegan yang perlu memaparkan masa menunggu, seperti pemasa. Ia juga membolehkan operasi mengganggu semasa proses menunggu. WaitForSecondsRealtime
private void Start() { StartCoroutine(WaiterRealtime()); } private IEnumerator WaiterRealtime() { // 旋转 90 度 transform.Rotate(new Vector3(90, 0, 0), Space.World); // 等待 4 秒 (不受 Time.timeScale 影响) yield return new WaitForSecondsRealtime(4); // 旋转 40 度 transform.Rotate(new Vector3(40, 0, 0), Space.World); // 等待 2 秒 (不受 Time.timeScale 影响) yield return new WaitForSecondsRealtime(2); // 旋转 20 度 transform.Rotate(new Vector3(20, 0, 0), Space.World); }
Time.deltaTime
<.> 4. Gunakan pembetulan dan fungsi
menunggu keadaan tertentu untuk bertemu. Sebagai contoh, tunggu skor pemain mencapai 100 mata sebelum memuatkan tahap seterusnya.
private bool quit = false; private void Start() { StartCoroutine(WaiterWithTimer()); } private IEnumerator WaiterWithTimer() { float counter = 0; float waitTime = 4; while (counter < waitTime) { counter += Time.deltaTime; Debug.Log("已等待时间:" + counter + " 秒"); if (quit) yield break; yield return null; } // ... 剩余代码 ... }
<.> 5. Gunakan pembetulan dan
private bool quit = false; // ... (WaiterWithTimer 函数) ... private IEnumerator WaitTimer(float waitTime) { float counter = 0; while (counter < waitTime) { counter += Time.deltaTime; Debug.Log("已等待时间:" + counter + " 秒"); if (quit) yield break; yield return null; } }
WaitUntil
Menunggu keadaan tertentu tidak dipenuhi. Sebagai contoh, tunggu pemain untuk menekan kekunci ESC dan keluar dari permainan.
<.> 6. Gunakan
fungsiprivate float playerScore = 0; private int nextScene = 0; private void Start() { StartCoroutine(SceneLoader()); } private IEnumerator SceneLoader() { Debug.Log("等待玩家分数达到 >= 10"); yield return new WaitUntil(() => playerScore >= 10); Debug.Log("玩家分数 >= 10。加载下一关"); nextScene++; SceneManager.LoadScene(nextScene); }
fungsi panggilan kelewatan. WaitWhile
fungsi dan
private void Start() { StartCoroutine(InputWaiter()); } private IEnumerator InputWaiter() { Debug.Log("等待按下 Escape 键"); yield return new WaitWhile(() => !Input.GetKeyDown(KeyCode.Escape)); Debug.Log("按下 Escape 键。退出应用程序"); Quit(); } // ... (Quit 函数) ...
Kaedah serupa 3, tetapi jangan gunakan coroutine. Ini akan sering memanggil, kecekapan yang rendah, tidak disyorkan untuk menunggu lama. Invoke
Kaedah yang harus dipilih bergantung pada senario aplikasi tertentu. Untuk latency mudah, atau
.
Atas ialah kandungan terperinci Bagaimana cara membuat skrip menunggu/tidur dalam perpaduan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!