Unity3D游戏开发之塔防游戏项目讲解(上)
基于Unity3D的塔防游戏的研究与实现

本科毕业设计(论文) 基于Unity3D的塔防游戏的研究与实现Research and Implementation of Tower Defense Game Based on Unity3D毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行的设计(研究)工作及取得的成果,论文中引用他人的文献、数据、图件、资料均已明确标注出,论文中的结论和结果为本人独立完成,不包含他人已经发表或撰写的作品及成果。
对本文的研究作出贡献的个人和集体,均已在论文中作了明确的说明。
本人完全意识到本声明的法律结果由本人承担。
毕业论文作者(签字):签字日期:年月日成绩评定注:毕业设计(论文)成绩按百分制评定。
答辩成绩不及格的(评分低于60分的),则该毕业设计(论文)总评成绩为答辩成绩。
摘要21世纪20年代,游戏已经成为了大众经常选择的娱乐方式。
其中,Unity3D作为时下热门的游戏开发引擎,不仅功能完善易上手,还可以免费使用成本低,理所当然的被许多游戏开发者所使用。
Unity3D作为一款全面整合的专业游戏引擎,可以让开发者轻轻松松的去创建3D游戏、建筑可视化、实时3D动画等功能,其优秀的跨平台性使得Unity3D可以运行在包括但不只含于Windows、Android 和Mac等平台。
本次的毕业设计,将实现windows平台游戏的开发,使用Unity3D 游戏开发工具,编写代码为C#语言,开发制作一款名为《方块防线》3D塔防游戏,并在制作的过程中将对项目的需求、游戏的设计和具体的实习方法进行分析。
关键词:塔防3D游戏Unity3D Windows平台AbstractIn the 2020s, games have become a popular entertainment method. Among them, Unity3D, as a popular game development engine, not only has perfect functions and easy to use, but also can be used for free and with low cost. Of course, it is used by many game developers. As a fully integrated professional game engine, Unity3D allows developers to easily create 3D games, architectural visualization, real-time 3D animation and other functions. Its excellent cross-platformity allows Unity3D to run on but not only on Windows , Android and Mac platforms.This graduation project will realize the development of windows platform games. Use Unity3D game development tools, write code for C # language, develop and produce a 3D tower defense game called "Cube Tower Defense", and in the process of making Analysis of project requirements, game design and specific internship methods.Key Words:Tower defense;3D games;Unity3D;Windows platform目录第1章绪论 (1)1.1引言 (1)1.2Unity3D介绍 (1)1.3 C#脚本语言介绍 (2)1.4市场分析与意义 (2)1.5项目的简介 (3)第2章Unity3D界面及基本操作 (3)2.1 Unity3D的界面 (3)2.2Unity3D的基本操作 (6)2.2.1 Unity3D菜单栏 (6)2.2.2 Unity3D工具栏 (7)2.2.3 Unity3D常用快捷键 (7)第3章游戏策划 (7)3.1游戏的简要介绍 (7)3.2背景与情节 (8)3.3游戏的炮塔、怪物和场景的素材与设计 (8)3.3.1炮塔的设计 (8)3.3.2怪物的设计 (9)3.3.3游戏场景设计 (10)3.4 游戏操作方法 (11)第4章游戏的设计与实现 (11)4.1 准备游戏工程 (11)4.2地图的设计 (13)4.3模型和材质的导入 (15)4.4怪物及其脚本设计 (15)4.4.1怪物的移动 (15)4.4.2怪物的生成 (17)4.4.3怪物的死亡 (19)4.5炮塔及其脚本设计 (20)4.5.1炮塔的建造 (20)4.5.2炮塔的升级与拆除 (25)4.5.3炮塔的攻击 (28)4.5.4炮弹的生成及其功能 (30)4.5.5玩家视野的移动 (31)4.5.6玩家的失败和胜利条件 (32)4.6 UI界面的设计 (33)4.6.1炮塔的选择UI (33)4.6.2炮塔的升级与拆除UI (33)4.6.3怪物的血条 (34)4.6.4金钱的显示与更新 (35)4.6.5游戏胜利与失败的界面 (35)4.7游戏开始场景的设计 (36)4.8游戏测试和试玩 (37)4.8.1游戏的打包 (37)4.8.2游戏的最终成果 (38)第5章总结与展望 (39)参考文献 (40)致谢 (41)第1章绪论1.1引言游戏,最早出现记录的游戏是一款电子游戏,其为一款井字棋游戏,需要在真空管计算机上运行。
Unity3D技术学习之塔防游戏项目讲解(上)

[Unity3D]Unity3D技术学习之塔防游戏项目讲解(上)通常意义上讲,塔防游戏是指一类在地图上建造炮台或者类似建筑物来阻止敌人进攻的策略类游戏。
从这个概念中,我们可以快速地抽离出来三个元素,即地图(场景)、敌人、炮台(防守单位)。
当我们抽离出来这样三个元素后,现在塔防游戏就变成了这样的一种描述,即敌人按照地图中设计的路径进攻,玩家利用防守单位进行防守的一类策略游戏。
经典的塔防游戏有哪些呢?比如我们最为熟悉的《植物大战僵尸》、《保卫萝卜》都是塔防类游戏的经典游戏。
如果我们将塔防游戏中的防守单位的范围扩大到玩家,那么像《英雄联盟》这样的游戏同样是可以称之为塔防游戏的,因为敌我阵营的最终目的都是要摧毁敌方的防御塔,只是敌我双方都从炮台或者怪物变成了有血有肉的人物,加之角色扮演(RPG)和即时战略(RTS)等元素的混合渗透,使得这样的游戏从单纯的塔防游戏变成了一款可玩度极高的游戏(天啊,我居然在夸这个游戏.....)。
好了,那么我们就来尝试着做出一个简单的塔防游戏吧,注意是简单的塔防游戏哦,既然塔防游戏的三个要素是地图、敌人和防守单位,那么我们就从这三个方面来着手设计这个游戏吧!在本篇文章中,我们将用到下面的知识:∙Unity2D中的Sprite动画∙Unity3D中的可视化辅助类Gizmos∙塔防游戏中敌人按路径寻路的实现∙Unity3D uGUI的初步探索∙简单的AI算法一、地图篇地图是一个塔防游戏中玩家最为关注的地方,因为地图和敌人将直接影响到玩家的策略。
如图是从《保卫萝卜》游戏中提取的一张游戏地图。
在这张地图中我们可以清楚看到怪物进攻的路径,怪物将沿着地图中的路径向我方防守单位发起攻击。
那么,在游戏中,我们该怎样确定怪物的攻击路径呢?首先我们可以对地图进行下分析,在地图中基本上基本上只有两种类型的区域,即可以放置防守单位的区域和不可放置防守单位的区域两种。
由此我们可以设计出下面的结构:[csharp] view plaincopying UnityEngine;ing System.Collections;3.4.[SerializeField]5.public class GridNode : MonoBehaviour6.{7.public enum NodeType8.{9.CanPlace,10.CantPlace11.}12.13.public NodeType GridNodeType=NodeType.CanPlace;14.}可以看出,我们在GridNode类中定义了一个称为NodeType的枚举类型,这个枚举类型有两个值,CanPlace表示可以放置防守单位,CantPlace表示不可以放置防守单位。
基于Unity3D的塔防类游戏的设计与实现

2021年1月10日第5卷第1期现代信息科技Modern Information TechnologyJan.2021 Vol.5 No.1842021.1收稿日期:2020-11-18基金项目:武汉市教育科学“十三五”规划重点课题(2017A071);武汉市教育局教学研究项目(2019068);江汉大学研究生科研创新基金项目(Jhdxyjs17kz003)基于Unity3D的塔防类游戏的设计与实现张越,陶俊,徐迅(江汉大学 人工智能学院,湖北 武汉 430056)摘 要:文章基于Unity3D 开发引擎,设计并制作了一个塔防类的3D 游戏。
主要分为两个模块,一是敌人功能的设计,包括敌人按照规定路线移动,敌人受到攻击扣除血量等;二是防御塔的设计,包括对敌人进行攻击,建造、升级、拆除防御塔等功能设计。
使用了3ds Max 软件建造角色和场景的模型,最后在Unity3D 中实现游戏的开发,结果表明敌人和防御塔设计合理,游戏体验良好。
关键词:Unity3D ;塔防类游戏;C#脚本;3ds Max 中图分类号:TP317文献标识码:A文章编号:2096-4706(2021)01-0084-04Design and Implementation of Tower Defense Game Based on Unity3DZHANG Yue ,TAO Jun ,XU Xun(School of Artificial Intelligence ,Jianghan University ,Wuhan 430056,China )Abstract :This paper designs and produces a tower defense 3D game based on Unity 3D development engine. It is mainly dividedinto two modules ,one is the design of the enemy function ,including the enemy moving according to the prescribed route ,the enemybeing attacked deducting the amount of blood and so on ;the second is the design of the defense tower ,including the attack on the enemy ,construction ,upgrade ,demolition of defense towers and other functional design. The 3ds Max software was used to build the models of the characters and scenes ,and finally the game was developed in Unity 3D. The results showed that the enemy and defense towers were designed reasonably and the game experience was good.Keywords :Unity 3D ;tower defense game ;C# script ;3ds Max0 引 言国内游戏产业突飞猛进的发展和手机的快速普及,根据市场调研公司Newzoo 的数据报告2023年全球玩家将达30亿。
基于Unity3D的塔防游戏关键技术的研究与实现

手机触屏
文 献标识码 : A
新建 U n i t y工 程 S h e e p Wa r ,在 As s e r t s 文件夹导入 F X B
中图分类号 : T P 1 1 . 5 2
1引 Байду номын сангаас
塔 防 游戏 是 一 款经 典 的 益 智类 游 戏 ,经 典 模 式 之 一 为 堵 和 P N G 等 模 型 资 源 ,并 陆 续 创 建 Ma t e r i a l 、Mo d e l 、P r e f a b 、 怪模 式 , 一张作战地图, 让 怪 兽 按 照 你 设 定 的 路线 来 回移 动 , 让 玩 家 炮塔 按 照设 定 的位 置 进 行 创 建 , 并 通 过 使 用 特 效技 能 , 以便 于 炮 塔 不 断 地轰 击 敌人 , 从而获得游戏的胜利。 卫 萝 》 等 塔 防游 戏 的 流 行 己充 分 说 明很 好 的 娱 乐性 , 同时 随 S c e n e s 、 S c r i p t s 等文件夹进行分类管理 。 设 计 典 型 多个 游戏 场 景和分关卡, 在 游 戏 管 理 器 的 脚 本 中进 行 管 理 和链 接 。
地形编辑、 着色器、 脚本 、 网络、 物理、 版本控制等特性, 集成了 使用地形编辑工具进行绘制和美化 , 利用地形编辑器中的 7 个 强大的 P h y s x物理 引擎 , 支持 J s 、 c ≠ } 等脚 本语 言, 内置了大量 关 键 功 能 设 置 高低 的 拉 高 降低 用 于 构 建 山壑 ,使 用 平 滑 工 具 的常用 S h a d e r 效果供开发者使用 , 支持发布 游戏 至 P C 、 i OS 、 去除 明显的棱角, 通过贴图工具为地形刷上漂亮的贴图, 如土 安卓等多种平 台, 也能利用 U n i t y网页插件发布为 网页游戏 。 黄、 绿色等 , 使用植树工具放置一些高低密度不 同的树模型植
基于unity3D的塔防游戏开发

2018年29期创新前沿科技创新与应用Technology Innovation and Application基于unity3D 的塔防游戏开发*仲晓庆,蔡朝晖(大庆师范学院计算机科学与信息技术学院,黑龙江大庆163712)引言近年来,迅速发展的手机游戏、网页游戏和PC 游戏已经成为游戏行业主流。
随着玩家对游戏的沉浸感和体验感的要求逐渐增加,3D 游戏成了当前游戏发展的主要热点[1]。
unity3D 游戏引擎为开发者提供了创建高质量3D 游戏和真实视觉效果的核心技术,为3D 游戏的开发提供了强大的推动力[2]。
塔防,炮塔防御(Tower Defence ,TD )的简称。
作为一个经典的休闲游戏类别,塔防游戏从来没有过成为真正的主流游戏,但却始终都保有相当数量的忠实玩家,塔防游戏从产生到现在20余年,用不温不火来形容完全不为过。
不过,随着现在整个游戏行业在玩法上的细化与创新,塔防类游戏也迎来了又一个春天,一些玩法和类别更多样的塔防游戏开始问世———如手游市场上的《保卫萝卜》,客户端网游领域的《植物大战僵尸》等等。
而塔防这一经典的游戏玩法类型或许将在这一趋势当中迎来前所未有的发展机遇。
本文使用unity3D 引擎开发的这款3D 塔防游戏内容丰富,游戏体验良好,这类策略游戏不仅可以使玩家娱乐,还能使玩家的智力得到很好的提升。
1游戏分析此款塔防游戏的玩法规则是地图的一端自动出兵攻击地图的另一端,在敌人行动路线的两边玩家可按照自己的思路放置防御塔来阻止敌人的攻击,一旦防御塔的放置位置不对,或者所选择的防御塔攻击速度不够快,就阻止不了敌人的攻击,那么敌人就很容易攻入玩家大本营,玩家便输了。
所以要求这类策略游戏要给玩家尽量大的个人发挥空间[3]。
要达到这一点,可以从多方面着手:1.地图;2.防御塔;3.敌人;4.玩家血量;5.游戏金币。
下面分别介绍。
地图:游戏设计要控制敌人从出生点开始,按照事先设计好的路线到达终点,路线越不固定越多样化越好,这就要求设计一个更为合理的敌人路线,来改变敌人原有的最短路线,或者把敌人到达终点的路线变得更长,为防御塔的攻击提供更长的时间,从而达到消灭敌人的目的。
基于Unity3D的塔防游戏设计与实现

基于Unity3D的塔防游戏设计与实现作者:刘俊郭祖江来源:《科技传播》2015年第05期摘要以游戏场景设计与开发、AI(人工智能)、ShaderLab(着色器)系统为主要研究目标,阐述游戏场景规设计,分析AI设计过程中的主要思路和主要算法的实现。
通过高效的、复杂的AI系统,以及ShaderLab开发创造出游戏中更加真实的行为,丰富的画面效果。
实践证明,该技术具有一定的实际应用价值。
关键词 Unity3D;AI;ShaderLab中图分类号TP39 文献标识码 A 文章编号 1674-6708(2015)134-0152-03近几年来,Android平台游戏、iPhone平台游戏以及Web的网页游戏迅猛发展,已经成为带动游戏产业发展的中坚力量。
遗憾的是目前除了少数的作品成功外,大部分的游戏属宣传攻势往往大于其内容品质,加之玩家体验游戏时,对游戏的沉浸感和操作性的要求也逐渐提高。
在这种局面下,3D游戏成为当前游戏的发展热点。
而本文所采用的Unity3D游戏引擎提供了创造高质量的3D游戏和真实视觉效果的核心技术,为开发3D游戏提供了强大的驱动力。
本文基于Unity3D游戏引擎,研究游戏中AI设计过程的主要思路和主要算法实现,通过高效复杂的AI系统以及特定的shaderLab(着色器)编程开发一款基于Unity3D的3D塔防类游戏,使之具备丰富的画面而且保证游戏运行的流畅度。
实践证明,本文所讨论的关键技术可以应用于增强现实、游戏开发等多个领域,具有一定的实际应用价值。
1游戏场景塔防游戏的基本玩法比较类似,在场景中我方有一个基地,敌人从场景的一侧出发,沿着相对固定的路线攻打基地。
我方可以在地图上布置防守单位,攻击前来进攻的敌人,防止他们闯入基地。
本游戏的场景通常比较简单,就像一个棋盘格,可以在上面摆放防守单位,并专门留给敌人一个通道。
在本游戏中,使用二维数组来表示场景中的格子,每个格子只有两种状态,允许摆放防守单位或不允许。
使用Unity创建塔防游戏(Part3)——项目总结

使⽤Unity创建塔防游戏(Part3)——项⽬总结 之前我们完成了使⽤Unity创建塔防游戏这个⼩项⽬,在这篇⽂章⾥,我们对项⽬中学习到的知识进⾏⼀次总结。
Part1的地址: Part2的地址: ⾸先,在我们开展这个项⽬之前,必须具备Unity的基础知识,例如如何添加游戏资源和组件,理解预设体(prefabs)以及⼀些C#的编程基础。
可以点击来学习这些基础知识。
不论是做2D游戏还是3D游戏,搭建好游戏场景是第⼀步,由于在⼯程中已经包含了背景和UI设置好的场景,所以我们只需要在这基础之上进⾏即可。
为Game视图设置合适的显⽰⽐例,可以保证场景中的Lable(标签)能够正确对齐。
prefab 快速创建prefab的⽅法:将游戏对象从Hierarchy视图拖拽到Project视图。
将Project视图中的prefab拖拽到场景视图中,就能以此prefab创建出⼀个游戏对象来,重复多次就能创建多个这样的对象了。
为脚本中的prefab对象赋值,将prefab从Project视图拖拽到Inspector视图。
假如我们为prefab添加了⼀个游戏组件(例如,脚本、刚体、碰撞体等),那么场景中所有以此prefab创建的对象都会拥有这个游戏组件。
快速复制prefab:传统的Ctrl + C,Ctrl + V不可⾏,Unity提供了快捷键 Ctrl + D,即Duplicate命令。
选中prefab后,按下Ctrl + D即可。
同理,也可以⽤于其他类型资源的复制。
项⽬中遇到的BUG:⼩怪兽的所有形态都叠在⼀起,原因:当⼀个prefab下有多个⼦sprite时,若未指定显⽰哪个⼦sprite,则当游戏对象被创建出来后,所有的sprite都会被显⽰出来。
解决办法:在创建游戏对象的时候,指定要显⽰的sprite。
脚本中数据初始化 通常我们在Start() 中进⾏数据初始化,但考虑脚本中⽅法执⾏顺序的问题,有些操作必须放在Start()之前的⽅法(例如,Awake()、OnEnable() )中做。
基于untiy3d的塔防单机小游戏设计

技术应用TECHNOLOGYANDMARKETVol.27,No.3,2020基于Untiy3D的塔防单机小游戏设计郭建军,林丽君,陈红斌通信作者,王克强,蔡 肯(仲恺农业工程学院自动化学院,广东广州510225)摘 要:利用Unity3D游戏引擎设计出一款3D塔防单机小游戏的全过程,这款3D塔防单机小游戏不仅能在PC端完美流畅运行,而且可以适配给Android端,在手机上运行这款游戏。
游戏会先在Unity3D软件中进行测试,方便修改。
测试完毕便封装打包,在PC端和Android手机上分别进行测试然后分析测试的结果。
关键词:Unity3D;塔防游戏;Androiddoi:10.3969/j.issn.1006-8554.2020.03.053 引言随着游戏的发展,人们对游戏的要求也越来越高,更多人希望玩到有趣的游戏的同时,体验到游戏的高品质画面和流畅性。
3D游戏的游戏体验比2D游戏的游戏体验好很多,所以我们想要做这么一款3D游戏非常符合游戏产业发展的道路。
而3D游戏如果能和手机端合体,那么带来的效益通常会出乎人们的意料。
谈到手机端,人们自然会想到Android系统,本次设计就打算将运行平台锁定在PC端和Android端,让人们的游戏在Android端也可以畅玩。
由于考虑到游戏的多平台性,故而选择Unity3D软件来制作本次设计。
游戏开发准备1.1 Unity3D的简介Unity3D是一个功能强大且非常专业的游戏引擎,它是由UnityTechnologies开发得到的,而UnityTechnologies开发其的目的是让所有使用者能够非常容易的创建一些3D的视频游戏、让建筑全方位可视化、3D动画实时播放等类型的互动内容,并且Unity3D还具有多平台性。
和Director等软件一样,Unity3D非常注重其图像图形的渲染。
Unity3D这款强大的游戏引擎能够运行在微软系统的电脑和苹果系统的电脑下,并且能够把游戏发布至超过5种常见的平台。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[Unity3D]Unity3D游戏开发之塔防游戏项目讲解(上)通常意义上讲,塔防游戏是指一类在地图上建造炮台或者类似建筑物来阻止敌人进攻的策略类游戏。
从这个概念中,我们可以快速地抽离出来三个元素,即地图(场景)、敌人、炮台(防守单位)。
当我们抽离出来这样三个元素后,现在塔防游戏就变成了这样的一种描述,即敌人按照地图中设计的路径进攻,玩家利用防守单位进行防守的一类策略游戏。
经典的塔防游戏有哪些呢?比如我们最为熟悉的《植物大战僵尸》、《保卫萝卜》都是塔防类游戏的经典游戏。
如果我们将塔防游戏中的防守单位的范围扩大到玩家,那么像《英雄联盟》这样的游戏同样是可以称之为塔防游戏的,因为敌我阵营的最终目的都是要摧毁敌方的防御塔,只是敌我双方都从炮台或者怪物变成了有血有肉的人物,加之角色扮演(RPG)和即时战略(RTS)等元素的混合渗透,使得这样的游戏从单纯的塔防游戏变成了一款可玩度极高的游戏(天啊,我居然在夸这个游戏.....)。
好了,那么我们就来尝试着做出一个简单的塔防游戏吧,注意是简单的塔防游戏哦,既然塔防游戏的三个要素是地图、敌人和防守单位,那么我们就从这三个方面来着手设计这个游戏吧!在本篇文章中,我们将用到下面的知识:∙Unity2D中的Sprite动画∙Unity3D中的可视化辅助类Gizmos∙塔防游戏中敌人按路径寻路的实现∙Unity3D uGUI的初步探索∙简单的AI算法一、地图篇地图是一个塔防游戏中玩家最为关注的地方,因为地图和敌人将直接影响到玩家的策略。
如图是从《保卫萝卜》游戏中提取的一张游戏地图。
在这张地图中我们可以清楚看到怪物进攻的路径,怪物将沿着地图中的路径向我方防守单位发起攻击。
那么,在游戏中,我们该怎样确定怪物的攻击路径呢?首先我们可以对地图进行下分析,在地图中基本上基本上只有两种类型的区域,即可以放置防守单位的区域和不可放置防守单位的区域两种。
由此我们可以设计出下面的结构:[csharp] view plaincopying UnityEngine;ing System.Collections;3.4.[SerializeField]5.public class GridNode : MonoBehaviour6.{7.public enum NodeType8.{9.CanPlace,10.CantPlace11.}12.13.public NodeType GridNodeType=NodeType.CanPlace;14.}可以看出,我们在GridNode类中定义了一个称为NodeType的枚举类型,这个枚举类型有两个值,CanPlace表示可以放置防守单位,CantPlace表示不可以放置防守单位。
在GridNode类中只有一个NodeType类型的成员变量GridNodeType,该成员变量的默认值是CanPlace,即可以放置防守单位。
那么,现在问题来了,我们找到了一种可以用来描述地图中不同区域的方法,可是这些区域在哪里呢?所以我们需要一种方法来生成这些区域。
这里隆重向大家介绍Gizoms类,Gizmo是Unity中一个用于在场景视图可视化调试或辅助设置的工具类。
简单的说,当我们需要在编辑器环境中实现某种可视化调试的时候,我们就可以使用Gizmo类。
所以的Gizmo绘制都需要在OnDrawGizmos或OnDrawGizmosSelected函数里完成。
从这两个函数的名称我们就可以看出它们的区别,OnDrawGizmos在每一帧都调用,所有在Gizmos里渲染的Gizmo都将被渲染,而OnDrawGizmosSelected仅在脚本附加的物体被选中时渲染。
好了,在了解了Gizmos的基本概念和用法后,我们回到我们的游戏中。
我们刚刚提到,我们需要一种方法来生成区域以便于我们可以使用GridNode类来描述每个区域的属性,那么具体怎么做呢?其实思路就是在地图上画出网格,这样网格便可以将整个地图分割成不同的区域,然后我们就可以使用GridNode来描述每个区域的属性啦。
好了,下面我们来看具体的脚本:[csharp] view plaincopying UnityEngine;ing System.Collections;3.4.public class GridMap : MonoBehaviour {5.6.public static GridMap Instance=null;7.8.public int MapSizeX;9.public int MapSizeZ;10.11.[HideInInspector]12.public GameObject[] mNodes;13.[HideInInspector]14.public GameObject[] mPaths;15.16.void Awake()17.{18.Instance=this;19.mNodes=GameObject.FindGameObjectsWithTag("GridNode");20.mPaths=GameObject.FindGameObjectsWithTag("PathNode");21.}22.23.void DrawGrid()24.{25.Gizmos.color=Color.blue;26.for(int i=0;i<=MapSizeX;i++)27.{28.Gizmos.DrawLine(new Vector3(i,0,0),new Vector3(i,MapSizeZ,0));29.}30.for(int j=0;j<=MapSizeZ;j++)31.{32.Gizmos.DrawLine(new Vector3(0,j,0),new Vector3(MapSizeX,j,0));33.}34.}35.36.void DrawColor()37.{38.if(mNodes==null) return;39.foreach(GameObject go in mNodes)40.{41.Vector3 mPos=go.transform.position;42.if(go.GetComponent<GridNode>()!=null){43.if(go.GetComponent<GridNode>().GridNodeType==GridNode.NodeType.CanPlace){44.Gizmos.color=Color.green;45.}elseif(go.GetComponent<GridNode>().GridNodeType==GridNode.NodeType.CantPlace){46.Gizmos.color=Color.red;47.}48.Gizmos.DrawCube(mPos,new Vector3(1,1,1));49.}50.}51.}52.53.void DrawPath()54.{55.Gizmos.color=Color.white;56.if(mPaths==null) return;57.foreach(GameObject go in mPaths)58.{59.if(go.GetComponent<PathNode>()!=null){60.PathNode node=go.GetComponent<PathNode>();61.if(node.ThatNode!=null){62.Gizmos.DrawLine(node.transform.position,node.ThatNode.transform.position);63.}64.}65.}66.}67.68.void OnDrawGizmos()69.{70.DrawGrid();71.DrawColor();72.DrawPath();73.}74.75.76.}文章出处【狗刨学习网】在这段脚本中,我们首先定义了两个int类型的变量MapSizeX,MapSizeZ,这两个变量分别用来表示需要绘制网格的大小。
下面我们来重点关注OnDrawGizmos方法,在这个方法中我们定义了3个方法DrawGrid、DrawColor和DrawPath。
其中DrawGrid方法负责绘制地图网格,DrawColor方法负责绘制地图区域、DrawPath方法负责绘制敌人寻路路径。
我们首先来说DrawGrid,DrawGrid负责绘制地图网格,默认从原点开始绘制,要绘制网格只需要绘制交错的横线和竖线即可,这里我们使用的Gizmos类下的DrawLine方法我们首先在场景中创建一个MeshRoot的空物体,将GridMap脚本附加到该物体上,我们下面来看看绘制的效果:因为Gizmos为我们提供了可视化的调试功能,因此我们可以直接在编辑器窗口中看到实际的效果,这样我们就利用Unity绘制出了地图的网格。
为了让地图的左下角和场景原点能够完全匹配,这里写了一个简单的工具类AutoPlace来实现地图的位置计算和调整:[csharp] view plaincopying UnityEngine;ing System.Collections;3.4.public class AutoPlace : MonoBehaviour {5.6.//精灵渲染器7.private SpriteRenderer mRenderer;8.//精灵宽度9.private float mSpriteWidth;10.//精灵高度11.private float mSpriteHeight;12.13.14.void Start ()15.{16.mRenderer=GetComponent<SpriteRenderer>();17.//计算精灵的实际大小18.mSpriteWidth=mRenderer.sprite.bounds.size.x * transform.localScale.x;19.mSpriteHeight=mRenderer.sprite.bounds.size.y * transform.localScale.y;20.//自动调整精灵的位置21.transform.position=new Vector3(mSpriteWidth/2,mSpriteHeight/2,0);22.}23.}好了,下面我们来继续讲解地图中区域的生成。
什么是地图中的区域呢?在塔防游戏中玩家通常情况下都只能在可以放置防守单位的区域放置防守的单位,那么可以放置防守单位的这些地方就是我们接下来要来研究的区域。