最后一节我们做一下主菜单和暂停菜单

我们创建一个新的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)

unity2D横版游戏教程终章-主菜单和暂停菜单相关推荐

  1. unity2D横版游戏教程-2 代码实现

    接下来就是写代码的时候 我们创建一个文件夹用来存我们的脚本,名字就叫Scripts,在里面右键->Create->C#Script,这样就创建好了一个脚本 直接将这个脚本拖给我们Hiera ...

  2. unity2D横版游戏教程-1 让人物动起来

    在看完了麦扣老师的小狐狸的视频后,为了巩固练习,我另外找一个素材包来练手,顺便写成一个教程让自己更加熟练,同时当自己遗忘时可以回头查阅.另外,这个教程我写的非常详细,萌新也可以学习.有什么不对的地方或 ...

  3. unity2D横版游戏教程-3 Cinemachine镜头移动

    Cinemachine是官方提供的摄像机工具组件,这个工具的用处还蛮大的,不过我们这里就简单说一下在2D游戏里面怎么实现镜头跟踪的效果,这里我们用Cinemachine代替使用Main Camera ...

  4. unity2D横版游戏教程8-音效

    简单介绍一下unity audio,auido包括三个东西,分别是Aduio Listener,Audio Source,Audio Clips.Audio Listener就相当于耳朵,是用来听声音 ...

  5. unity2D横版游戏教程10-场景控制

    我们让角色掉出地图时重置游戏 我们在Hierarchy那里创建一个一个空项目,命名为DeathLine,也就是死亡线,我们给它添加一个盒体碰撞器,调整一下碰撞器 我们要把这个碰撞器当做触发器使用,所以 ...

  6. unity2D横版游戏教程9-对话框dialog

    这节我们实现对话框dialog的效果,也就是人物到达某个地方后会弹出来一个对话框,比如资源包里有一个奖杯的模型,我们可以做人物碰到奖杯时提示游戏胜利的效果 我们先在地图中添加奖杯 我们在Collect ...

  7. unity2D横版游戏教程5-UI

    UI是User Interface的缩写,也就是用户界面.像登录界面的按钮,游戏的得分,暂停的按钮等都是UI 之前我门创建一个Cherries变量来计算我们收集樱桃的数量,现在我们创建一个UI来显示我 ...

  8. unity2D横版游戏教程7-敌人AI死亡效果

    我们稍微完善一下敌人AI,我们给敌人添加一个死亡动画,命名为death 先创建一个Trigger变量来控制什么时候切换death,这个Trigger相当一个开关.死亡动画是任何状态都可以实现的,所以在 ...

  9. unity2D横版游戏教程4-物品收集以及物理材质

    我们先把背景扩大一点,ctrl+D复制一个背景图然后调一下位置,在把地图稍微拓展一下 然后再Hierarchy界面创建一个空组件命名为Collection,表示物品,创建一个空的子组件叫Cherrie ...

最新文章

  1. 英文字母大写 html,英文大小写格式
  2. python 中的位置参数和默认参数
  3. 【云端大数据实战】大数据误区、大数据处理步骤分析
  4. Python函数参数中的冒号与箭头
  5. python自动抠头像图_Python实现AI自动抠图实例解析
  6. GRPC协议的相关原理
  7. 【ZZ】Python安装模块出错(ImportError: No module named s...
  8. AviSynth——强大的视频文件后期处理工具
  9. mysql中phpmyadmin安装教程_phpmyadmin安装方法
  10. 书本练习题7print函数使用
  11. 第六章 第一个Linux驱动程序:统计单词个数
  12. 硬盘分区整数计算方法
  13. php 电脑的右下角弹框,电脑右下角弹出广告的解决方法
  14. 华为双前置摄像头_华为P40系列的前置双摄像头到底隐藏了什么?我们一起来看看...
  15. tkmybatis 子查询_最全的真假童子命查询方法!不想被忽悠就看看
  16. Process finished with exit code -1073740791 (0xC0000409)
  17. 将MongoDB安装在移动硬盘
  18. 《疯狂Android讲义》第二版目录
  19. 漫谈中国数字电视标准的诞生
  20. Android 系统禁用触摸屏

热门文章

  1. 用js实现简单的图书管理系统
  2. 对抽象编程:接口和抽象类
  3. 视频直播技术分享:一文读懂主流视频直播系统的推拉流架构、传输协议等
  4. 【硬件】电容一端接电源,另一端接地,起什么作用,什么时候才会有这样的接法
  5. Problem H. L05-08 去除*号
  6. 使用Swiper4插件问题
  7. 实验40:CCNA综合实验训练2(期末考试)
  8. 三星Galaxy S22和 三星Galaxy S22+参数对比
  9. 近段时间的学习碎片整理(6)
  10. mysql导入行政区域数据