2015-10-26 2 views
1

До сих пор я пробовал это. Я хочу передать значение переменной по всей сцене. Как сохранить значение. Я хочу получить позицию игрового объекта из одной сцены в другую, но сценарий повторно инициализировал значение переменной GameObject v.Передача и сохранение значения переменной по сцене

using UnityEngine; 
using System.Collections; 

public class Maintainer : MonoBehaviour { 

public GameObject v;//I want to maintain this value across the scene 
public GameObject cameraGO; 
static Maintainer instance; 

// Use this for initialization 
void Awake() { 

} 

void Start() { 

    Debug.Log("awake "); 

    if (instance != null) 
    { 
     Debug.Log("Instance not null"); 
     //Dont want new 
     Destroy(gameObject); 
    } 
    else 
    { 
     Debug.Log("instance is null"); 
     DontDestroyOnLoad(gameObject); 
     instance = this; 
    } 
    //DontDestroyOnLoad(gameObject.transform); 
} 

// Update is called once per frame 
void Update() { 

    if (cameraGO != null) 
    { 
     v = cameraGO; 
     Debug.Log("camera position " + cameraGO); 
    } 
    else { 
     Debug.LogError("Camera not found!"); 
    } 

    Debug.Log("Camera Position : "+ v); 

} 

void OnGUI() { 
    if (GUI.Button(new Rect(10, 10, 150, 100), "Load Scene 2")){ 
     print("You clicked the button!"); 
     Application.LoadLevel ("Scene2PassValue"); 
    } 
    if (GUI.Button(new Rect(10, 150, 150, 100), "Load Scene 1")) 
    { 
    // Debug.Log("Camera Position : " + v.transform.position); 
     print("You clicked the button!"); 
     Application.LoadLevel("Scene1PassValue"); 
    }   
} 
} 
+0

Вы пытались сделать значение статическим полем класса? –

+0

Можете ли вы уточнить? Какое значение вы пытаетесь передать, и значение, которое вам нужно для ссылки в другом классе? – Takarii

+0

@Takarii gameobject v value –

ответ

0

Все жесткое это не ясно, что вы пытались точно, я вижу, что вы пытались использовать DontDestroyOnLoad. Это было бы правильным способом сохранить ваш сценарий на протяжении нескольких сцен. В использовании есть небольшая ошибка. И это приложение в start().

Пуск вызывается в кадре, когда сценарий активирован непосредственно перед вызовом любого из методов Update в первый раз.

Вместо того чтобы использовать его в начале, вы захотите использовать его в awake().

Awake вызывается, когда экземпляр сценария загружается.

Просто чтобы убедиться, прежде чем вызвать DontDestroyOnLoad вы можете также установить transform.parent = null, чтобы предотвратить удаление из других источников. Этот курс является только в том случае, если он является дочерним объектом.

И не забудьте переделать эту логику. Всякий раз, когда вы загружаете новую сцену, запуск запускается снова iirc. Это означало бы, что на сцене загрузиться, если вы сохранили свой предыдущий объект, вы уничтожите его снова.

// If we do not have a instance yet 
if (instance == null) 
{ 
    Debug.Log("Instance null"); 
    instance = this; 
} 
+0

. Я добавил свои условия для пробуждения функции но проблема все еще сохраняется, пока я хочу сохранить позицию игрового объекта v по всей сцене –

Смежные вопросы