上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 设置多个敌人出生点