Unity3D手机游戏开发3.7 出生点_Unity3D手机游戏开发3.7 出生点试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Unity3D手机游戏开发 > 3.7 出生点

Unity3D手机游戏开发——3.7 出生点

3.7 出生点 接下来,我们需要为敌人制作出生点,使其在场景中的不同位置每隔一定时间生成一定数量的敌人。这个出生点的制作与在前一章完成的出生点类似,但需要略加一些其他功能。为了能够控制敌人的数量,每个出生点需要能清楚自己生成了多少敌人,当达到最大值时,则暂停生成敌人。当敌人被消灭时,则需要通知出生点更新生成数量。 创建脚本EnemySpawn.cs: using UnityEngine; using System.Collections; 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函数完成敌人的初始化。 打开敌人的脚本Enemy.cs,添加一个EnemySpawn属性,然后添加Init函数,取得EnemySpawn的实例,并更新其生成敌人的数量。 // 成生点 protected EnemySpawn m_spawn; // 初始化 public void Init(EnemySpawn spawn) { m_spawn = spawn; m_spawn.m_enemyCount++; } 在Enemy.cs中再添加一个OnDeath函数专门处理敌人的死亡状态,更新其出生点生成敌人的数量。 // 当被销毁时 public void OnDeath() { //更新敌人数量 m_spawn.m_enemyCount--; // 加分 GameManager.Instance.SetScore(100); // 销毁 Destroy(this.gameObject); } // Update 函数中的死亡状态 if (stateInfo.nameHash == Animator.StringToHash("Base Layer.death") && !m_ani.IsInTransition(0)) { if (stateInfo.normalizedTime >= 1.0f) { OnDeath(); } } 创建一个空游戏体,指定EnemySpawn.cs脚本,并关联敌人的prefab,最后的场景设置如图3-21所示。 图3-21 设置多个敌人出生点 3.8 小地图 现在的游戏已经有模有样,但因为四面八方都是敌人,我们在游戏的时候可能搞不清敌人都在哪里,最后我们将为游戏添加一个小地图,用来查看敌人的位置。 在菜单栏选择【GameObject】→【Create Other】→【Camera】创建一个新的摄像机,它将作为小地图的专用摄像机。调整它的位置,使其在场景下方垂直向下,然后设置Normalized Vew Port Rect改变摄像机显示区域的位置和大小,如图3-22所示。 图3-22 设置小地图摄像机 运行游戏,屏幕的右上方即会出现一个小地图,但根本看不清里面的东西,如图3-23所示。 图3-23 小地图 现在的小地图摄像机与正常摄像机的显示是一样的,只不过它是从上向下看。接下来我们要做的是使小地图摄像机与主摄像机只专注显示自己需要的东西。 创建一个球体,命名为dummy,将其材质设为红色Self-Illumin/Diffuse,它将作为敌人的“代替体”,只能显示在小地图之中,并不能在主摄像机视图显示出来。将球体的Sphere Collider去掉,如图3-24所示,我们只需要它的显示功能。 图3-24 删除球体的碰撞组件 创建一个新的Layer,命名为dummy,并设置球体的Layer为dummy。 将球体置于敌人Prefab的层级之下,这样它会随着敌人的移动而移动,如图3-25所示。 图3-25 关联球体和敌人 选择主摄像机,取消显示dummy层,球体在主摄像机视图中将不会被显示出来,如图3-26所示。 图3-26 在主摄像机视图中隐藏球体 选择小地图摄像机,使其只显示level和dummy层,这样在小地图中只能看到场景和球体,如图3-27所示。 图3-27 在小地图摄像机视图中只显示球体和场景 使用相同的方法为主角也创建一个“代替体”,可以为其指定与敌人不同的颜色。 运行游戏,最后的效果如图3-28所示。如果希望继续改进小地图的显示,还可以为场景专门制作一个用于小地图显示的模型。 图3-28 最后的小地图效果 本章的示例工程文件保存在光盘目录chapter03_FPS。在光盘目录buildfps下保存有已经编译好的版本,可以直接运行游戏。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Unity3D手机游戏开发》其他试读目录

• 3.1 策划
• 3.2 游戏场景
• 3.3 主角
• 3.4 敌人
• 3.5 UI界面
• 3.6 交互
• 3.7 出生点 [当前]
• 小结
• 4.1 策划
• 4.2 游戏场景
• 4.3 摄像机
• 4.4 游戏管理器
• 4.5 路点
• 4.6 敌人
• 4.7 敌人生成器
• 4.8 防守单位
• 4.9 生命条
• 4.10 自定义按钮
• 小结
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •