QFramework-类幸存者笔记 -6:三分钟通关

特别感谢:

本文是凉鞋的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脚本中添加一个计算下个等级所需经验值公式

升级条件代表修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值