到目前为止,我已经尝试过了。我想在场景中传递变量的值。我该如何保持价值。我想从一个场景到另一个场景获取游戏对象的位置,但脚本重新初始化了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)
所有困难都不是要清楚你完全尝试了什么,我可以看到你试图使用DontDestroyOnLoad
。这将是保持脚本在几个场景中持续存在的正确方法。使用中只有一个小错误。这就是start()
中的应用程序。
在第一次调用任何Update方法之前启用脚本时,在帧上调用Start。
您不想在开始时使用它,而是希望在awake()
中使用它。
加载脚本实例时会调用Awake。
为确保在致电DontDestroyOnLoad
之前,您还可以设置transform.parent = null
以防止从其他来源删除。只有当它是对象的孩子时才会出现这种情况。
不要忘记重新运用这个逻辑。无论何时加载新场景,都会再次触发启动iirc。这意味着在场景加载时,如果您保存了以前的对象,则会再次销毁它。
// If we do not have a instance yet
if (instance == null)
{
Debug.Log("Instance null");
instance = this;
}