Среда, 27 Ноября 2024, 07:42

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Чтоб переменные объекта передавались через сцены
kinoooshnikДата: Суббота, 04 Октября 2014, 03:40 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Привет!
Где-то пол года назад я увидел урок про объект, который передавался через сцены. На нем был скрипт, у которого были переменные, и они соответственно передавались через все сцены. Но сейчас я не смог найти его, а он мне очень нужен.
Может кто знает как про уроки которые об этом рассказывают или хотя бы про то, как реализовать это в коде.
LertmindДата: Суббота, 04 Октября 2014, 04:54 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Это использование паттерна Singleton. Его полно в инете. Например, здесь хитрый, здесь попроще и с объяснениями. Приложу ещё код из книги Pro Unity Game Development with C#:
Код
//GameManager
//Singleton and persistent object to manage game state
//For high level control over game
//--------------------------------------------------------------
using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour
{
    //C# property to retrieve currently active instance of object, if any
    public static GameManager Instance
    {
     get
     {
      if (instance == null) instance = new GameObject ("GameManager").AddComponent<GameManager>(); //create game manager object if required
      return instance;
     }
    }
    //Internal reference to single active instance of object - for singleton behaviour
    private static GameManager instance = null;
       
    // Called before Start on object creation
    void Awake()
    {    
     //Check if there is an existing instance of this object
     if((instance) && (instance.GetInstanceID() != GetInstanceID()))
      DestroyImmediate(gameObject); //Delete duplicate
     else
     {
      instance = this; //Make this object the only instance
      DontDestroyOnLoad (gameObject); //Set as do not destroy
     }
    }
    public void RestartGame()
    {
     //Load first level
     Application.LoadLevel(0);
    }
    public void ExitGame()
    {
     Application.Quit();
    }
}

Добавляешь скрипт на пустой gameObject, чтобы использовать в другом скрипте GameManager.Instance._член_класса_ (например GameManager.Instance.RestartGame()). Свои переменные/методы добавляй без static.


Сообщение отредактировал Lertmind - Суббота, 04 Октября 2014, 05:15
kinoooshnikДата: Суббота, 04 Октября 2014, 09:21 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Lertmind, спасибо, то, что нужно. И спасибо тем, кто изменил название темы на более понятную.
allodsДата: Суббота, 04 Октября 2014, 12:16 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Вроде можно не удалять объект при загрузке другого левла. И он сохранит все переменные
NEBRДата: Суббота, 04 Октября 2014, 12:24 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Нужно создать объект, в скрипте, висящем на нем, должна быть функция DontDestroyOnLoad
Тогда из сцены в сцену объект не будет уничтожатся, соответственно, и переменные в нем сохранят свои значения


King Size #Gamiron12
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг