特别感谢:
本文是凉鞋的QFramework-类幸存者 教程的学习笔记
https://qframework.cn/qf
QF官网:有详细免费入门教程
三分钟通关
添加一个三分钟游戏通过条件
先在Global重添加重置数据的方法
在UIGamePanel中添加事件监听当时间大于等于180s
在UIGamePassPanel中
游戏每次结束都添加添加重置数据
波次系统
using UnityEngine;
using QFramework;
using System.Collections.Generic;
using System;
namespace ProjectSurvivor
{
/// <summary>
/// 波次系统
/// </summary>
[Serializable]
public class EnemyWave
{
//间隔
public float GenerateDuration=1;
//敌人预设体
public GameObject EnemyPrefab;
//持续时间
public int Seconds = 10;
}
public partial class EnemyGenerator : ViewController
{
//当前生成时间
private float mCurrentGenerateSeconds = 0;
//当前波次时间
private float mCurrentWaveSeconds = 0;
[SerializeField]
public List<EnemyWave> EnemyWaves= new List<EnemyWave>();
private Queue<EnemyWave> mEnemyWavesQueue=new Queue<EnemyWave>();
public int WaveCount = 0;
//是否为最后一波
public bool LastWave=>WaveCount==EnemyWaves.Count;
private void Start()
{
foreach (var enemyWave in EnemyWaves)
{
mEnemyWavesQueue.Enqueue(enemyWave);
}
}
//当前波次
private EnemyWave mCurrentWave=null;
private void Update()
{
if (mCurrentWave==null)
{
if (mEnemyWavesQueue.Count>0)
{
WaveCount++;
mCurrentWave = mEnemyWavesQueue.Dequeue();
mCurrentGenerateSeconds = 0;
mCurrentWaveSeconds = 0;
}
}
if (mCurrentWave!=null)
{
mCurrentGenerateSeconds += Time.deltaTime;
mCurrentWaveSeconds += Time.deltaTime;
if (mCurrentGenerateSeconds>=mCurrentWave.GenerateDuration)
{
mCurrentGenerateSeconds = 0;
var player = Player.Default;
if (player)
{
var randomAngle = UnityEngine.Random.Range(0, 360);
var randomRadius = randomAngle * Mathf.Deg2Rad;
var direction = new Vector3(Mathf.Cos(randomRadius), Mathf.Sin(randomRadius));
var generatePos = player.transform.position + direction * 10;
mCurrentWave.EnemyPrefab.Instantiate()
.Position(generatePos)
.Show();
}
}
if (mCurrentWaveSeconds > mCurrentWave.Seconds)
{
mCurrentWave = null;
}
}
}
}
}
UIGamePanel中监听游戏结束事件
通关条件改进
不以时间判断,改为最后一波并且enemy全部死亡
UIGamePanel修改游戏结束条件
EnemyCount.Count计数
新增一个UI界面敌人ui 按老方法自动生成代码(不知道的宝可以看看前面的文章)
剑的频率升级
Global脚本新增SimpleAbilityDuration 攻击间隔
在UIGamePanel预设体中,新建一个UpgradeRoot空物体作为两个按钮的父节点(后续可添加更多按钮),alt+b Bind一下,在生成代码。
修改代码直接改为显示或者隐藏UpgradeRoot.
经验值升级改进
改为伴随等级提升所需经验值逐渐提高
Global脚本中添加一个计算下个等级所需经验值公式
升级条件代表修改