在我的游戏中,有一个地图视图,其中包含 50x50 的图块网格。当你点击图块时,你会被发送到该图块视图并攻击事物等。就代码而言,这些“图块”之间的唯一区别是图块 ID,即。网格上的哪个数字。该数字将在 init 时传递给服务器来处理其余部分。
显然,这是图块中的唯一区别,创建场景“1”、场景“2”...场景“2500”并调用 SceneManager.LoadScene 切换到特定图块视图将是错误的。
我可以使用 DontDestroyOnLoad();当单击图块以在场景切换上保留图块 ID 时,但是 1)它只接受游戏对象而不仅仅是 int 变量 2)我不需要/不想为图块视图中的 init 以外的任何内容保留该变量。因此,虽然它可以发挥作用,但似乎有点矫枉过正。
是否有更好的做法,本质上只是将参数传递给场景加载?
您可以创建一个静态类来为您保存信息。该类不会附加到任何游戏对象,并且在更改场景时不会被销毁。这是static
这意味着只能有一个;你can't write StaticClassName scn = new StaticClassName()
创建新的静态类。您可以直接访问它们StaticClassName.SomeStaticMethod()
例如,可以访问从任何地方。请参阅此示例,了解如何在变量中存储值、更改场景,然后在该场景中使用它(请注意添加的using UnityEngine.SceneManagement;
):
附加到场景“测试”中游戏对象的普通 Unity 脚本:
using UnityEngine;
using UnityEngine.SceneManagement;
public class TestingScript : MonoBehaviour
{
void Start()
{
StaticClass.CrossSceneInformation = "Hello Scene2!";
SceneManager.LoadScene("Test2");
}
}
一个新的静态类(不是从 monobehaviour 继承)保存信息:
public static class StaticClass
{
public static string CrossSceneInformation { get; set; }
}
附加到场景“Test2”中的游戏对象的脚本:
using UnityEngine;
public class TestingScript2: MonoBehaviour
{
void Start ()
{
Debug.Log(StaticClass.CrossSceneInformation);
}
}
您不需要将整个类设为静态(如果您出于某种原因需要创建它的更多实例)。如果您要删除static
从类(而不是变量)中,您仍然可以通过以下方式访问静态变量StaticClass.CrossSceneInformation
但你也可以这样做StaticClass sc = new StaticClass();
。有了这个sc
您可以使用类的非静态成员,但不能使用static CrossSceneInformation
因为只能有一个(因为它是静态的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)