栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

【Unity】Jay 开发日志(六)——暂停和结束菜单的创建

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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().isDead)
        {
            endMenuUI.SetActive(true);
            Text[0].SetActive(true);
            PauseMenu.GameIsPaused = true;
            Player.GetComponent().velocity = Vector3.zero;
            Player.GetComponent().gravityScale = 0;
        }

        if (Player.GetComponentInChildren().isWon)
        {
            endMenuUI.SetActive(true);
            Text[1].SetActive(true);
            PauseMenu.GameIsPaused = true;
            Player.GetComponent().velocity = Vector3.zero;
            Player.GetComponent().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 隐藏,就可以正常使用了。演示效果如下。

                             

  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号