我是靠谱客的博主 难过汽车,这篇文章主要介绍Unity游戏开发官方入门教程:飞机大战(十一)——游戏控制本节要点一、随机生成敌人二、批量生成敌人三、清除残留的explosion写在最后,现在分享给大家,希望可以做个参考。

Unity版本:Unity 2018.2.14f1
原视频链接:https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial

教程目录:
Unity游戏开发官方入门教程:飞机大战(一)——创建新项目、导入资源、设置场景
Unity游戏开发官方入门教程:飞机大战(二)——创建飞船对象
Unity游戏开发官方入门教程:飞机大战(三)——设置相机和光照
Unity游戏开发官方入门教程:飞机大战(四)——使用Quad加入背景
Unity游戏开发官方入门教程:飞机大战(五)——实现飞船控制脚本
Unity游戏开发官方入门教程:飞机大战(六)——创建子弹
Unity游戏开发官方入门教程:飞机大战(七)——发射子弹
Unity游戏开发官方入门教程:飞机大战(八)——创建销毁边界
Unity游戏开发官方入门教程:飞机大战(九)——创建和销毁敌人
Unity游戏开发官方入门教程:飞机大战(十)——敌人的爆炸和移动
Unity游戏开发官方入门教程:飞机大战(十一)——游戏控制


本节要点

游戏控制器用于定时随机批量生成敌人。
本节要点如下:

  • 使用Random.Range()生成一定范围内的随机数,用于生成敌人的x坐标
  • 使用Quanternion.identity生成一个没有旋转的四元数
  • 使用coroutine(协程)
  • 使用Destroy()在指定时间内销毁对象

一、随机生成敌人

  1. Hierarchy中创建一个新的游戏对象,名为Game Controller,重置transform,tag设置为GameController
  2. 新建脚本名为GameController.cs,脚本代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameController : MonoBehaviour { public GameObject hazard; public Vector3 spawnValues; void Start () { SpawnWaves(); } void SpawnWaves() { Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x,spawnValues.x), spawnValues.y, spawnValues.z); Quaternion spawnRotation = Quaternion.identity; Instantiate(hazard, spawnPosition, spawnRotation); } }
  1. 将Prefabs中的Asteroid的拖拽hazard中
  2. Spawn Values设置为X=6, Y = 0, Z = 16
  3. 进入游戏,发现已经成功实现了随机生成敌人:

二、批量生成敌人

  1. 增加hazardCount, spawnWait, startWait, waveWait变量,分别用于表示敌人数量,敌人生成的间隔时间,游戏一开始的暂停时间,两批次敌人的间隔时间。
  2. 使用coroutine(协程),使得SpawnWaves()方法既可以等待,又不会导致游戏暂停。要让该方法成为coroutine,就要让该方法返回IEnumberator,而不是使用void。同时WaitForSeconds()方法要写成yield return new WaitForSeconds(spawnWait);。最后使用StartCoroutine(协程名)来启动该协程。
  3. GameController.cs脚本如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameController : MonoBehaviour { public GameObject hazard; public Vector3 spawnValues; public int hazardCount; //一批敌人的数量 public float spawnWait; //一批中,单个敌人生成的间隔时间 public float startWait; //开始的暂停时间 public float waveWait; //两批敌人之间的间隔时间 void Start () { StartCoroutine(SpawnWaves()); } IEnumerator SpawnWaves() { yield return new WaitForSeconds (startWait); while(true) { for(int i = 0; i < hazardCount; i++) { Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x,spawnValues.x), spawnValues.y, spawnValues.z); Quaternion spawnRotation = Quaternion.identity; Instantiate(hazard, spawnPosition, spawnRotation); yield return new WaitForSeconds(spawnWait); } yield return new WaitForSeconds(waveWait); } } }
  1. 分别将hazardCount, spawnWait, startWait, waveWait设置为10,0.5,1,4.
  2. 运行游戏,可见每一批敌人有10个,每一批时间的间隔为4秒:

三、清除残留的explosion

由于离开边界和碰撞都无法清除残留的explosion对象,因此我们用时间来销毁这些explosion对象。

  1. 创建脚本DestroyByTime.cs,代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DestroyByTime : MonoBehaviour { public float lifetime; void Start () { Destroy(gameObject, lifetime); } }
  1. 选中VFX->Explosion中的三个特效,增加DestroyByTime,并将lifetime设置为2,查看效果:

写在最后

如果你一路跟着做到了这里,Unity基本上可以算是入门了,官网还有一个坦克大战的教程跟这个思路其实差不多,把坦克大战里面的摄像机再弄懂了就可以做第一人称、第三人称的游戏,搞个demo出来应该可以稍微应付一下面试了。但前面还有很多路要走,还有很多坑要踩。我只能帮你到这里了。

后面的几节教程(音频、计分板、编译打包)懒得写了,有兴趣的话可以上官网或者b站看看,b站有中文翻译,链接放在后面参考资料了。

一开始写这个飞机大战教程也是打算总结一下自己,顺便帮助刚刚入门Unity开发的小伙伴们,毕竟看视频太冗长,看我写的教程几分钟就好了。中途断了好久没更新,没想到真的有人看,于是这两天有空就更新了一波。如果以后我不做游戏了,我写的这些还能给对游戏开发有兴趣的朋友们提供一些帮助,节约一些时间,那就足够了。

最后,祝各位准第九艺术从业者们都能拿到心仪的offer!


参考资料:
https://unity3d.com/cn/learn/tutorials/s/space-shooter-tutorial
https://www.bilibili.com/video/av17763657/?p=14

最后

以上就是难过汽车最近收集整理的关于Unity游戏开发官方入门教程:飞机大战(十一)——游戏控制本节要点一、随机生成敌人二、批量生成敌人三、清除残留的explosion写在最后的全部内容,更多相关Unity游戏开发官方入门教程:飞机大战(十一)——游戏控制本节要点一、随机生成敌人二、批量生成敌人三、清除残留内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部