游戏终点
1.添加终点标志
设置Flag的显示排序为-1,使其显示为在旗杆之后
2.添加碰撞检测Box Collider 2D
在LevelEnd上添加碰撞检测,并调整大小
设置碰撞检测为触发器,isTrigger–>true
3.添加关卡完成标识
在UICanvas上添加Text,命名为TextLevelComplete,放在FadeScreen前面,使其被淡入淡出遮挡
设置关卡完成显示,字体大小,颜色为白色,中间对齐,并稍稍倾斜
4.新建脚本LevelExit,绑定组件到LevelEnd上
在LevelManager.cs中,添加EndLevel()函数,用于实现关卡结束
在LevelExit中,添加碰撞检测函数,判断碰撞的是当前角色,即调用LevelManager中的EndLevel()
private void OnTriggerEnter2D(Collider2D other)
{
if(other.tag == "Player")
{
LevelManager.sInstance.EndLevel();
}
}
5.PlayerController
添加参数,用于控制是否能操作
在Update中,与PauseMenu.sInstance.isPause判断并列,加入&&判断
public bool stopInput; //控制能否操作
if(PauseMenu.sInstance.isPause == false && !stopInput)
6.LevelManager
添加隔段时间调用函数,实现用户不能操控,以及淡入效果
public void EndLevel()
{
StartCoroutine(EndLevelCo());
}
//隔段时间调用
public IEnumerator EndLevelCo()
{
//关卡完成后,用户不能再操控
PlayerController.sInstance.stopInput = true;
yield return new WaitForSeconds(1.5f);
//关卡完成后,淡出效果
UIController.sInstance.FadeToBlack();
}
7.摄像机
关卡完成后,需要摄像机停止跟随角色
在CameraController中,添加参数,单例,并在Update中加入stopFollow控制
public bool stopFollow; //停止跟随
public static CameraController sInstance;
private void Awake()
{
sInstance = this;
}
void Update()
{
if(!stopFollow)
{
//......
}
}
在LevelManager中public IEnumerator EndLevelCo()
加入调用摄像机不跟随
public IEnumerator EndLevelCo()
{
//关卡完成后,用户不能再操控
PlayerController.sInstance.stopInput = true;
//摄像机停止跟随
CameraController.sInstance.stopFollow = true;
//......
}
8.关卡完成提示
UIController中添加参数
public GameObject levelCompleteText; //关卡完成提示
Unity中设置绑定TextLevelComplete
在LevelManager中添加参数levelToLoad,指向关卡完成后跳转的场景,并引入场景管理
using UnityEngine.SceneManagement;
public string levelToLoad; //关卡完成后加载的场景
加入跳转新场景
public IEnumerator EndLevelCo()
{
//关卡完成后,用户不能再操控
PlayerController.sInstance.stopInput = true;
//摄像机停止跟随
CameraController.sInstance.stopFollow = true;
//显示关卡完成提示
UIController.sInstance.levelCompleteText.SetActive(true);
yield return new WaitForSeconds(1.5f);
//关卡完成后,淡出效果
UIController.sInstance.FadeToBlack();
yield return new WaitForSeconds((1f / UIController.sInstance.fadeSpeed) + 0.25f);
//关卡完成后,跳转新场景
SceneManager.LoadScene(levelToLoad);
}
在Unity中,指定levelToLoad场景(暂指定MainMenu)