菜单重游戏的良好做法(在Unity3D中)

时间:2016-12-12 00:09:25

标签: unity3d

我正在开发一款游戏(在Unity3D中),该游戏由十几个菜单组成,没有真正的2D / 3D游戏世界。从程序员的角度来看,它只是一堆按钮,标签和图像。

为了没有一个大菜单类的内容,我决定将代码分成每个菜单的部分。结果是,我有十几个课程,他们自己拥有对游戏对象的所有引用,例如按钮方法。

我的问题是,我的项目中几乎所有内容现在都是静态的,因为这些菜单不会多次实例化,我必须使用另一个菜单的脚本从一个菜单中访问变量和方法。

因此,我的问题是这种情况的最佳做法是什么。我有几个想法,我怎么做,但不幸的是我没有学会在这种情况下做什么。

因此,如果您想直接提出建议,请随意这样做。 :)

我的想法:

1)制作一个具有所有菜单的静态实例的控制器。课堂上的按钮方法' A'然后可以拨打Controller.B.x。这确实有效,但我不喜欢把#34; Controller"在任何地方经常这样,因为大多数类经常从其他类访问方法和变量,它只是丑陋。

2)使这些菜单都是单身。 Afaik是单身人士" ok"对于这样的事情,但他们只是将静态实例转移到他们自己的类而不是一个控制器?当我从选项1)切换到一个班级时,基本上Controller.A.x变为A.instance.x,其中"实例"是类中类的静态实例。

3)保持一切正常,每当我需要从另一个类静态访问它们时,让变量和方法保持静态,否则将它们设为私有。

2 个答案:

答案 0 :(得分:2)

游戏可能不是“一堆按钮,标签和图片”

我建议忘记一秒钟的菜单,专注于您的游戏模型,严格为此创建类。你不会在任何菜单中放置“玩家拥有多少货币”这样的东西,它应该存在于Player类或类似的(模型)中。

一旦你可以从一个测试控制器类操作模型,只需在调试控制台中记录结果,你就可以对菜单做同样的事了。

之后,您可以轻松创建用户界面来读取/显示(动态创建标签和图像)并在下面的模型中写入(挂钩按钮事件)。在此之后,这些UI类可能会有很多共同点。

您可以使用UnityEvent类在UI和模型之间进行通信,它们很好地显示在检查器中(UI Events and Event Triggers中使用的相同事件)。

有关MVCMVPMVVMVIPER等一些设计模式的更一般信息,Google。

答案 1 :(得分:1)

我的建议是强烈考虑为什么你有静力学。我理解你的理由是他们是单身,但我不认为这是一个足够好的理由。

我希望您正确使用Unity GUI功能。

我只想写一个基本的“菜单”组件。然后,您可以将引用添加到子类中。例如。

你有一个派生自“Menu”的“StartMenu”类,它来自“MonoBehavior”。在“StartMenu”中,您编写了一个方法“ShowCharacterCreationMenu()”。然后添加一个按钮组件并将该方法挂钩到该按钮按下。 StartMenu必须引用Character菜单。这是经典的OOP方法。

我会这样做有点不同。 Unity的优势在于基于组件的设计,所以我倾向于这一点。我可能会创建一个“Transition”组件类来监听按钮按下。按下该按钮后,它将进入下一个菜单。

希望这有点道理。