Explicación detallada de la implementación del retraso de Unity
]]Crear retrasos en la unidad es esencial para administrar los flujos de juegos, clasificar eventos y simular el comportamiento del mundo real. Aquí hay algunas formas de lograr el retraso:
1.
startCoroutine
waitforseconds
: pausa la ejecución por un tiempo especificado (afectado por la velocidad del juego). WaitforSecondSrealTime
: pausa la ejecución por un tiempo especificado (no afectado por la velocidad del juego). Ejemplo:
2.
IEnumerator WaitForSecondsExample()
{
// 旋转90度
transform.Rotate(Vector3.right * 90);
// 等待4秒(不受游戏速度影响)
yield return new WaitForSecondsRealtime(4);
// 旋转40度
transform.Rotate(Vector3.right * 40);
// 等待2秒(受游戏速度影响)
yield return new WaitForSeconds(2);
// 旋转20度
transform.Rotate(Vector3.right * 20);
}
o para bucle de
: aumente gradualmente el temporizador hasta que se alcance el valor deseado.
rendimiento de return null
: pausa ejecución de un marco.
IEnumerator TimeBasedloopExample ()
{
// girar 90 grados
transform.rotate (vector3.right * 90);
// espera 4 segundos (afectado por la velocidad del juego)
Temporizador de flotación = 0;
Mientras (temporizador 3.
IEnumerator TimeBasedLoopExample()
{
// 旋转90度
transform.Rotate(Vector3.right * 90);
// 等待4秒(受游戏速度影响)
float timer = 0;
while (timer
: la ejecución no se suspende hasta que la condición sea verdadera.
Waitwhile
: pausa Ejecución cuando la condición es verdadera.
IEnumerator WaitUtilexample ()
{
// espera a que el puntaje del jugador alcance los 100
rendimiento return nuevo waituntil (() => jugadorescore> = 100);
// Cargue el siguiente nivel
Scenerager.Loadscene ("NextLevel");
} 4.
: Programe una función para ejecutar después de un retraso especificado.
IEnumerator WaitUntilExample()
{
// 等待玩家分数达到100
yield return new WaitUntil(() => playerScore >= 100);
// 加载下一关
SceneManager.LoadScene("NextLevel");
}
: similar a Invoke , pero la función se llama repetidamente a intervalos de tiempo especificados.
Invoke ("Feeddog", 5);
InvokePeating ("MovePlayer", 0.5f, 0.2f);
]
time.deltatime
: se usa para medir el tiempo entre los marcos.
if
Invoke("FeedDog", 5); // 5秒后调用FeedDog()
InvokeRepeating("MovePlayer", 0.5f, 0.2f); // 每0.2秒调用MovePlayer(),持续0.5秒。
Ejemplo:
Resuelve tu problema:
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3