二十一.游戏暂停

游戏暂停

1.新建暂停界面

在UICanvas下,新建Panel,命名为PauseMenu

请添加图片描述

放大Panel,会发现有圆弧,可直接删除Image下的Source Image即可

请添加图片描述

修改颜色为黑色,更有游戏感

2.添加标题

在PauseMenu下新建Text,表示游戏暂停

请添加图片描述

设置Text尺寸,并设置BestFit,设置最大显示尺寸,文字显示为暂停游戏,并设置上下和左右居中

请添加图片描述

3.添加按钮

在Prefabs/UI下,拖动按钮预制体3个到PauseMenu下,改名为btn_resume,btn_levelselect,btn_mainmenu,并修改文字内容如下

请添加图片描述

如果文字内容过长,超出button,可点击text进行大小调整

4.新建脚本PauseMenu,添加组件到UICanvas上

新建场景参数,表示要跳转到的场景名

public string mainMenuScene;    //主界面
public string levelSelectScene; //关卡选择

添加场景管理引用

新建函数,分别跳转到主界面和关卡选择界面

using UnityEngine.SceneManagement;

public void LevelSelectScene()
{
    SceneManager.LoadScene(levelSelectScene);
}

public void MainMenuScene()
{
    SceneManager.LoadScene(mainMenuScene);
}

绑定按钮函数

  • btn_levelselect–>LevelSelectScene()
  • btn_mainmenu–>MainMenuScene()

请添加图片描述

暂停操作

新建参数暂停界面,是否暂停标识

public GameObject pausePanel;   //暂停界面
public bool isPause;

Unity中设置参数名,其中LevelSelectScene暂时还没创建,先不设定;PausePanel中将PauseMenu拖过来;可初始化设置PauseMenu为隐藏,同时isPause为false

请添加图片描述

新建PauseUpPause函数,操作是否暂停游戏

public void PauseUpPause()
{
    if(isPause)
    {
        isPause = false;
        pausePanel.SetActive(false);
        //游戏正常
        Time.timeScale = 1.0f;
    }
    else
    {
        isPause = true;
        pausePanel.SetActive(true);
        //游戏暂停
        Time.timeScale = 0f;
    }
}

绑定 btn_resume–>PauseUpPause()

请添加图片描述

在Update中添加Esc键控制

//Esc键
if(Input.GetKeyDown(KeyCode.Escape))
{
    PauseUpPause();
}

5.暂停的问题

暂停时切换至主界面或别的界面,再回来时定住,需在切换场景式设置游戏正常

public void LevelSelectScene()
{
    SceneManager.LoadScene(levelSelectScene);
    //游戏正常
    Time.timeScale = 1.0f;
}

public void MainMenuScene()
{
    SceneManager.LoadScene(mainMenuScene);
    //游戏正常
    Time.timeScale = 1.0f;
}

暂停时,虽界面不动,但操作跳跃等,在恢复游戏时,角色还是有变化,需消除这种情况

添加单例

public static PauseMenu sInstance;

private void Awake()
{
    sInstance = this;
}

在PlayerController中Update()中,添加判断,将除了动画设置的都包含进来

void Update()
{
    if(PauseMenu.sInstance.isPause == false)
    {
        if (knockBackCounter <= 0)
        {
            //设置速度 /*GetAxisRaw*/
            theRB.velocity = new Vector2(moveSpeed * Input.GetAxis("Horizontal"), theRB.velocity.y);

            //检测是否在地面       参数:圆形中心,圆形半径,筛选器(用于检查仅在指定层上的对象)
            isGrounded = Physics2D.OverlapCircle(groundCheckPoint.position, .2f, whatIsGround);

            if (isGrounded)
            {
                //在地面时,可以连跳为true
                canDoubleJump = true;
            }

            //跳跃
            if (Input.GetButtonDown("Jump"))
            {
                if (isGrounded)  //判断是否在地面
                {
                    theRB.velocity = new Vector2(theRB.velocity.x, jumpForce);
                    //跳跃音效
                    AudioManager.sInstance.playSFX(10);
                }
                else
                {
                    if (canDoubleJump)
                    {
                        //不在地面,连跳
                        theRB.velocity = new Vector2(theRB.velocity.x, jumpForce);
                        canDoubleJump = false;
                        //跳跃音效
                        AudioManager.sInstance.playSFX(10);
                    }
                }
            }

            //翻转
            if (theRB.velocity.x < 0)
            {
                theSR.flipX = true;
            }
            else if (theRB.velocity.x > 0)
            {
                theSR.flipX = false;
            }
        }
        else
        {
            knockBackCounter -= Time.deltaTime;
            if (!theSR.flipX)
            {
                theRB.velocity = new Vector2(-knockBackForce, theRB.velocity.y);
            }
            else
            {
                theRB.velocity = new Vector2(knockBackForce, theRB.velocity.y);
            }
        }
    }

    //设置动画中设置的moveSpeed,isGrounded的值
    anim.SetFloat("moveSpeed", Mathf.Abs(theRB.velocity.x));
    anim.SetBool("isGrounded", isGrounded);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值