目录
特别感谢:
本文是凉鞋的QFramework-类幸存者 教程的学习笔记
https://qframework.cn/qf编辑https://qframework.cn/qfhttps://qframework.cn/qfhttps://qframework.cn/qfhttps://qframework.cn/qf编辑https://qframework.cn/qf QF官网:有详细免费入门教程
更新框架 & 游戏失败后重新开始
紧接上篇,碰撞后显示游戏结束界面,按空格重新开始
UIGameOverPanel脚本打开
protected override void OnInit(IUIData uiData = null)
{
mData = uiData as UIGameoverPanelData ?? new UIGameoverPanelData();
//按下空格键重新加载SampleScene
ActionKit.OnUpdate.Register(() =>
{
if (Input.GetKeyDown(KeyCode.Space))
{
this.CloseSelf();//关闭当前页面
SceneManager.LoadScene("SampleScene");
}
}
).UnRegisterWhenGameObjectDestroyed(gameObject);
}
敌人距离主角一定范围内受伤
给player一个空物体Abilities-创建一个SimpleAbility。在Scrips文件里面Game中添加一个Ablity文件。然后给SimpleAbility alt+v 创建View Controller脚本再改一下脚本目录-生成代码即可。
生成代码后填写受伤判断
using UnityEngine;
using QFramework;
namespace ProjectSurvivor
{
public partial class SimpleAbility : ViewController
{
private float mCurrentSeconds = 0;
void Start()
{
// Code Here
}
private void Update()
{
//做一个计时器
mCurrentSeconds +=Time.deltaTime;
if (mCurrentSeconds > 1.5f)
{
mCurrentSeconds = 0;
//得到敌人
var enemies = FindObjectsByType<Enemy>(FindObjectsInactive.Exclude, FindObjectsSortMode.None);
//判断与敌人的距离
foreach (var enemy in enemies)
{
//距离
var distance = (Player.Default.transform.position - enemy.transform.position).magnitude;
if (distance<=5)
{
enemy.Sprite.color = Color.red;
//enemy缓存一下引用
var enemyRefCache = enemy;
ActionKit.Delay(0.3f,() =>
{
enemy.Sprite.color = Color.white;
}).StartGlobal();
}
}
}
}
}
}
游戏结束
简单实现主角攻击三次敌人,敌人死亡游戏结束。
首先给敌人定义一个HP=3当HP<=0时,打开UIgamePassPanel,再销毁自己。
private void Update()
{
if (Player.Default)
{
var direction = (Player.Default.transform.position - transform.position).normalized;
transform.Translate(direction * Time.deltaTime * MovementSpeed);
}
if (HP<=0)
{
UIKit.OpenPanel<UIGamePassPanel>();
this.DestroyGameObjGracefully();
}
}
SimpleAbility脚本在判断时添加HP--
复制生成一个UIGamePassPanel
改了要记得在Overrides里面Apply all
然后在Assets-Art-UIprefab-UIGamePassPanel右键@Resikit-AssetBundle Mark再点一下alt+c生成代码-运行。添加按下空格重新开始代码。
using UnityEngine;
using UnityEngine.UI;
using QFramework;
using UnityEngine.SceneManagement;
namespace ProjectSurvivor
{
public class UIGamePassPanelData : UIPanelData
{
}
public partial class UIGamePassPanel : UIPanel
{
protected override void OnInit(IUIData uiData = null)
{
mData = uiData as UIGamePassPanelData ?? new UIGamePassPanelData();
// please add init code here
ActionKit.OnUpdate.Register(() =>
{
if (Input.GetKeyDown(KeyCode.Space))
{
this.CloseSelf();//关闭当前页面
SceneManager.LoadScene("SampleScene");
}
}
).UnRegisterWhenGameObjectDestroyed(gameObject);
}
protected override void OnOpen(IUIData uiData = null)
{
}
protected override void OnShow()
{
}
protected override void OnHide()
{
}
protected override void OnClose()
{
}
}
}
简单闭环完成,接下来是完善优化。