位置: 编程技术 - 正文

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)

  • 交易性金融资产的账务处理
  • 业务员报销差旅费会计分录怎么做
  • 其他现代服务业能开哪些税目
  • 存款利息收入增值税是免税还是不征税
  • 委托付款税务认可吗
  • 加计抵减怎么入账
  • 盘盈存货会计处理会计分录
  • 预收房租增值税税率
  • 境外分回的股息并入应纳税所得
  • 其他应付款冲销怎么做
  • 用友软件作废凭证
  • 企业每个月都要关账吗
  • 小规模专票冲红怎么操作
  • 公司车辆高速费用能开增值税专用发票吗
  • 酒类消费税征收环节归纳
  • 房产税的计税依据包含增值税吗
  • 固定资产一次性计入费用的账务处理
  • 销售库存商品会引起收入增加吗
  • 查账征收改为核定征收需要什么资料
  • 报废的周转物怎么处理?
  • 营销策划费用计算公式
  • 调整上年度多计提的附加税
  • 技术合同包括哪些类型
  • 误删的文件怎么撤回
  • 长期投资损失的确认
  • 公司处于亏损状态,股东要退股怎么办
  • 用支票购入厂部办公用品2000元,车间办公用品1000元
  • phpjoin
  • 预缴企业所得税分录
  • 开发商违法
  • 员工旅游的费用可以税前扣除吗
  • 工业企业如何纳税
  • html扫码功能
  • js数组方法大全
  • 微信小程序实现轮播图
  • php单例模式
  • excel2016添加指定行数
  • 投资收益的会计处理
  • 判别是否属于劳务报酬
  • 哪些增值税发票不可以抵扣
  • mysql启动器
  • MySQL Proxy的安装及基本命令使用教程
  • php怎么关闭
  • php判断数据库用户名是否存在
  • 保证人不承担责任的情形(上)
  • 营改增后为什么利息要提供发票吗
  • 定期定额征收和核定征收哪个好
  • 固定资产账实不符违反的规定
  • 社保公积金怎么取出来
  • 免费样品的好处
  • 销售货物的流程
  • 物流公司账务处理流程及方法
  • 进项税额抵扣时分录
  • 什么情况会影响到征信
  • 工资扣水电费怎么做账
  • 固定资产建账为什么不能直接输入名字
  • 商业承兑汇票开票流程
  • sql server数据库怎么导出
  • ubuntu20.04设置
  • win7系统怎么打开开机启动项
  • linux oracle12c
  • 苹果mac有啥用
  • win7开启路由功能
  • win8.1 应用商店是不是不能用了
  • win10电源选项
  • linux检测硬件
  • win8卸载软件在哪里卸载
  • 批处理/l
  • opengl绘制一个矩形
  • node.js怎么样
  • jQuery实现ToolTip元素定位显示功能示例
  • for语句的执行过程图解
  • unity资源库
  • 安卓Android下载
  • gridlayout用法
  • 纳税信用等级在哪里查
  • 淮安市地税局电话号码
  • 外籍人个人所得税汇算清缴流程
  • 民办非企业暂行
  • 税法难吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设