# Unity3D-RPG开发 **Repository Path**: qiaofeng00oo/unity3-d-rpg-development ## Basic Information - **Project Name**: Unity3D-RPG开发 - **Description**: 基于QFramework制作的RPG游戏。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-05-29 - **Last Updated**: 2024-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Unity3D-RPG开发 在学习[Unity 游戏框架搭建 决定版(1 ~ 3 季)](https://learn.u3d.cn/tutorial/framework_design)和[3D RPG Course | Core 核心功能](https://learn.u3d.cn/tutorial/3drpg-core)后,使用Unity3D 2020开发的一款游戏,以RTS游戏逻辑为主,有技能打断,攻击前摇等特性,使用QFramework区分职责,单位控制器分为四个模块,便于后期维护。 # 1 游戏介绍 ## 1.1 主菜单界面 如下图有三个按钮:新游戏,继续游戏,退出游戏。其中**继续游戏**是检测PlayerPrefs中是否存有数据,来决定是否可以点击进入游戏,**新游戏**则是清空数据后进入游戏。 ![主菜单](Notes/Images/%E4%B8%BB%E8%8F%9C%E5%8D%95.png) ## 1.2 过场界面 使用协程显示进度。 ![过程界面](Notes/Images/%E8%BF%87%E7%A8%8B%E7%95%8C%E9%9D%A2.png) ## 1.3 游戏界面 进入游戏将默认锁定以玩家单位为中心的视角,按**Y**解锁视角锁定,按 **左shift+space(空格)** 解锁鼠标捕获,**滚轮**可以调节视野大小。 ![游戏界面](Notes/Images/%E6%B8%B8%E6%88%8F%E7%95%8C%E9%9D%A2.png) ## 1.4 单位功能介绍 - 玩家单位:移动、攻击 - 史莱姆和海龟:巡逻移动、守卫和攻击 - 哥布林:在史莱姆单位多了击退技能 - 哥伦石人:在史莱姆单位多了丢石头技能(眩晕)、掉落石头的被动技能(掉落石头可击飞造成伤害) ## 1.5 音乐介绍 - 单位的行动都有对应的声效。 - 有bgm。 # 2 技术展示 ## 2.1 MVC框架 框架分为四层:表现层、系统层、数据层、工具层。 按我的理解,与其说使用框架,不如说是使用思想,框架内使用接口限制用户可以使用的功能,上层可以访问所有下层,下层不能访问上层,但可以使用事件通知上层(订阅者模式)。 - 也就是说表现层和系统层可以直接访问数据层,层级之间没有完全解耦,因此框架引入了command和query的概念(命令模式),用于读写数据层,解耦的同时分担了表现层controller的业务,也可以被系统系统层使用,增加了代码的复用性。 - 这里的系统层和ECS的系统层很相似,但是持有状态,共享表现层的一些逻辑。 - 数据层拥有一个BindableProperty的数据结构,可以和view层双向绑定,view层注册事件到这个数据,数据修改时会通知view层执行事件,和MVVM很像。 - 工具层大部分是使用单例模式,但是使用IOC容器可以更好的的管理其访问权限,因此分一层。 ## 2.2 关键帧绑定逻辑 未来应该修改为逻辑和表现分离,防止卡顿导致的误差,分为三段式,开始,运算和结束。 这里攻击和释放技能都采用关键帧绑定,到关键帧会运算伤害或效果,重置CD,动画播放完后会改变执行状态。 ## 2.3 怪物AI采用有限状态机 未来应该修改为行为树,每隔一个tick检测一次状态。 这里使用FSM,每帧检测怪物当前状态然后作出反应,检测到优先执行追击并攻击玩家,一般处于首位或巡逻的状态,战斗期间,每次攻击或释放技能都会等待动画播放完,才执行下一个动作。 # 设计图 ![技能设计](Notes/Images/%E6%8A%80%E8%83%BD%E8%AE%BE%E8%AE%A1.png) ![层次图](Notes/Images/%E5%B1%82%E6%AC%A1%E5%9B%BE.png) ![动画状态机](Notes/Images/%E5%8A%A8%E7%94%BB%E7%8A%B6%E6%80%81%E6%9C%BA.png) ![新建单位](Notes/Images/%E6%96%B0%E5%BB%BA%E5%8D%95%E4%BD%8D.png) ![战斗控件](Notes/Images/%E6%88%98%E6%96%97%E6%8E%A7%E4%BB%B6.png)