使用param变量Unity加载场景

Das*_*sto 7 parameters unity-game-engine scene

在我的游戏中,有一个包含50x50网格的地图视图.当你点击瓷砖时,你会被发送到那个瓷砖视图并攻击东西等.就代码而言,这些"瓷砖"之间的唯一区别是瓷砖ID,也就是说.网格上的哪个数字.该号码将在init上传递给服务器以处理其余的数据.

显然,由于这是瓦片的唯一区别,因此创建场景"1",场景"2"......场景"2500"并调用SceneManager.LoadScene来切换到特定的瓦片视图是错误的.

我可以使用DontDestroyOnLoad(); 当单击tile以保留场景切换上的tile ID时,1)它只接受gameobjects而不仅仅是一个int变量2)我不需要/想要在tile视图中保留该变量以外的任何东西.因此,虽然它可以工作,但似乎有点矫枉过正.

基本上只是将参数传递给场景加载是否有更好的做法?

Fre*_*hön 16

您可以创建一个包含信息的静态类.此类不会附加到任何GameObject,并且在更改场景时不会被销毁.这static意味着它只能有一个; 你不能StaticClassName scn = new StaticClassName()来创建新的静态类.StaticClassName.SomeStaticMethod()例如,您可以直接访问它们,并且可以从任何地方访问它们.请参阅此示例,了解如何在变量中存储值,更改场景,然后在该场景中使用它:

附加到场景"测试"中的游戏对象的普通Unity脚本:

using UnityEngine;
UnityEngine.SceneManagement;
public class TestingScript : MonoBehaviour {
    void Start()
    {
        StaticClass.CrossSceneInformation = "Hello Scene2!";
        SceneManager.LoadScene("Test2");
    }
}
Run Code Online (Sandbox Code Playgroud)

保存信息的新静态类(不是从monobehaviour继承):

public static class StaticClass {
    public static string CrossSceneInformation { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

附加到场景"Test2"中的游戏对象的脚本:

using UnityEngine;
public class TestingScript2: MonoBehaviour {

    void Start () {
        Debug.Log(StaticClass.CrossSceneInformation);
    }
}
Run Code Online (Sandbox Code Playgroud)

您不需要将整个类保持静态(如果由于某种原因需要创建更多的实例).如果你static要从类(而不是变量)中删除它,你仍然可以访问静态变量,StaticClass.CrossSceneInformation但你也可以StaticClass sc = new StaticClass();.有了这个,sc你可以使用类的非静态成员,但不能使用static CrossSceneInformation它,因为它只能有一个(因为它是静态的).

  • 我通常只为每个需要一些上下文信息的场景制作一个这样的类 (2认同)
  • 但这似乎并不是正确的方法……?我希望有一个使用 LoadSceneParameters 的示例......?这非常不 OOD。 (2认同)