IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【Unity】Jay 开发日志(六)——暂停和结束菜单的创建 -> 正文阅读

[游戏开发]【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 隐藏,就可以正常使用了。演示效果如下。

? ? ? ?? ? ? ? ? ? ? ? ? ? ??

??

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 21:02:32  更:2022-02-09 21:03:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:23:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码