【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第五篇:游戏结束与重新开始

本文是Unity跑酷游戏制作教程的一部分,讲解如何实现游戏结束和重新开始的功能。通过创建边界碰撞体、游戏结束界面,编写GameOverPanel脚本和游戏管理器,当角色碰撞到边界时显示游戏结束界面,并允许玩家点击按钮重新开始游戏。同时提供了详细代码示例和工程Demo的GitHub链接。
摘要由CSDN通过智能技术生成

一、前言

嗨,大家好,我是新发。
我打算写一篇使用Unity制作像天天酷跑一样的游戏的教程,会按功能点分成多篇文章来讲,希望可以帮助一些想学Unity的同学。
注:我使用的Unity版本是2020.1.14f1c1。

文章目录:
第一篇:人物动画序列帧
第二篇:使用Animator控制跑酷角色的动画状态切换
第三篇:跑酷地面制作
第四篇:使用脚本控制跑酷角色
第五篇:游戏结束与重新开始
第六篇:金币创建与吃金币
第七篇:游戏界面的基础UI

本工程的Demo工程,我已上传到GitHub,感兴趣的同学可以自己下载下来学习。
https://github.com/linxinfa/UnityParkourGameDemo
在这里插入图片描述

本节我将讲下游戏结束与重新开始的实现,本节的效果:在这里插入图片描述

二、制作边界碰撞体

创建两个空物体:BottomBorderLeftBorder,添加BoxCollider2D组件,调整大小和位置,作为边界碰撞体,如下:
在这里插入图片描述
添加一个BorderTag
在这里插入图片描述
两个边界碰撞器的Tag设置为Border
在这里插入图片描述

三、制作游戏结束界面

导入UI素材,
请添加图片描述

请添加图片描述请添加图片描述请添加图片描述
请添加图片描述请添加图片描述请添加图片描述
制作成游戏结束界面预设:GameOverPanel
在这里插入图片描述
预设保存在Resources文件夹中。
在这里插入图片描述
这样,主角碰撞到边界碰撞体的时候,我们就可以实例化这个界面出来了。

var canvas = GameObject.Find("Canvas");
var prefab = Resources.Load("GameOverPanel");
var panel = GameObject.Instantiate(prefab) as GameObject;
panel.transform.SetParent(canvas.transform, false);

四、游戏结束界面脚本

创建一个GameOverPanel.cs脚本,挂到GameOverPanel预设上,
在这里插入图片描述
代码如下:

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameOverPanel : MonoBehaviour
{
    public Button restartBtn;

    void Start()
    {
        restartBtn.onClick.AddListener(() => 
        {
            GameMgr.instance.state = GameState.Playing;
            SceneManager.LoadScene(0);
        });
    }
}

五、游戏管理器

游戏有准备、进行中、结束三个状态,为了方便管理,我们做一个游戏管理器。
创建一个空物体,命名为GameMgr
在这里插入图片描述
创建GameMgr.cs脚本,挂到这个物体上,代码如下:

using UnityEngine;

public class GameMgr : MonoBehaviour
{
    private void Awake()
    {
        s_instance = this;
        m_state = GameState.Playing;
    }

    public GameState state
    {
        get { return m_state; }
        set
        {
            m_state = value;
            if(GameState.End == value)
            {
                // 游戏结束
                var canvas = GameObject.Find("Canvas");
                var prefab = Resources.Load("GameOverPanel");
                var panel = GameObject.Instantiate(prefab) as GameObject;
                panel.transform.SetParent(canvas.transform, false);
            }
        }
    }
    private GameState m_state = GameState.Ready;


    private static GameMgr s_instance;
    public static GameMgr instance { get { return s_instance; } }
}

public enum GameState
{
    Ready,
    Playing,
    End,
}

六、碰撞检测逻辑

Player.cs添加边界碰撞检测逻辑。

/// <summary>
/// 碰撞事件方法
/// </summary>
/// <param name="other"></param>
void OnCollisionEnter2D(Collision2D other)
{
    switch (other.gameObject.tag)
    {
        case "Ground":
            {
                // 碰撞到地面
                m_ani.SetBool("IsJumping1", false);
                m_ani.SetBool("IsJumping2", false);

                m_jumpCount = 0;
            }
            break;
        case "Border":
            {
                // 游戏结束
                GameMgr.instance.state = GameState.End;
            }
            break;
    }
}

七、运行测试

运行Unity,效果如下:
在这里插入图片描述
下一节讲金币创建与吃金币的实现。
[点击进入下一节]

  • 19
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值