位置: 编程技术 - 正文

Unity3D游戏开发之塔防游戏项目讲解(下)(Unity3D游戏开发(第2版)pdf)

编辑:rootadmin

推荐整理分享Unity3D游戏开发之塔防游戏项目讲解(下)(Unity3D游戏开发(第2版)pdf),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity3D游戏开发,Unity3D游戏开发(第2版)pdf,Unity3D游戏开发(第2版),Unity3D游戏开发(第2版),Unity3D游戏开发(第2版),Unity3D游戏开发毕业论文,Unity3D游戏开发毕业论文,Unity3D游戏开发(第2版),内容如对您有帮助,希望把文章链接给更多的朋友!

各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是 在上一篇文章中,我们从塔防游戏的三个组成要素地图、敌人、防守单位对塔防游戏进行了较为全面的阐述,并通过实例完成了塔防游戏的第一部分:地图篇。那么我们今天来继续完成这个塔防游戏的开发,首先我们来看第一部分:敌人篇。

敌人篇

敌人在游戏中有一个基本的行为,即沿着寻路路径向我方阵地移动并发起攻击。在地图篇中,我们详细地介绍了敌人寻路路径的生成原理。既然有了敌人寻路的路线,那么怎么让敌人沿着路线移动呢?其实只要指定敌人寻路的起点,因为在寻路路径的设计中,我们使用的是一个类似于链表的结构,这样我们就能根据每个结点获取它的目标结点,从而实现敌人沿着寻路路径移动的效果了。因为敌人寻路的路线是定义在PathNode类中的,因此我们可以写出下面这样的代码:

好了,现在我们来一起分析这段代码。首先,我们计算了敌人与路径结点间的距离,这里我们用0.1来近似地表示敌人已经到了路径结点上,此时如果该结点的目标结点为null则表示此时敌人已经到了最后一个结点处,所以敌人会对我方的阵地造成点的伤害并销毁敌人。在GameManager我们使用了一个列表来管理和维护当前场景中的所有敌人,因此当当前敌人销毁时需要从列表中移除,GameManager类是一个静态类,负责对游戏的全局维护,这个类我们放到稍后来讲啊。那么如果敌人没有走到最后一个结点怎么办呢?我们只需要将StartNode指向StartNode的目标节点,这样我们就可以对整个路径结点实现遍历。这里是不是有种数据结构的感觉呢?哈哈,数据结构和算法是编程中最基础、最重要的内容,这些内容到了游戏开发领域同样是适用的。那么,好了,既然知道敌人是怎么移动的,现在我们就来对敌人进行移动吧,这里是采用计算移动方向的方式来实现,这个很简单啦。

好了,现在我们来说说敌人的血条吧,我们知道当怪物沿着寻路路径向我方阵地发起攻击的时候,我方防守单位会自动地对敌人进行防御性攻击,那么此时血条就可以显示敌人的实时血量,从而方便玩家根据战场的情况来调整兵力部署情况。我们知道从Unity4.6以后Unity开始使用全新的GUI系统UGUI,因为博主在之前的项目中一直使用NGUI,加上博主不是很喜欢做UI,所以每次用NGUI的时候整个人的心情都是不好的,有段时间被NGUI虐得体无完肤,感觉整个人都不好了。好了,既然现在我们有了新的选择UGUI,那么就让我们先睹为快吧!如图,全新的NGUI位于GameObect->UI菜单下,基本覆盖了常用的如Button、Image、Slider、ScrollBar等控件,因为UGUI刚推出不久,所以博主希望大家还是能客观、公正的对待UGUI和NGUI,博主认为在短期内这两个GUI系统将处于共存的状态,不存在相互替代的可能性。 好了,UGUI所有的控件都是放到一个叫做Canvas的父控件下的,这一点和NGUI的UIRoot有些类似吧!Canvas提供了三种模式的UI系统,即Screen Space-Overlay、Screen Space-Camera、World Space。第一种Screen Space-Overlay它是完全以当前屏幕的像素大小创建的一个矩形范围,即控件是以屏幕坐标来绘制的;第二种Screen Space-Camera它是根据相机的视线范围来确定的一个矩形范围,其控件是根据Camera的ViewPortPoint坐标来绘制的;第三种从名称我们就可以知道,它是完全3D化的UI,使用的是常用的世界坐标。博主是刚开始研究UGUI,如果有不对的地方还希望大家能够原谅啊。好了,下面我们正式来做血条吧,在这里我们使用的是默认的Slider控件,用Slider控件来制作血条需要将Slider控件自带的滑块删除,然后我们通过改变value就可以实现一个简单的血条了。在UGUI中所有的图片素材都是以Sprite的形式来出现的,所以UGUI可以自己生成图集,不需要像NGUI在做UI前首先要生成图集。这是博主做的一个简单的血条。现在血条做好了,可是问题来了:这UGUI的所有控件都必须要放到Canvas下面啊,所以我们没法像NGUI一样直接把做好的血条放到怪物下面。怎么办呢?既然不能放到怪物下面,那我们就放到Canvas下面吧,不过我们需要自己计算血条的位置。好了,下面来看代码:

在这里我们做了三件事情: * 第一,在Awake方法中我们首先计算出血条的位置然后在这个位置生成血条,并取得相关的变量备用。 * 第二,在Update方法中增加一个UpdateHPBar方法以实现对血条血量的更新。 * 第三,增加了一个SetDamage方法,当敌人血量为0时销毁自身、销毁血条、从敌人列表中移除敌人 好了,到现在为止,对于敌人的逻辑我们就全部实现了。可是我们知道在塔防游戏中敌人通常是一波一波出现的,所以我们需要一个敌人生成器EnemySpawn。那么,怎么来生成敌人呢,这里我们使用Xml文件来配置要生成的敌人列表,首先我们来构建一个Xml文件:

Unity3D游戏开发之塔防游戏项目讲解(下)(Unity3D游戏开发(第2版)pdf)

从这个Xml文件中我们可以看到这样一个结构:

在SpawnData这个结构中,我们可以得到敌人攻击的波数、敌人的名称、敌人等级、敌人生成需要等待的时间,因为博主在游戏中只有一种敌人,所以敌人的名称都是一样的。好了,现在我们可以开始解析Xml了:

那么好了,在解析完Xml后我们得到了所有的敌人数据,接下来我们只需要按照顺序生成敌人就可以了。具体怎么做呢,我们知道在塔防游戏中生成敌人有两种情况: * 一个是要生成的敌人和当前敌人是同一波的,这种情况只要继续生成就好了。 * 一个是要生成的敌人的波数大于当前波数,这种情况需要等待这一波敌人被消灭完。 好了,现在来写代码:

我们可以注意到,到现在为止敌人相关的内容博主都已经为大家讲解完了,这里博主和大家开了一个小玩笑,不知道大家有没有发现,在敌人的Xml配置文件中博主最后设计了一个等级为级的敌人,哈哈,这个敌人在游戏中的特点大家要自己从代码中来探索了,大家可以按照博主的思路做出这个塔防游戏然后自己去试试看,相信大家会更加深刻地理解数值平衡的重要性吧!

防守单位篇

防守单位是塔防游戏中玩家可以支配和控制的一种资源,玩家通过合理地分布防守单位的位置来对玩家的防守阵地进行防御,当玩家的防守阵地被摧毁时玩家将无法继续部署防守单位。这就是防守单位在游戏中的主要作用。通常为了增加游戏的可玩性,游戏设计者往往会设计多种防守单位,在博主的这个小游戏中,我们只设计了一种防守单位,更多的防守单位的设计大家可以参考《保卫萝卜》和《植物大战僵尸》这两个游戏。好了,说了这么多,那么防守单位在整个塔防游戏中主要的作用是什么呢?答案就是防守,哈哈,这是一句不折不扣的废话。可是就是这样一句废话,却足以让我们知道防守单位需要对敌人进行自动攻击,这就要涉及到简单的AI算法了。好了,我们来看下面的脚本:

防守单位的脚本定义在Defender这个类中,主要的行为有两个,即发现敌人后转向敌人、向敌人发射炮弹,这块的代码较为简单,大家自己去领会就好啦。我们知道在塔防游戏中玩家可以通过点击屏幕来自由地增加或移动防守单位,这部分的内容主要是和GUI相关的,因为目前博主对UGUI掌握地还不是很熟,所以就等以后博主有时间了再来补充吧!好了,这个塔防游戏的讲解教程就是这样了,希望大家能够喜欢,我知道大家等这篇下篇已经好久了,哈哈! 最后想说的是,博主的独立博客

Unity3d接入googleplay内购详细说明(一) 因为本文内容比较多,整理花费时间比较长,故分几篇完成,以下为本文目录结构,方便查阅:Unity3d接入googleplay内购详细说明(一)引言一、准备条件

Unity3d接入googleplay内购详细说明(二) 因为本文内容比较多,整理花费时间比较长,故分几篇完成,以下为本文目录结构,方便查阅:Unity3d接入googleplay内购详细说明(一)引言一、准备条件

Unity3d接入googleplay内购详细说明(三) 因为本文内容比较多,整理花费时间比较长,故分几篇完成,以下为本文目录结构,方便查阅:Unity3d接入googleplay内购详细说明(一)引言一、准备条件

标签: Unity3D游戏开发(第2版)pdf

本文链接地址:https://www.jiuchutong.com/biancheng/382558.html 转载请保留说明!

上一篇:【三消游戏】第四节,添加声音和爆炸效果,利用协程完善交换过程等(三消游戏攻略)

下一篇:Unity3d接入googleplay内购详细说明(一)(unity3d接入抖音广告api)

  • 外贸企业出口退税计算公式
  • 小规模纳税人企业购进货物和接受应税劳务时
  • 增值税发票的红章压到金额没有关系吧
  • 一次性加速折旧汇算清缴怎么填报
  • 如何查询公司的财务负责人
  • 运输发票抵扣进项税率
  • 工资结算汇总表会计科目
  • 增值税普通发票查询真伪
  • 企业年金个人所得税最新规定
  • 事业编制公考
  • 员工买了多项东西怎么说
  • 电子税务局一般纳税人申请流程
  • 劳动争议的解决途径不可以直接选择的是
  • 技术服务费发票需要备注吗
  • 支付员工补偿金计入管理费用的福利费用吗
  • 个体工商户开服务类型发票怎么开的
  • 电子产品怎么计税
  • 对外捐赠会计和税法差异调整
  • php导入
  • wcu.exe是什么
  • 预收账款何时结转
  • hprj是什么文件
  • 先付费后收到发票怎么做分录
  • 债务重组利得计入投资收益还是营业外收入
  • 空调移机人工费多少钱
  • 代扣代缴个人所得税手续费返还 增值税
  • php发送qq邮箱
  • yolov3训练自己的数据超详细
  • 一只什么海鸥填空
  • php结果以什么形式返回
  • SE注意力机制加在什么位置
  • java pdf生成工具
  • 日用品可以开专票吗
  • pytorch 例子
  • 如何在idea上运行python
  • Python中tkinter的 Variable类
  • 预收款怎么做表格
  • 公司一年没有业务
  • 新准则印花税计提会计分录
  • 城镇土地使用税征收标准及计算方法
  • 交通费用怎么报销
  • 增值税抵扣明细网络超时怎么处理
  • 哪些费用计入管理费用
  • 会计和外贸哪个工作强度大
  • 长租公寓如何纳税
  • 小规模购置金税盘抵税如何申报
  • 企业研发费用怎么证明
  • 典当行收房产证吗直接可以拿钱吗
  • 注册资本可以是欧元吗
  • 资产负债表与利润表的勾稽关系公式
  • 陈列费收取标准
  • 现金投资属于什么会计科目
  • 收到红字增值税发票哪里查
  • 企业注销以后
  • 旅游业餐饮业
  • 安装mysql提示one or more
  • UNIX系统中文件的索引表结构
  • win10系统迅雷
  • 强制结束进程命令快捷键
  • windows电脑加速
  • ubuntu系统安装无线网卡驱动
  • linux终端记录
  • alg.exe是什么程序
  • ubuntu怎么建立文件
  • linux tracker
  • process32first 进程信息为空
  • windows局域网共享文件用的什么协议
  • linux apache2配置
  • cocos lua js
  • 疯狂Android讲义(kotlin版)
  • linux查看so中的函数
  • python pdf操作
  • 如何输出反序数
  • 深入理解linux内核第三版
  • 有哪些比较好的android的框架
  • 基于javascript的毕业设计
  • 武汉经济技术开发区法院立案庭电话
  • 青岛税务社保缴费下载平台
  • 开健身会所国家有补贴吗
  • 天津静海离天津市区多远
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设