Скрипт перехода между сценами
Давайте рассмотрим скрипт перехода между сценами через взаимодействие с объектом.
Допустим на сцене есть предмет или персонаж, при взаимодействии с которым вам необходимо перейти на другую сцену.
Создадим два C# скрипта и назовем их Perehod и Bot. Первый вешаем на вашего персонажа, второй на тот объект с которым будете взаимодействовать.
Скрипт Perehod
using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class Perehod : MonoBehaviour { public Transform cam1; // Камера персонажа из которой будет выходить луч RaycastHit rch1; // Собственно сам луч public GameObject point; // Точка на второй сцене в которой буде появляться персонаж private bool visible; // Переменная для отображения диалога void Update () { Vector3 Direction = cam1.TransformDirection(Vector3.forward); if (Physics.Raycast(cam1.position, Direction, out rch1, 3)) { // Луч будет выходить из камеры на расстоянии 3 метра if (rch1.collider.GetComponent<Bot> ()) { // Если луч попадает на коллайдер объекта на котором есть скрип Bot if (Input.GetKeyDown (KeyCode.E)) { // и если нажимаем клавишу Е visible = true; // то переменная visible принимает значение true } } } } void OnGUI (){ //Создадим диалог if (visible) { // если visible = true GUI.Box (new Rect ((Screen.width - 300) / 2, (Screen.height - 300) / 2, 300, 300), "Диалог" ); // создается окно с двумя кнопками GUI.Label (new Rect (new Rect ((Screen.width - 300) / 2, (Screen.height - 270) / 2, 300, 300)), "?"); //текст диалога if (GUI.Button (new Rect ((Screen.width - 250) / 2, (Screen.height - 250) / 2 + 250, 250, 25), "Отмена")) // если нажать отмена { visible = false; // окно закроется } if (GUI.Button (new Rect ((Screen.width - 250) / 2, (Screen.height - 300) / 2 + 250, 250, 25), "Я хочу войти")) { // если нажать "Я хочу войти" visible = false; // опять же окно закрывается SceneManager.LoadScene("2"); // и загружается сцена 2 (название сцены, у вас оно может быть другое) transform.position = point.transform.position; // переносим персонажа в ту точку где находится наш Point } } }
На второй сцене поместите пустышку Empty, сохраните ее в префаб. Затем этот префаб перетащите на персонажа в строчку point Скрипта Perehod. Ваш персонаж будет при загрузке сцены перемещен в те координаты которые имеет point т.е. ваша пустышка.
Скрипт Bot оставьте пустым.
using UnityEngine; using System.Collections; public class Bot : MonoBehaviour { void Start () { } void Update () { } }
Добавьте ваши сцены в настройки проекта File — Build settings. Просто перенесите их туда. Первая сцена, которую планируете запускать, должна иметь индекс 0.
Так же, необходимо создать С# скрипт dontdestroy, он нужен для того что бы при переходе на новую сцену персонаж удалялся на старой и сохранил все свои параметры в новой сцене.
using UnityEngine; using System.Collections; public class dontdestroy : MonoBehaviour { public static Transform playerTransform; void Awake () { if (playerTransform = null) { Destroy(gameObject); return; } DontDestroyOnLoad(transform.gameObject); playerTransform = transform; } }
Повесьте его так же на вашего персонажа.
На видео показан пример использования этих скриптов.
Я сделал всё как тут написано но у меня не работает,что делать?
Данный скрипт актуален для Unity 5. Вы, наверное, используете современную версию Unity, поэтому что-то может не работать. Советую посмотреть урок перехода между сценами для современной версии Unity *****