06 一波又一波坏蛋来袭(和儿子一起编游戏-塔防系列 )

6.1 基本概念

俗话讲的好:蛇无头而不行,鸟无翅而不飞。在这个游戏里面,我们从这时候要确定一个管理者Game Master!从他这里发出一个又一个攻击波。

老余用Create Empty菜单建立了Game Master,在他下面新建了制造攻击波的类Wave Spawner

6.2 资深玩家用的API

WaveSpawner的类就是要动态的产生坏蛋攻击波。老余虽然是精通J2EE,不过IT口也是隔行如隔山,老余翻了不少资料,也问了些高人,好不容易理清楚这个门道:

enemyPrefab 是预制类,要跟Prefab的Enemy关联起来,动态生成坏蛋的时候,就找这个预制类

spawnPoint 就是起点坐标,把START那个Cube扔过来就行,瞪大眼睛,一定要找到Enemy Prefab和Spawn Point哈

整个攻击波制造的点就在Update,精华就在用协程(Coroutine - yield return)方式陆续的生成新攻击波,根据预制类动态生成小蛋的要点就在Instantiate。

using System.Collections;
using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    public Transform enemyPrefab;

    public Transform spawnPoint;

    public float timeBetweenWaves = 5f;
    private float countdown = 2f;  // 攻击波的计数器,后面Wave Spawner会有改进,增加难度

    private int waveIndex = 0;

    // Update is called once per frame
    void Update()
    {
        if (countdown <= 0f)
        {
            StartCoroutine( SpawnWave());  // 用协程(Coroutine - yield return)方式陆续的生成新攻击波,否则线程会相互重叠
            countdown = timeBetweenWaves;  // 重新计数
        }

        countdown -= Time.deltaTime;  // 计数器减一秒
    }

    IEnumerator SpawnWave()
    {
        waveIndex++;
        for (int i = 0; i < waveIndex; i++)
        {
            SpawnEnemy();
            yield return new WaitForSeconds(0.5f);  // 协程间隔0.5秒
        }        
    }

    void SpawnEnemy()
    {
        // 根据指定的Prefab,动态创建实例
        Instantiate(enemyPrefab, spawnPoint.position, spawnPoint.rotation);
    }
}

话不在多而在精,在明白的代码也要调试,老余试了一上午,终于搞定了,这是运行效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值