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它,因为它只能有一个(因为它是静态的).