using UnityEngine; using UnityEngine.SceneManagement; /// /// This class is attached to a "boundary" in a scene. It handles moving from the /// current scene to the next scene that the "boundary leads to. For example, this /// script can be attached to a collider along the side of the scene that leads /// from a cityscape to an overland.Or this script can be attached to a collider /// that represents the door on a building that leads to the interior of the building. /// /// SETUP /// BoxCollider2D /// Add a BoxCollider2D to the scene where the "boundary" exists.This class makes /// use of the object's tag to determine the destination, so add a tag that matches /// the name of the destination.The name of the destination will match a key in a /// Dictionary in the NavigationManager. So make sure the spelling matches. Also use /// the icon feature to make the collider easier to see in the scene view. /// public class NavigationPrompt : MonoBehaviour { /// /// Used to track the player's starting position on the map when the scene is loaded. /// public Vector3 startingPosition; /// /// When the player object enters the "boundary" check the tag of the boundary /// and compare it to the Dictionary values in the NavigationManager. If the /// manager has an entry for the tag AND allows navigation to the tag, then /// this method will load the scene that matches the tag. /// /// NOTE: Notice that all three things match; the tag, the key in the Dictionary, /// and the name of the scene. /// /// void OnCollisionEnter2D(Collision2D col) { // Check if the tag on this object is defined in the Nav Manager if (NavigationManager.CanNavigate(this.tag)) { // Log the tag so we can track what we are trying to find in the Dictionary Debug.Log("attempting to exit via " + tag); // Use the NavigationManager to load the scene whose name matches the tag NavigationManager.NavigateTo(this.tag); // Should we save the player's position on the map? GameState.saveLastPosition = false; // Save the Player's position on the map so that when we return the object // will be in the right place GameState.SetLastScenePosition(SceneManager.GetActiveScene().name, startingPosition); } } /// /// Use this method for objects that are set as triggers. /// /// void OnTriggerEnter2D(Collider2D col) { if (NavigationManager.CanNavigate(this.tag)) { Debug.Log("attempting to exit via " + tag); NavigationManager.NavigateTo(this.tag); GameState.saveLastPosition = false; GameState.SetLastScenePosition(SceneManager.GetActiveScene().name, startingPosition); } } }