【Unity】Jay 开发日志(六)——暂停和结束菜单的创建
写在最前面:Jay 是我花了五天左右时间开发的同名游戏,基础机制借鉴了涂鸦跳跃,具体的参考视频可以点击以下链接
用周杰伦的第一张专辑Jay做了个游戏(祝杰伦118生日快乐)_单机游戏热门视频
这篇日志将记录游戏中如何创建一个简易的暂停和结束菜单。
(一)创建暂停菜单
1) 首先在游戏主场景的 Canvas 下新建一个 Panel 命名为 PauseMenu 。在 Scene 中调整好大小和位置,并在 Inspector 中更改好合适的参数,让其呈现半透明。
2) 接下来给 Canvas 添加脚本 PauseMenu,写入下面的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class PauseMenu : MonoBehaviour
{public static bool GameIsPaused = false;public GameObject pauseMenuUI;void Update(){// 编辑 ECS 的功能if (Input.GetKeyDown(KeyCode.Escape)){if (GameIsPaused){Resume();}else{Pause();}}}// 回到游戏中public void Resume(){pauseMenuUI.SetActive(false);Time.timeScale = 1f;GameIsPaused = false;}// 暂停游戏void Pause(){pauseMenuUI.SetActive(true);Time.timeScale = 0f;GameIsPaused = true;}// 重新开始public void Again(){SceneManager.LoadScene("SampleScene");Resume();}// 回到主菜单public void LoadMenu(){SceneManager.LoadScene("Menu");}
}
这块逻辑比较简单,把整个 PauseMenu 设置为隐藏并拖到 pauseMenuUI 下。 按下 ECS 键, 将 PauseMenu 显示出来,同时 timeScale 会被设置成 0,这样游戏就会暂停。再次按下 ECS 回到游戏,此时只要将 PauseMenu 重新隐藏,并恢复 timeScale 为 1 即可。而重新开始游戏只需要在回到游戏前重载当前的游戏场景。
3) 按照之前介绍过的方法在 Panel 下添加三个 Button。
然后为 Button 添加刚才在脚本中定义好的事件。AgainButton 对应 Again(),MenuButton 对应 LoadMenu(),ESCButton 对应 Resume()。详细的操作方法可以参考我上一篇日志:【Unity】Jay 开发日志(五)——主菜单的创建_u012498719的博客-CSDN博客
做完后隐藏 PauseMenu,就可以正常使用了。
(二)创建结束菜单
1) 步骤同暂停菜单,创建 Panel,添加脚本和 Button。脚本写法略有不同,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class EndMenu : MonoBehaviour
{public GameObject endMenuUI, Player;public GameObject[] Text;void Update(){if (Player.GetComponent<Player>().isDead){endMenuUI.SetActive(true);Text[0].SetActive(true);PauseMenu.GameIsPaused = true;Player.GetComponent<Rigidbody2D>().velocity = Vector3.zero;Player.GetComponent<Rigidbody2D>().gravityScale = 0;}if (Player.GetComponentInChildren<SpecialEffect>().isWon){endMenuUI.SetActive(true);Text[1].SetActive(true);PauseMenu.GameIsPaused = true;Player.GetComponent<Rigidbody2D>().velocity = Vector3.zero;Player.GetComponent<Rigidbody2D>().gravityScale = 0;}}public void Resume(){Time.timeScale = 1f;PauseMenu.GameIsPaused = false;}public void Again(){SceneManager.LoadScene("SampleScene");Resume();}public void LoadMenu(){SceneManager.LoadScene("Menu");}
}
这里修改 PauseMenu 中 GameIsPaused 的值的目的是为了防止两个菜单被同时唤出。而对 Player 的刚体下的 velocity 和 gravityScale 的修改是为了防止游戏结束后人物的移动(与暂停游戏不同,游戏结束后平台等环境仍是动态)。
2) 然后还需要在 Canvas 下新建两个 Text, 分别写上游戏成功和失败的文字提示。注意它们不能是 EndMenu 的子类。
选中 Canvas,把 Lose 拖进脚本的 Text[0] 下,把 Win 拖进脚本的 Text[1] 下。到此, Inspector 中显示应如下:
3) 最后,把 EndMenu 以及两个 Text 隐藏,就可以正常使用了。演示效果如下。
【Unity】Jay 开发日志(六)——暂停和结束菜单的创建相关推荐
- Java微信公众平台开发(十)--微信自定义菜单的创建实现
转自:http://www.cuiyongzhi.com/post/48.html 自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自 ...
- 微信自定义菜单java_Java微信公众平台开发(九)--微信自定义菜单的创建实现
自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发 ...
- unity游戏开发日志(一)将mmd模型导入unity,并解决材质丢失的问题
开发目标 从零开始开发一款音乐手游,类似钢琴块的玩法加QQ炫舞画面,实现一部想玩就可以随时玩的简单音游.该项目着重练手,以及技术交流,欢迎大家指导. 开发计划 计划在两个月内完成游戏,该游戏完成后将进 ...
- 项目实训--Unity多人游戏开发(十六、草丛隐身与道具隐身)
文章目录 复述所需功能及其概念 进入草丛隐身. 道具技能隐身: 一个问题 实际开发 草丛 道具 总结 复述所需功能及其概念 进入草丛隐身. 像英雄联盟的草丛机制一样. 其中(自己与敌人的可见性)包括如 ...
- 仿酷狗音乐播放器开发日志六——播放列表的实现
转载请说明出处,谢谢~~ 整个软件的整体效果实现后就要开始着手制作各个细节控件了,观察一下,酷狗播放器的最难做的部分应该是播放列表这个控件了.这个控件主体上看是从ListCtrl控件继承而来的. ...
- 【Unity】开发日志1——画笔 The Printer
我每天都想去学习一些东西,但是每次做一半就坚持不下去,一方面的原因是:我的的确确遇到很多困难:另一方面的确是无从下手,不知道如何去学习: 我现在就是这样不断的摸索摸索,所以就写下我摸索的过程.一方面希 ...
- 【Unity VR开发】结合VRTK4.0:创建滑块
语录: 只有经历地狱般的磨练,才能炼出创造天堂的力量. 前言: 滑块是一个非常简单的控件,它允许通过沿有限的驱动轴滑动 Interactable 来选择不同的值.我们将使用线性驱动器创建一个滑块控件, ...
- 微信公众号的二次开发(二 自定义菜单的创建)
在上篇<微信公众号的二次开发(一)>我们介绍了微信订阅号的一些坑, 以及微信公众平台开发的一些基本配置.下面我们继续介绍如何通过用户关注等行为.获取用户的openid. 自定义微信公众号菜 ...
- 【Unity VR开发】结合VRTK4.0:创建圆盘
语录: 茶若相似,味不必如一.但凡茗茶,一泡苦涩,二泡甘香,三泡浓沉,四泡清洌,五泡清淡,此后,再好的茶也索然无味.诚似人生五种,年少青涩,青春芳醇,中年沉重,壮年回香,老年无味. 前言: 我们在开发 ...
- Unity游戏开发客户端面经,六万字面经知识点,一篇就够了
目前这是记录一些被常问的面经,面向初级,总结了大约六万字的常问知识点,有各种大佬的链接可以深入的了解.希望可以帮助正在准备八股的同学们. C#:Unity游戏开发客户端面经--C#(初级)_正在奋斗中 ...
最新文章
- Windows10自带搜索增强设置
- 最高奖金5万|带打目标检测大赛!还给匹配神助攻队友!
- 敏捷个人:激励 2011-11-26期
- RESTful API浅谈
- AVFrame中data与linesize关系
- WPF DataGrid横向显示
- python php linux-选择PHP与Python,可以考虑这三个问题
- Java StringBuilder codePointAt()方法与示例
- C#网络编程概述 三
- 使用OpenCV提取不同颜色物体
- 笨办法学 Python · 续 练习 49:`sed`
- Java 笔试题---Java与编程模式--7月6日
- 线性代数笔记 -- A = LU的应用
- 共享单车的定位,应该是利用手机实现
- 董明珠和雷军的十亿赌约马上就要到了,谁会笑到最后?
- virtualbox kali linux 安装小米随身wifi
- 选择适合的Node js授权认证策略
- matlab butter stop,Matlab butter函数设计滤波器
- The underlying provider failed on Open
- 查询各科分数最高的科目名称,学生学号,姓名,分数,排名
热门文章
- 一段很有意思的代码!!
- maven安装使用手册之-----------------------maven介绍及安装部署
- Centos7 切换为163 网易yum
- LINUX系统开机后出现assuming drive cache:write through* 无法开机
- 获得资源配置文件的路径
- 大数据兼云计算(王明龙)讲师-JAVA-DAY05-基本数据类型
- VR全景图片浏览实现
- HDU 6069 Counting Divisors
- JBOSS启动错误:Not pointing to a directory
- SCLS:微生物所方荣祥/张莉莉团队开发植物内生细菌特异16S引物