- Home /
i saw an answer for this question before
how to add time delay
i want to add time delay between scenes to this code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MoveToNextLevel : MonoBehaviour
{
public int nextSceneLoad;
// Start is called before the first frame update
void Start()
{
nextSceneLoad = SceneManager.GetActiveScene().buildIndex + 1;
}
public void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == "Player")
{
if(SceneManager.GetActiveScene().buildIndex == 31) /* < Change this int value to whatever your
last level build index is on your
build settings */
{
Debug.Log("You Completed ALL Levelws");
//Show Win Screen or Somethin.
}
else
{
//Move to next level
SceneManager.LoadScene(nextSceneLoad);
//Setting Int for Index
if (nextSceneLoad > PlayerPrefs.GetInt("levelAt"))
{
PlayerPrefs.SetInt("levelAt", nextSceneLoad);
}
}
}
}
}
Just trying to clarify here, do you want a delay right before the call to Scene$$anonymous$$anager.LoadScene()
while the player is still in that scene for like post-game stats, or do you want to have some sort of delay between the scenes with a black screen or loading screen?
Answer by Bentley · May 29, 2020 at 02:08 AM
If you're wanting to just add a delay within the current scene, you can use a coroutine for that. You would place your lines 22-28 (though the line numbers are off because the code didn't get formatted properly at the beginning) into a separate function that returns and IEnumerator, and then call that function using StartCoroutine(). Inside of that function you can use return yield WaitForSeconds()
to wait before executing the scene-changing code. Here's what that would look like in your code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; /* SUBSCRIBING TO MY YOUTUBE CHANNEL: 'VIN CODES' WILL HELP WITH MORE VIDEOS AND CODE SHARING IN THE FUTURE :) THANK YOU */
public class MoveToNextLevel : MonoBehaviour
{
public int nextSceneLoad;
// Start is called before the first frame update
void Start()
{
nextSceneLoad = SceneManager.GetActiveScene().buildIndex + 1;
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
if (SceneManager.GetActiveScene().buildIndex == 31) /* < Change this int value to whatever your
last level build index is on your
build settings */
{
Debug.Log("You Completed ALL Levelws");
//Show Win Screen or Somethin.
}
else
{
StartCoroutine(ChangeScenes());
}
}
}
IEnumerator ChangeScenes()
{
yield return new WaitForSeconds(5.0f);
//Move to next level
SceneManager.LoadScene(nextSceneLoad);
//Setting Int for Index
if (nextSceneLoad > PlayerPrefs.GetInt("levelAt"))
{
PlayerPrefs.SetInt("levelAt", nextSceneLoad);
}
}
}
You can learn more about coroutines in Unity here: https://docs.unity3d.com/Manual/Coroutines.html
Follow this Question
Related Questions
How Can I enable and then disable a light in unity after a certain time? 1 Answer
How does DeltaTime handle game logic ? 1 Answer
is Time.deltaTime dependent on computer speed? 2 Answers
How can i perform any action after some time interval 2 Answers
Get access to device (ex: Android) Touch and hold delay setting from unity application. 0 Answers