我正在开发一款游戏(在Unity3D中),该游戏由十几个菜单组成,没有真正的2D / 3D游戏世界。从程序员的角度来看,它只是一堆按钮,标签和图像。
为了没有一个大菜单类的内容,我决定将代码分成每个菜单的部分。结果是,我有十几个课程,他们自己拥有对游戏对象的所有引用,例如按钮方法。
我的问题是,我的项目中几乎所有内容现在都是静态的,因为这些菜单不会多次实例化,我必须使用另一个菜单的脚本从一个菜单中访问变量和方法。
因此,我的问题是这种情况的最佳做法是什么。我有几个想法,我怎么做,但不幸的是我没有学会在这种情况下做什么。
因此,如果您想直接提出建议,请随意这样做。 :)
我的想法:
1)制作一个具有所有菜单的静态实例的控制器。课堂上的按钮方法' A'然后可以拨打Controller.B.x
。这确实有效,但我不喜欢把#34; Controller"在任何地方经常这样,因为大多数类经常从其他类访问方法和变量,它只是丑陋。
2)使这些菜单都是单身。 Afaik是单身人士" ok"对于这样的事情,但他们只是将静态实例转移到他们自己的类而不是一个控制器?当我从选项1)切换到一个班级时,基本上Controller.A.x
变为A.instance.x
,其中"实例"是类中类的静态实例。
3)保持一切正常,每当我需要从另一个类静态访问它们时,让变量和方法保持静态,否则将它们设为私有。
答案 0 :(得分:2)
游戏可能不是“一堆按钮,标签和图片”。
我建议忘记一秒钟的菜单,专注于您的游戏模型,严格为此创建类。你不会在任何菜单中放置“玩家拥有多少货币”这样的东西,它应该存在于Player
类或类似的(模型)中。
一旦你可以从一个测试控制器类操作模型,只需在调试控制台中记录结果,你就可以对菜单做同样的事了。
之后,您可以轻松创建用户界面来读取/显示(动态创建标签和图像)并在下面的模型中写入(挂钩按钮事件)。在此之后,这些UI类可能会有很多共同点。
您可以使用UnityEvent
类在UI和模型之间进行通信,它们很好地显示在检查器中(UI Events and Event Triggers中使用的相同事件)。
答案 1 :(得分:1)
我的建议是强烈考虑为什么你有静力学。我理解你的理由是他们是单身,但我不认为这是一个足够好的理由。
我希望您正确使用Unity GUI功能。
我只想写一个基本的“菜单”组件。然后,您可以将引用添加到子类中。例如。
你有一个派生自“Menu”的“StartMenu”类,它来自“MonoBehavior”。在“StartMenu”中,您编写了一个方法“ShowCharacterCreationMenu()”。然后添加一个按钮组件并将该方法挂钩到该按钮按下。 StartMenu必须引用Character菜单。这是经典的OOP方法。
我会这样做有点不同。 Unity的优势在于基于组件的设计,所以我倾向于这一点。我可能会创建一个“Transition”组件类来监听按钮按下。按下该按钮后,它将进入下一个菜单。
希望这有点道理。