# 类地下城游戏Demo **Repository Path**: sooooon/dungeons-games---demo ## Basic Information - **Project Name**: 类地下城游戏Demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-02-16 - **Last Updated**: 2022-02-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 个人游戏开发Demo 目标是实现能自由控制人物移动、施法、攻击的系统 以及一个能自动生成有AI逻辑敌人的场景 ## 基础实现功能: 1. 基于状态机实现的几种不同的敌人以及其行动攻击AI逻辑 2. 基于对象池实现的刷怪逻辑以及 (可参考:https://blog.csdn.net/piyixia/article/details/103974298) 3. Combo、打击、分数、对话等界面UI以及 4. 实时小地图系统 5. 利用cinemachine实现镜头控制 6. 利用对象池实现残影 ## 进度 ### 3.29 实现了房间生成逻辑 ### 3.30 实现了刀光效果和打击效果 ### 3.31 预计使用对象池实现一些效果 ### 4.6 对象池实现Dash残影的效果 参考了马造里面的设计 角色能实现Dash技能 技能有CD 并有残影效果 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0926/153756_242c3528_7861758.png "屏幕截图.png") 这个ISSUE分两个小功能 一个是物理移动上实现Dash 一个是残影的实现 这种残影效果本质上是几张渐变效果的图片不断的产生和回收 很显然这种重复利用是适合对象池这种设计模式以避免实例化开销的 ref 实例代码:https://blog.csdn.net/dmk17771552304/article/details/80744633 istantiate()+destroy()的大开销和大浪费导致需要对象池做好GameObject的预热/预加载 之后GameObject进场退场用SetActive(true/false)实现拿放 对象池模式是Clang内存管理优化方式的一种 对象池具体使用的容器可以是队列/链表/堆等等 这里不多说 ### 4.8 基本完成DASH 开始做状态机 ![现在DASH的效果](https://images.gitee.com/uploads/images/2021/0926/153906_0db3cac9_7861758.png "屏幕截图.png") 之后只要把sprite替换 就可以实现小红的气泡效果 俯视角上下左右都可以Dash 还有UI图像没有完成 ![开始的时候对象池不会自己生成 原因还不清楚](https://images.gitee.com/uploads/images/2021/0926/153927_5d6acf9c_7861758.png "屏幕截图.png") 只有触发按键以后才会自己实例化 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0926/153940_7c96dc94_7861758.png "屏幕截图.png") 感觉像显示问题 因为触发是瞬间的 要是有实例化的话应该有开销会卡顿 暂时不清楚原因 还有技能UI的图标没做 tips:SpriteRender调整颜色即可显示中毒/无敌星星等变色效果 状态机 寻敌AI能实现的方法有很多 自己用BFS A星这类算法写或者插件或者unity封装好的都有 但是寻敌是敌人AI的一部分 为了控制敌人AI的状态转换的前提是利用状态机实现各种状态的转换 一个敌人通常有多个逻辑 我希望我的敌人大眼怪平时能在一个范围里面瞎晃悠 我走到附近时才会 转换成寻敌状态 碰到我就开始攻击 我离开范围后 大眼怪就继续晃悠而不是追我到天涯海角(尽管有的AI寻敌逻辑就是追到天涯海角 那个后面做到寻敌再说) 有限状态机也是一种设计模式 之前写的代码挺呆的 忘了可拓展性了 几种不同的敌人应该写个基类然后重写的 对应状态机也可以写个基类 这块还挺难的 ### 4.9 实现了一个敌人的状态转换 后续考虑用基类和基类状态机继承新敌人种类 提高可拓展性 ### 4.14 之前的Dash残影利用的是单例对象池 子弹生成和刷怪使用泛型对象池实现 ## 后续可以考虑添加完善的功能 1. xml序列化等方法实现存档读档(当然也要考虑protobuf,newtonjson,后续针对存档这块我会专门写博客) 2. 排名系统 3. 背包系统 4. 利用Tolua实现一次热更新 5. 试着加入任务系统 6. 考虑通过对话或者人物加入一个临时随从(通关后销毁 下次可以再召唤) 7. 尝试加入Lua脚本实现C#和Lua的交互 8. 尽量加入一些设计模式的使用 比如利用单例模式实现一些机制 利用观察者模式实现游戏菜单 9. 基于插件定制以及自制A星算法的寻敌AI (AIPATH插件已经是轮子 没必要自己再写 了解其源代码如何用A星寻路即可) 10. 加入陷阱等游戏物体