对用户界面来说,一般我们进入游戏并不是直接开始的,一般会有“登录”、”设置“,甚至”关卡选择“等操作。本次我们也将建造一个游戏的初始化和结束界面。
不论是简单 or 复杂的游戏,打开它的第一个界面大多数都是开始菜单。作为对一个游戏的“第一印象”,吸引人的初始化菜单让人想打开一探究竟,即展现了一个游戏的美术风格,也常有例如登录、选择关卡、设置等等个性化、实用的功能。
(锈湖-Cube Escape Collection的开始菜单)
对于我们这个简单的游戏,大概开始/退出这两个按键就足够了。但更加复杂的,比如锈湖的方块逃脱有多个关卡,就需要更多的部分来完成了。每一个小方块都是用户界面上的按钮,这些按钮在被点击时(OnClick)可以打开相应的游戏场景。
虽然太空清理游戏比较简单,我们还是按照以上的方法来完成初始化菜单。
首先建立一个新的场景来作为游戏初始化菜单。
-
File – New Scene – Create。会打开一个全新的场景
不要担心,你之前的project没有被覆盖掉,除非你没有保存。
-
Cmd / Ctrl + S 保存新的场景,会有一个对话框弹出,将场景的名字改为“StartMenu”
(命名并保存新的菜单场景)
-
来到下方资源栏,将新建的场景拖拽到Scenes文件夹中,方便归类保存
现在资源栏中有两个场景,分别是之前的太空场景和现在的开始菜单场景。通过双击它们的图标可以互相切换。
(Asset > Scenes中的两个场景,分别是主游戏场景和开始菜单场景)
-
在左上hiearchy中,新建UI – Canvas,通过Panel、button和Text做一个简单的初始化菜单界面。
(简单的开始菜单)
具体如何完成用户界面请参考之前的教程~这里就不重复了
菜单完成后,需要实现开始和退出游戏的功能。因为真正的太空游戏在另外一个场景“SampleScene”中,我们需要用SceneManagement来切换到另外的场景。
-
新建Script - 命名“MenuManager”,双击打开Script
-
首先,在class外使用SceneManagement
using UnityEngine.SceneManagement;
-
在class内,创建公开的方法StartGame()
public void StartGame ()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex +1);
}
LoadScene来加载指定的场景。而参数中的GetActiveScene指的就是当前的运行的场景(开始菜单)。+1则指定了要运行当前场景的下一个。我们需要让“下一个”指向游戏的主场景——太空,具体如何定义顺序(“下一个”)需要在Build前完成。
-
创建另一个公开的方法QuitGame()。
public void QuitGame()
{
Application.Quit();
}
Quit()这个方法可以让我们直接退出这个application,即为退出游戏。
-
保存,返回Unity编辑器
-
新建一个空的GameObject命名为“MenuManager”,将“MenuManager”代码拖拽称为它的一部分。
-
选择Start Button,添加OnClick()并将MenuManager这个object拖拽进入空格,在旁边的方法中选择“MenuManager“ – “StartGame”
-
相同的方法为Quit Button添加“QuitGame”
(定义Start按钮的OnClick功能)
添加完成并保存后,我们来定义场景Build的顺序。
-
点击File – Build Setting,新的对话框会弹出
最上方的“Scenes in Build”会现实已经添加的场景以及它们相应的顺序。现在这一栏应该是空的。 -
点击“Add Open Scenes“,可以看到Scenes/StartMenu被添加到了列表里,即为当前的场景。
并且它的顺序为0,代表着StartMenu是游戏开始后用户看到的第一个场景。这正是我们想要的。 -
在资源栏中双击打开太空清理游戏的场景,用同样的方法把它也加入list中。
最后,会得到类似这样的列表。
(加入开始菜单和主场景后的Build List)
现在测试一下,我们看到的第一个场景变成了开始菜单!点击Start就可以进入游戏啦。
(Notes:这次没有视频一起发是因为没来得及剪视频,录还是录了的...尽快找机会补上!大概还有一个大的chapter这个小游戏就完成啦!初步打算下一个做AR相关的教程,有什么其他想要了解的欢迎评论区提出哦~)
如果有任何疑问或者建议,也欢迎在下方留言评论哟~