使用unity创建塔防游戏(原译)(part1)
塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了。
在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏。
你将会学到如何:
最后,你会有一个此类型游戏的框架,之后可在此基础之上进行扩展。
在本篇教程中,你将创建一个塔防游戏,敌人(小虫子)会朝着你的饼干移动,你可以在一些战略点上,使用金币放置和升级你收下的小怪兽来进行防御。
玩家必须在小虫子抵达饼干之前消灭它们,敌人会随着波数的增加而变得更加强大。 游戏将在玩家在所有波数之后存活下来(游戏胜利),或者有5个敌人抵达饼干之后结束(游戏失败)。
下面是一张完成的游戏截图:
准备开始如果你还没有Unity5,请从Unity的官网下载。
同时,下载这个starter项目,解压缩并且使用unity打开TowerDefense-Part1-Starter这个工程。
starter项目中包括了美术和声音资源,同时还有预设的动画以及一些帮助用的脚本,这些脚本跟塔防游戏没有直接的关系,所以不会再本教程中详细介绍。但是如果你想要更多的学习关于unity 2d动画的创建,请参考Unity 2D 教程。
项目中同时包含了一些 prefab供你稍后扩展用来创建游戏角色。最后,工程中包含背景和UI设置好的场景。
在Scenes文件夹中找到并打开GameScene, 设置Game视图的显示比例为4:3来保证labels能够正确的在背景中对齐,你在Game视图中看到的应该如下所示:
注:一开始我也没弄清楚什么意思,后来理解了是在
这里所示的窗口
Starter project – check!
Assets – check!
走向征服世界的第一步(你的塔防游戏...)已经准备好了!
小怪兽只能放在标记有X的地方。
从Project Brower中拖动Images\Objects\Openspot到场景中,目前来说放到哪个位置没有关系。
在Hierarchy中选中Openspot,在Inspector面板点击 Add Component并且选择 Physics 2D\Box Collider 2D。 Unity将会在场景中以绿色的线显示盒子碰撞器。你将会使用这个碰撞器来检测在某个点的鼠标点击。
使用相同的步骤,添加一个Audio\Audio Source组件到 Openspot上。并且设置Audio Source’s AudioClip 为 tower_place(可以在Audio文件夹中找到),记住不能勾选Play On Awake。
你需要再创建11个放置点,每个都得重复上面的步骤,不过不用担心,Unity有一个很好的解决办法: Prefab!
将OpenSpot从Hierarchy拖动到Project Browser里面的Prefabs文件夹,它的名字在Hierarchy将会变成蓝色,用来标示它是和一个prefab相关联的。像下面这样:
现在,你拥有了一个prefab,你就可以创建任意多的拷贝。简单的将Openspot从Prefabs文件夹中拖拽到场景中,再重复11次,一共在场景中创建12个放置点。
下面使用Inspector面板来分别设置这个12个放置点的坐标如下:
结束后,你的场景应该像下面这样:
为了使放置的工作简单点儿,工程的Prefab文件下中包含了一个Monster的prefab。
现在,它包含了一个空的游戏对象,由三种不同的精灵组成,和他们各自的射击动画。
每一个精灵代表了小怪兽不同的能力级别。Monster的prefab同时包含了一个Audio Source的组件,当怪兽发射激光的时候会触发播放声音。
现在你将创建一个脚本来在Openspot上放置一个小怪兽。
在Project Browser中 选择Openspot,在Inspector面板中,点击 Add Component然后选择New Script并重命名为PlaceMonster,选择C#作为脚本语言并以此点击Create和Add。因为你是向prefab添加的脚本,所以场景中所有的Openspot都将会被附件该脚本。
双击刚才创建的脚本,在编辑器中打开。然后添加下面的这两个变量
public GameObject monsterPrefab; private GameObject monster;你将使用monsterPrefab中的对象实例化一个拷贝来创建一个小怪兽,然后保存在monster变量中,方便之后的操作。
一个位置一个怪兽添加下面的方法来限制一个位置只能放置一个怪兽:
private bool canPlaceMonster() { return monster == null; }在canPlaceMonster方法中,我们检查monster变量是否为null,如果是的,则表示当前没有放置小怪兽,所以是允许放置一个的。
再添加下面的代码,来执行当玩家点击鼠标之后放置一个怪兽:
//1 void OnMouseUp() { //2 if (canPlaceMonster()) { //3 monster = (GameObject)Instantiate(monsterPrefab, transform.position, Quaternion.identity); //4 AudioSource audioSource = gameObject.GetComponent<AudioSource>(); audioSource.PlayOneShot(audioSource.clip); //todo: Deduct gold } }上面的代码在玩家点击或者Tap的时候放置一个怪兽,那么如何工作的呢?
2 . 当被调用之后,这个方法会检查是否可以放置怪兽,如果可则放置一个新的怪兽
现在我们的PlaceMonster脚本已经可以放置新的怪兽了,但还需要指定prefab这个步骤。
使用正确的Prefab在代码编辑器中保存,并返回Unity 。