这边我设计了一个暂停界面和一个失败界面。
但当我失败界面触发时,我还是可以通过按下ESC来调出暂停界面。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class gm : MonoBehaviour
{
public GameObject panel;//失败界面
public GameObject nisbd;//暂停界面
// Start is called before the first frame update
void Start()
{
panel.SetActive(false);
nisbd.SetActive(false);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))//获取ESC
{
Time.timeScale = 0;
nisbd.SetActive(true);//暂停界面出现
}
}
public void GameOver()//结束
{
Time.timeScale = 0;
panel.SetActive(true);//失败界面出现
}
public void OnResume()//继续
{
Time.timeScale = 1;
nisbd.SetActive(false);
}
public void Restart()//重开
{
Time.timeScale = 1;
SceneManager.LoadScene(1);
}
public void Res()//返回主界面(切换场景)
{
Time.timeScale = 1;
SceneManager.LoadScene(0);
}
}
我想问一下,怎么样我才能在失败界面出来时,不能通过按下ESC来调出暂停界面?
你可以通过定义一些枚举都标识你当前游戏处于什么状态,当你按下esc键的时候去判断符合你这个状态的时候才处理什么样的逻辑。当然就你目前的代码而言,简单的用布尔变量标识一下也是 可以的。比如你可以定义一个全局布尔变量private bool bLose=false;当你失败时,在GameOver方法里将该变量置为true,即bLose=true;
在你的Update方法里判断按下Esc键时再加一层判断:如果当前时失败状态直接返回return掉,不会显示暂停界面
if (Input.GetKeyDown(KeyCode.Escape))//获取ESC
{
if(bLose) return;
Time.timeScale = 0;
nisbd.SetActive(true);//暂停界面出现
}
你应该判断一下当前是什么状态,才执行对应的方法啊
比如还没有start之前是一个状态,按下esc可能是退出游戏
已经start是一个状态,按下是暂停
已经gameover是一个状态,按下esc回到主界面