塔防游戏——攻击方设计

塔防游戏相信大家并不陌生,几个主要元素如下:

1、敌方士兵

2、我方防御塔

3、我方主城

emmmmmmm好像就没了。

人越狠,话越不多。不多说,接下来我们一步步把这几个功能做完。

素材准备:

网上随便找一些资源就行,不一定要和我一样。这里再次强调:

网上获取的资源一定不能用作商业用途!!!!!!

就本工程而言,资源有一下几种:

敌人2个,分别拥有移动,攻击,待机,死亡四种动画

防御塔3个,拥有待机,攻击两种动画

人形防御塔可还行

主城1个,主地形1组(内含各种杂草乱石)


敌人地形(敌人能用来走的路)1种,防御塔地形(防御塔能放置的地方)1种,箭矢1个

场景搭建:

先从简单的功能做起:让敌人从生成点走到主城,看见主城就攻击。

搭建一个简单场景:


为了检测敌人寻路,最好是能转弯的道路

敌人和主城有一个都有血量的属性,都会被攻击,这里为它们做能显示在头上的血条。

以主城为例,在主城的子节点层创建一个Sprite做黄血条,设为黄色,取名“BloodStrip”,调整好大小:

然后在BloodStrip的子节点层创建一个空物体,取名“Hp”,在Hp的子节点层再创建一个Sprite做红血条,名字“Red”,设为红色,大小和黄血条一样,把黄血色覆盖:


接下来就移动红血条位置,让它左边边缘与父物体Hp的Y轴重合:


然后再将Hp往右移动,让Y轴与黄血条左边缘重合(红血条刚好覆盖黄血条):


这样我们只需要设置H的X轴大小,就可以控制红血条长度了

***这里请初学者注意,如果你选取的红血条图片资源不是纯色的、是有其他花纹的,则不能用这个方法。原因很简单,这种方法会把花纹拉长或压扁。大家可以下来想一下:这种情况下应该怎样来设置?

后面在代码中只需要将当前血量与总血量的比值赋给Hp的X轴,就可以将血量信息显示在界面上了。敌人血条做法一样。

做好后让BloodStrip处于禁用状态,受伤后才显示(这是游戏UI显示的一个约定俗成的规则)。

代码编写:

为主城与敌人创建一个基类脚本Character:

创建主调脚本:用于游戏初始化和记录游戏死亡,挂在一个场景物体上:

创建主城脚本,继承自Character脚本:

敌人的脚本也继承自Charater,除了受伤和死亡之外还能攻击与移动:

重点在移动方法上。因为敌人的移动带有寻路功能,这里没有采取Unity自带的NavMeshAgent,而是用脚本来实现,主要思路仿照盲人的行进方式,利用射线充当导盲棍,发现前方道路中断再从两边找新的行进路线:

拐杖就是射线

要利用好这个思路,场景中道路的搭建也有一定要求,道路都要挂上MeshCollider组件,方便射线检测。


所有道路的Z轴指向路线前进方向

道路的物体层设置为“Way”,主城也挂上碰撞器,物体层设为“City”。


在敌人模型身上创建一个空物体为眼睛,取名为“Eye”,主要作用是从此为射线起始点,位置合适即可,注意,因为所有敌人都用的相同脚本,所以所有敌人的眼睛高度距离地面相同:


正面看这些模型真特么惊悚

当然每个敌人也请挂上碰撞器和刚体以及Animator组件:


创建一个敌人状态机:

重写初始化方法:

编写移动方法,并在Update中调用:

暂时把初始化方法放在Start中调用(后面我们会在创建的时候初始化),然后设置好血量、视野、速度、伤害,主城也设置好血量:


先来看下寻路运行效果:

蓝线检测前方道路,红圈检测周围道路

寻路没有问题了,将攻击动画设为循环播放,然后将攻击方法放入攻击动画事件中,敌人看到主城就会自动攻击了:

敌人主要功能就已经完成。现在我们来做敌人生成器。

塔防游戏的敌人生成方式一般都是比较有规律的,比如先生成一组a敌人,跟着生成一组b敌人,每组敌人的生成间隔也恒定(当然,读者也可以自己尝试更丰富的出兵方法,比如让“某些特定敌人的血量减到某个阈值”作为触发条件等等):


为了生成方便,我们来做一个定时器,可以重复并规律地调用一个生成敌人方法:

把所有敌人放入一个路径中,创建一个空物体做敌人生成器,放在敌人生成点,创建脚本挂上去:

做到这一步就可以像演示视频中那样点击按钮出兵了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • 无尽之塔角色图鉴1 无尽之塔角色图鉴2 无尽之塔链接1 无尽之塔链接2 游戏更新频繁,且本文由代码自动生成,...
    z_fire阅读 1,359评论 0 1
  • ----------------------- 页面 1----------------------- 2013 ...
    长春傳齐3阅读 4,110评论 0 1
  • 无尽之塔角色图鉴1 无尽之塔角色图鉴2 无尽之塔链接1 无尽之塔链接2 游戏更新频繁,且本文由代码自动生成,...
    z_fire阅读 2,482评论 0 0
  • Unity3D塔防开发流程 配置环境及场景搭建 编程语言:C#,略懂些许设计模式,如果不了解设计模式,BUG Mo...
    Grape_葡萄阅读 2,849评论 1 3
  • 前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低。开发联网实时对战的3D游戏门槛就更高,因为即...
    大王12阅读 5,899评论 2 6