HTML5技术

使用unity创建塔防游戏(原译)(part1) - le0zh

字号+ 作者:H5之家 来源:博客园 2016-02-24 12:00 我要评论( )

使用unity创建塔防游戏(原译)(part1) 塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了。 在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏。 你将会学到如何: 最后,你会有一个此类型游戏的框架,之后可在此基础之上

使用unity创建塔防游戏(原译)(part1)

塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了。
在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏。

你将会学到如何:

最后,你会有一个此类型游戏的框架,之后可在此基础之上进行扩展。

img

最终效果

在本篇教程中,你将创建一个塔防游戏,敌人(小虫子)会朝着你的饼干移动,你可以在一些战略点上,使用金币放置和升级你收下的小怪兽来进行防御。

玩家必须在小虫子抵达饼干之前消灭它们,敌人会随着波数的增加而变得更加强大。 游戏将在玩家在所有波数之后存活下来(游戏胜利),或者有5个敌人抵达饼干之后结束(游戏失败)。

下面是一张完成的游戏截图:

img

准备开始

如果你还没有Unity5,请从Unity的官网下载。

同时,下载这个starter项目,解压缩并且使用unity打开TowerDefense-Part1-Starter这个工程。
starter项目中包括了美术和声音资源,同时还有预设的动画以及一些帮助用的脚本,这些脚本跟塔防游戏没有直接的关系,所以不会再本教程中详细介绍。但是如果你想要更多的学习关于unity 2d动画的创建,请参考Unity 2D 教程。

项目中同时包含了一些 prefab供你稍后扩展用来创建游戏角色。最后,工程中包含背景和UI设置好的场景。

在Scenes文件夹中找到并打开GameScene, 设置Game视图的显示比例为4:3来保证labels能够正确的在背景中对齐,你在Game视图中看到的应该如下所示:

img

注:一开始我也没弄清楚什么意思,后来理解了是在

这里所示的窗口

Starter project – check!
Assets – check!
走向征服世界的第一步(你的塔防游戏...)已经准备好了!

可放置点的 X 标记

小怪兽只能放在标记有X的地方。
从Project Brower中拖动Images\Objects\Openspot到场景中,目前来说放到哪个位置没有关系。

在Hierarchy中选中Openspot,在Inspector面板点击 Add Component并且选择 Physics 2D\Box Collider 2D。 Unity将会在场景中以绿色的线显示盒子碰撞器。你将会使用这个碰撞器来检测在某个点的鼠标点击。

img

使用相同的步骤,添加一个Audio\Audio Source组件到 Openspot上。并且设置Audio Source’s AudioClip 为 tower_place(可以在Audio文件夹中找到),记住不能勾选Play On Awake。

你需要再创建11个放置点,每个都得重复上面的步骤,不过不用担心,Unity有一个很好的解决办法: Prefab!

将OpenSpot从Hierarchy拖动到Project Browser里面的Prefabs文件夹,它的名字在Hierarchy将会变成蓝色,用来标示它是和一个prefab相关联的。像下面这样:

gif

现在,你拥有了一个prefab,你就可以创建任意多的拷贝。简单的将Openspot从Prefabs文件夹中拖拽到场景中,再重复11次,一共在场景中创建12个放置点。
下面使用Inspector面板来分别设置这个12个放置点的坐标如下:

结束后,你的场景应该像下面这样:

img

放置小怪兽(防御塔)

为了使放置的工作简单点儿,工程的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的时候放置一个怪兽,那么如何工作的呢?

  • 当玩家点击一个游戏对象的碰撞器的时候,Unity会自动的调用OnMouseUp方法
    2 . 当被调用之后,这个方法会检查是否可以放置怪兽,如果可则放置一个新的怪兽
  • 使用 Instantiate方法创建一个怪兽对象,这个方法会根据指定的prefab和指定的位置和旋转角度创建一个对象。在本例中,我们拷贝了monsterPrefab ,并指定了当前游戏对象的位置,以及没有旋转,最后将结果转换为GameObject类型存储在monster变量中。
  • 最后,调用PlayOneShot方法播放附加在AudioSource组件上的声音特效。
  • 现在我们的PlaceMonster脚本已经可以放置新的怪兽了,但还需要指定prefab这个步骤。

    使用正确的Prefab

    在代码编辑器中保存,并返回Unity 。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

      【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

      2017-04-30 16:00

    • 对于Bootstrap的介绍以及如何使用 - novai-L

      对于Bootstrap的介绍以及如何使用 - novai-L

      2017-04-29 09:00

    • 在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

      在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

      2017-04-28 15:00

    • 探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用 - nzbin

      探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用 - nzb

      2017-04-25 09:02

    网友点评
    h