文章目录
- 一、前言
- 二、制作边界碰撞体
- 三、制作游戏结束界面
- 四、游戏结束界面脚本
- 五、游戏管理器
- 六、碰撞检测逻辑
- 七、运行测试
一、前言
嗨,大家好,我是新发。
我打算写一篇使用Unity制作像天天酷跑一样的游戏的教程,会按功能点分成多篇文章来讲,希望可以帮助一些想学Unity的同学。
注:我使用的Unity版本是2020.1.14f1c1。
文章目录:
第一篇:人物动画序列帧
第二篇:使用Animator控制跑酷角色的动画状态切换
第三篇:跑酷地面制作
第四篇:使用脚本控制跑酷角色
第五篇:游戏结束与重新开始
第六篇:金币创建与吃金币
第七篇:游戏界面的基础UI
本工程的Demo工程,我已上传到GitHub,感兴趣的同学可以自己下载下来学习。
https://github.com/linxinfa/UnityParkourGameDemo
本节我将讲下游戏结束与重新开始的实现,本节的效果:
二、制作边界碰撞体
创建两个空物体:BottomBorder
、LeftBorder
,添加BoxCollider2D
组件,调整大小和位置,作为边界碰撞体,如下:
添加一个Border
的Tag
。
两个边界碰撞器的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,效果如下:
下一节讲金币创建与吃金币的实现。
[点击进入下一节]