Unity 3D\2D手机游戏开发:从学习到产品(第3版)
上QQ阅读APP看书,第一时间看更新

3.7 出生点

现在,我们需要为敌人制作出生点,使其在场景中的不同位置每隔一定时间生成一定数量的敌人。这个出生点的制作与在前一章完成的出生点类似,但需要略加一些其他功能。为了能够控制敌人的数量,每个出生点需要清楚自己生成了多少个敌人,当达到最大值时,则暂停生成敌人。当敌人被消灭时,则需要通知出生点更新生成数量。

步骤 01 创建脚本EnemySpawn.cs:

        using UnityEngine;

        [AddComponentMenu("Game/EnemySpawn")]
        public class EnemySpawn : MonoBehaviour
        {
            // 敌人的Prefab
            public Transform m_enemy;

            //生成的敌人数量
            public int m_enemyCount = 0;

            // 敌人的最大生成数量
            public int m_maxEnemy = 3;

            // 生成敌人的时间间隔
            public float m_timer = 0;

            protected Transform m_transform;

            void Start () {
              m_transform = this.transform;
            }

            void Update () {

              // 如果生成敌人的数量达到最大值,停止生成敌人
              if (m_enemyCount >= m_maxEnemy)
                  return;

              // 每间隔一定时间
              m_timer -= Time.deltaTime;
              if (m_timer <= 0)
              {
                  m_timer = Random.value * 15.0f;
                  if (m_timer < 5)
                      m_timer = 5;

                  // 生成敌人
                  Transform obj=(Transform)Instantiate(m_enemy,
                                    m_transform.position, Quaternion.identity);
                  // 获取敌人的脚本
                      Enemy enemy = obj.GetComponent<Enemy>();
                      // 初始化敌人
                      enemy.Init(this);
                  }
                }

                void  OnDrawGizmos()
                {
                  Gizmos.DrawIcon (transform.position, "item.png", true);
                }
            }

在Update脚本中,当生成敌人后,我们取得了敌人的脚本组件,然后执行了一个Init函数完成敌人的初始化。

步骤 02 打开敌人的脚本Enemy.cs,添加一个EnemySpawn属性,然后添加Init函数,取得EnemySpawn的实例,并更新其生成敌人的数量。

            // 出生点
            protected EnemySpawn m_spawn;

            // 初始化
            public void Init(EnemySpawn spawn)
            {
                m_spawn = spawn;
                m_spawn.m_enemyCount++;
            }

步骤 03 在Enemy.cs的Update函数中更新死亡状态的代码,通知其出生点更新生成敌人的数量。

                        // 更新出生点的计数
                      m_spawn.m_enemyCount--;

步骤 04 创建一个空游戏体,指定EnemySpawn.cs脚本,并关联敌人的Prefab,最后的场景设置如图3-20所示。

图3-20 设置多个敌人出生点