我为Unity应用程序制作了一个菜单场景,用户选择了一个训练场景:4个可用选项中的1个以切换组的形式:
public enum trainingScenarios
{
None = 0,
scenario_1,
scenario_2,
scenario_3,
scenario_4
}
因此,一旦用户勾选复选标记,所选方案就变为:
public void confirmScenario(int index)
{
switch (index)
{
case 1:
selectedScenario = trainingScenarios.scenario_1;
break;
case 2:
selectedScenario = trainingScenarios.scenario_2;
break;
case 3:
selectedScenario = trainingScenarios.scenario_3;
break;
case 4:
selectedScenario = trainingScenarios.scenario_4;
break;
}
}
现在......在下一个场景中,我想使用selectedScenario
变量来显示这是正在应用的场景的消息。目前,我让Unity不破坏我的菜单游戏对象,所以我可以获得对象和脚本等的引用...只是为了使用这个变量。有道理,因为到目前为止,我是唯一一次需要在不同的场景中使用selectedScenario
变量。
但是,现在我再次需要这个selectedScenario
变量来确定要应用于角色的动画类型,例如走向场景1并运行场景2等等......
所以,再次,我需要执行以下操作才能访问在初始菜单场景中设置的selectedScenario
变量,更糟糕的是,因为我在Start
方法中执行此操作一个场景,我只能立即在那里使用,而不是在其他方法......
GameObject menuManager = GameObject.Find("Menu Manager");
MenuScript menuScript = menuManager.GetComponent<MenuScript>();
Debug.Log("Selected Training Scenario: " + menuScript.selectedScenario);
这是否是在需要时获取对此变量的引用的好方法,或者这可能是单例设计的良好候选者?
我是Unity和C#程序员的新手,所以我试图了解何时使用这种设计模式。我会很感激善意和内容丰富的评论,以帮助我重新设计这个小东西。
答案 0 :(得分:4)
其中一个选项可能是为您的游戏创建包含全局参数的static class。像:
public static class Global
{
public static trainingScenarios selectedScenario;
public static void confirmScenario(int index)
{
...
}
}
并从项目中的任何其他位置访问它,如下所示:
Global.selectedScenario;
答案 1 :(得分:2)
您只需使用静态类来存储全局数据。例如,
obj2.slice(obj1.length);
然后您可以从任何地方访问GlobalData.globalValue。
public static class GlobalData
{
public static int globalValue;
// you can add more variables here
}
答案 2 :(得分:1)
是的,它是 Singleton 模式的一个很好的候选者,但还有另一种选择。
从长远来看,我总觉得坚持最后一级比赛非常有用。例如,自动选择菜单中的最后一个播放级别,甚至跳过菜单并尽快让用户进行播放。
鉴于此,我会用这个:
PlayerPrefs.SetInt ("last-scenario-played", selectedScenario);
然后在另一个场景中,在下一个小时或下个月:
int lastPlayed = PlayerPrefs.GetInt ("last-scenario-played");