Unity 5. Скрипт перехода между сценами

Unity 5. Скрипт перехода между сценами

Скрипт перехода между сценами

Давайте рассмотрим скрипт перехода между сценами через взаимодействие с объектом.

Допустим на сцене есть предмет или персонаж, при взаимодействии с которым вам необходимо перейти на другую сцену.
Создадим два 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;
       }
    }

Повесьте его так же на вашего персонажа.

На видео показан пример использования этих скриптов.

Предыдущий урок            На главную          Следующий урок

Обсудить на форуме


Оставить Комментарий