最后一节我们做一下主菜单和暂停菜单
我们创建一个新的scene,命名为Menu,这个就是主菜单场景
我们双击Menu进去设置一下我们的UI
我们先添加一下Canvas,在Canvas下面创建连个Panel,一个是背景,一个用来装UI控件
我们设置一下Background的颜色
然后我们就要设置一些按钮啥的控件了
我们添加两个按钮,分别是play和quit,这个按钮还是添加Legacy里面的Button
简单设置一下这两个按钮,修改他们的Text分别是Play和Quit,顺便修改一下颜色和大小
然后调整一下位置,记得把这两个按钮的锚点改成正下方
接着我们写一下脚本,让点击Play的时候跳转到我们的游戏场景,点击Quit的时候退出游戏
我们创建一个C#脚本,挂到Menu的身上,脚本命名为Menu
我们简单写一下Menu的代码
我们开始游戏时加载下一个编号的场景
这个需要我们去Bulid Settings设置一下,我们在file那里去到Build settings,将我们的Menu场景拖进去,调整一下顺序
下面我们需要把Menu脚本中的两个函数分别绑定到那两个按钮上
我们选择Play的按钮,在下面有个On clik(),这个也就是点击时进行的操作,我们用这个可以调用其他物体身上挂载的脚本的函数。我们点击加号就可以添加一个Object了
我们把Menu拖进去,这样就可以调用Menu挂载的脚本中的函数了
我们给Play按钮调用PlayGame函数,Quit按钮调用QuitGame的函数
这样主菜单就做好了,不过点击Quit按钮是没有反应的,打包后才可以用
下面我们做一下暂停菜单
我们回到游戏场景,我们之前做了收集樱桃时的UI显示,我们再做一下暂停菜单。我们先做一下暂停菜单的按钮,我们在Canvas下面创建一个Button,命名为Pause,调整一下Pause的大小和位置,把Text的内容改成Pause,同时修改一下颜色
记得把Pause的锚点改成左上角
然后我们在Canvas下面在创建一个Panel,命名为Menu,这个就是暂停菜单的内容,内容我们这里以修改音乐的大小为例
调整一下Menu的位置和颜色
在Menu下面创建一个Text。内容是Pause Menu,把它移动到Menu的上面,修改一个大小和颜色
然后我们创建一个Slider(滑动条),来控制音乐的大小,在Menu下面创建一个Slider,调整一下位置
再创建一个Text放到Slider左边,内容是”音乐”
Menu的下面再添加一个按钮用来返回游戏
我们创建一个Button,Text的内容是返回,调整一下位置
这样UI部分就做好了
我们在设置一下代码实现
我们创建一个C#脚本,命名为Pause来控制暂停菜单,我们把它挂到Canvas
然后写一下代码
记得设置一开始Menu是不激活了,当点击Pause按钮时他才会激活
通过设置TimeScale(时间比例)可以调节时间的流速
然后我们在Pause按钮那里设置一下On Click()执行PausePress函数
这个做好了那么返回游戏的操作和这个一样
我们在Pause脚本创建一个返回游戏的函数然后在点击返回按钮时使用
当点击暂停菜单中的返回按钮时调用这个函数
下面我们就剩音乐滑动条还没设置,我们需要把这个滑动条和游戏中的声音联系在一起
我们就要用到Audio Mixer(混音器),我们在Asset界面右键创建一个Audio Mixer
我们双击Audio Mixer就会进入到它的设置界面
可以发现Mixer的范围是-88-0,所以我们回到Slider,把它的范围也设置成-88-0
然后我们把背景音乐输出到这个混音器上,让混音器控制它的大小,我们到SoundManager把bgm的Audio Source的output设置给我们创建的这个混音器
然后我们把混音器和滑动条连接在一起,让我们滑动滑动条的时候改变混音器的音效的大小
所以将滑动条的value值和Mixer的值绑定在一起即可
我们回到Pause的代码
我们先获得一下Audio Mixer的引用,回到unity把创建的Mixer拖过去
我们接下来让Slider的value和mixer的volume绑定
我们需要把Audio Mixer的volume改成代码可编辑,我们回到unity选择创建的Audio Mixer,在右边的属性栏我们右键Volume,选择Expose ‘Volume(of Master)’ to script(将音量输出到脚本),这样就可以在代码编辑Volume了
这时候Exposed Parameters(暴露参数)会变为1,也就多出来我们暴露的Volume,我们重命名为MainVolume
我们回到Pause代码中设置一下MainVolume的值,也就是Volume的值
然后我们在滑动滑动条时调用这个函数
这样就做好了
贴一下Menu和Pause的代码,最后的项目上传到资源了,需要的可以下载参考
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Menu : MonoBehaviour
{
//开始游戏
public void PlayGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
//退出游戏
public void QuitGame()
{
Application.Quit();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public class Pause : MonoBehaviour
{
//获得暂停菜单的引用
public GameObject PauseMenu;
//获得Audio Mixer的引用
public AudioMixer audioMixer;
public void PausePress()
{
//把它激活
PauseMenu.SetActive(true);
//暂停游戏
Time.timeScale = 0f;
}
public void ResumeGame()
{
//取消激活
PauseMenu.SetActive(false);
//恢复游戏
Time.timeScale = 1f;
}
//将Slider的value和mixer的volume绑定
public void SetVolume(float value)
{
audioMixer.SetFloat("MainVolume", value);
}
}
到这里,跟随麦扣老师的步伐,2D横版游戏就结束了。把做游戏的过程写成文字真的是巩固知识的好办法,我自己是先看了几遍了教程,然后才写成了文章记录下来,方便自己后面忘记那一部分的内容好去查阅,但是写文章的过程真的是收获满满,你要考虑用词,还要注意有没有错的地方,这个过程查了很多资料,比如协程,单例模式等。也学会了麦扣老师强调的看官方文档。
以一种讲授者的视角来写教程不失为一种学习和巩固的好办法,可以注意到平时注意不到的细节和容易犯错的地方,最后非常感谢麦扣老师的入门教程,我学到了很多,也希望看到这个教程的同学能有所收获,阿里嘎多!(2022-8-6)