TowerDefense-GameFramework-Demo解析

一,目录

Assets
    - GameFramework(游戏框架)  
    - GameMain(游戏目录)  
        - Configs(配置)
        - DataTables(数据表,自动生成数据类)  
        - Entity(实体数据)
        - Item(项数据)
        - Localization(本地化资源)  
        - Plugins(插件)
        - Res(资源)
        - Sounds(声音)  
        - Scenes(场景文件) 
        - Scripts(脚本代码)  
            - Base  (初始化GF组件和游戏自定义组件)
                + GameEntry  (游戏入口)
            - BuiltinData  (自定义数据组件)
                + BuiltinDataComponent
            - Camera(摄像机)
            - Data(数据)
            - DataTable(数据表)
            - Definition(定义的版本数据)
            - Editor(编辑器相关生成数据工具)
            - Entity(实体)
            - Enum(由工具根据配置文件自动生成)
            - Event(事件类)
            - Extension(扩展)
            - FSM(有限状态机)
            - Item(塔防里的一项)
            - Level(关卡)
            - Localization(本地化)
            - Menu(菜单)
            - PlacementArea(可放区域)
            - Procedure(流程)
            - Sound(声音)
            - Tower(塔)
            - UI(UI)
            - Utility(工具类)
        - UI(UI预制件)  

二,自动生成相关

在目录 DataTable 下可以看到挺多 txt格式的文件,这些文件可以用excel打开,然后在上面编辑后保存。
目录 Editor 下的脚本文件,可以生成能够解析对应 txt的的数据类。
在工具栏可以看到有相关按钮


image.png

三,游戏初始化

Base 目录下的 GameEntry(挂在Unity编辑上GameFramework节点) 就是游戏的入口,在这会初始化所有的GF组件和游戏自动逸的组件。GameFrameworkComponent 里的 Awake 方法会注册这个组件到GF。

四,游戏流程

image.png

在编辑器里Procedure节点,可以看到所有的流程。这里第一个流程是ProcedureLaunch。这个流程主要是初始化版本信息,本地语言等。
处理完后就到了ProcedureSplash这个流程,就是播放logo动画这些。然后根据运行环境来选择下面的流程:
编辑器:ProcedurePreload
单机:ProcedureInitResources 初始化单机游戏相关资源后到ProcedurePreload
更新:ProcedureCheckVersion 检测是否有新的资源,有则下载,完成再到ProcedurePreload

ProcedurePreload

在ProcedurePreload流程,把所有的数据实例化,可以在GameEntry.Data获取。可以看编辑器Data节点上有哪些数据。
image.png

获取到的后,可以根据数据设置一些开始需要设置的。

ProcedureLoadingScene

接着到ProcedureLoadingScene这个流程,首先会关闭之前场景的弹框等;接着加载下一个场景的相关数据和资源。
这个之后就到ProcedureMenu。

ProcedureMenu

在这个流程会弹Menu UI界面,选择游戏关卡选择界面。点击第一关,就会进入ProcedureLevel

ProcedureLevel

根据关卡数据初始化场景,及实体;注册相关事件等。

五 塔防游戏

数据和实体都准备好了,下面就是让每个实体按自己的规则行为来移动,攻击等。
LevelControl 实例是管理输入,实体的更新等。
塔防主要有二类实体:
1,EntityEnemy(敌人):初始化完数据后,会根据当前状态来更新,使用了状态机;
NavMeshAgent使得敌人有自动寻路的行为。
2,Tower(塔):
Targetter,获取目标的逻辑
Attack,攻击的逻辑
HealthBar,自己的生命
Attack通过每帧更新来判断是否可以发送子弹来实现Tower的行为。
最后通过CommonLauncher里的方法,发送创建实体的事件。
ProcedureLevel接收到这个事件之后就会创建并展示这个实体实例。


image.png

EntityProjectileHitscan,只是播放一个动画0.1秒的动画,动画结束后就会对敌人造成伤害
EntityProjectileBallistic,根据添加物理相关,让实体一直指向目标,物理里面会更新位置,达到很不错的效果
EntityMissileArray ,多个导弹一起发射,效果很不错,原理跟上面一致
EntityEnergyPylon,让周围敌人减速

当敌人实例都死亡,也就胜利了,可以进行下一关
当玩家死亡,也就是失败了

游戏的大致流程如上面描述那样,至于更具体的需要看代码的具体实现了。从流程入手,一步一步的往底层看。运行游戏看节点的变化。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容