Unity- 游戏结束以及重启游戏

游戏结束以及重启游戏

思路:利用Canvas创建好覆盖全屏的结束页面,默认关闭。游戏结束时,玩家控制的对象发起委托,ui管理收下委托,显示游戏结束页面,停止游戏。游戏重新开始就是点击设置好的按钮,启动ui管理里的重新开始场景

建个游戏结束页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjRdJ0eB-1680148541697)(C:/Users/86188/AppData/Roaming/Typora/typora-user-images/image-20230330105300652.png)]

编写委托类 游戏主角 以及 ui管理类的脚本

  • 委托类

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System;
    
    public class EventHander : MonoBehaviour
    {
        //通知游戏结束
        public static event Action GetGameOverEvent;
        public static void CallGetGameOverEvent () 
        {   
            GetGameOverEvent ? .Invoke();
        }
    }
    
    
  • 游戏主角脚本

       //青蛙是否死亡
       private bool isdead;
       //游戏结束
          if (isdead) 
          {
             EventHander.CallGetGameOverEvent();
          }
    

    在游戏结束的一些判断里把isdead改成true即可。

  • ui管理脚本

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class UiManager : MonoBehaviour
    {
        //游戏结束页面的操作
        public GameObject gameOverPanel;
            
        //脚本刚被调用时使用
        private void OnEnable() 
        {
            //恢复游戏速度游戏正常进行
            Time.timeScale = 1; 
            //注册接收得分的委托
            EventHander.GetPointEvent += OnGetPointEvent;
            //游戏结束的通知
            EventHander.GetGameOverEvent += OnGetGameOvervent;
        }
    
        //脚本不再被使用
        private void OnDisable() 
        {
            EventHander.GetPointEvent -= OnGetPointEvent;
            EventHander.GetGameOverEvent -= OnGetGameOvervent;
        }
          
       ///<summary>
        ///处理游戏结束的委托
        ///</summary>
        private void OnGetGameOvervent()
        {
            //显示游戏结束页面
            gameOverPanel.SetActive(true);
              //如果游戏结束页面被显示
            if (gameOverPanel.activeInHierarchy)
            {
                //游戏速度放慢为0,游戏停止
                Time.timeScale = 0;
            }
        }
        
    }
    
    

    这样游戏结束就完成了!

    开始测试之前别忘了先关闭游戏结束页面。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hvBjq1v9-1680148541698)(C:/Users/86188/AppData/Roaming/Typora/typora-user-images/image-20230330113143486.png)]

DLC:如何完全停止角色的操作

​ 在角色脚本里:

   //输入输出工具组件
   private PlayerInput playerInput;

   private void Awake()	
    {
      //获取输入输出组件
      playerInput = GetComponent<PlayerInput>();
   } 

    private void Update() 
   {
     if (isdead)
     {
      DisbleInput();
      return;
     }
   }

    /// <summary>
   /// 关闭输入组件
   /// </summary>
   private void DisbleInput() 
   {
      // 关闭输入组件
      playerInput.enabled = false;
   }

重启游戏

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class UiManager : MonoBehaviour
{
    ///<summary>
    ///重启游戏
    ///</summary>
    public void RestartGame() 
    {
        //重新加载之前活跃过的场景
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
}

然后把这个函数放到按钮里去。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ighRkr0y-1680148541699)(C:/Users/86188/AppData/Roaming/Typora/typora-user-images/image-20230330114442971.png)]

完成!!

Unity中,游戏结束通常发生在特定的游戏状态或条件满足时,比如玩家角色被击败、关卡完成或选择了退出游戏等。游戏结束代码涉及以下几个步骤: 1. **设置游戏状态变量**:首先,定义一个表示游戏是否结束的布尔变量,如`isGameOver`或`gameWon`。 ```csharp public bool isGameOver; ``` 2. **检测结束条件**:在更新循环(Update())或其他关键游戏逻辑函数中检查这个变量是否被设置为`true`。 ```csharp if (/* 某个游戏胜利条件 */ || /* 或者失败条件 */) { isGameOver = true; } ``` 3. **显示游戏结束界面**:当`isGameOver`为`true`时,显示游戏结束的菜单或加载新的屏幕,这可能是一个提示玩家重新开始的菜单、游戏结果统计页面,或者直接回到主菜单。 ```csharp if (isGameOver) { // 显示游戏结束UI UIManager.ShowGameOverScreen(); } ``` 4. **处理退出逻辑**:玩家可以选择退出游戏,这时调用`Application.Quit()`或者跳转到主菜单。 ```csharp if (Input.GetKeyDown(KeyCode.Escape) && isGameOver) { Application.Quit(); } ``` 5. **清理资源和保存数据**:在游戏结束前,确保关闭所有动态加载的资源,并将游戏数据保存。 6. **虚函数或事件**:如果使用面向对象设计,可能会有一个`OnGameEnded()`之类的虚方法供子类重写,以便执行特定的清理或结果展示操作。 **相关问题**: 1. Unity中的Update()函数是什么作用? 2. 游戏结束时如何优雅地关闭动态加载的资源? 3. 如何在Unity中实现子类重写虚方法以响应不同的游戏结束行为?
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值