# 橙子 **Repository Path**: czf688/Cz ## Basic Information - **Project Name**: 橙子 - **Description**: 一个简单的服务器框架 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-28 - **Last Updated**: 2022-08-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 战斗引擎说明文档 ### 简介 + 该战斗引擎是针对即时战斗机制的封装,主要功能: + 战斗中各项参数的配置 + 升级带来的属性覆盖 + 动作的编辑(主要编辑触发时机) + 逐帧调试 ### 资源分类和文件夹位置 + 战斗特效:特效目前全部使用粒子系统 + prefab放在 [Assets/Game/AssetBundles/FightEffect] 文件夹 + 材质球放在 [Assets/Game/AssetBundles/_Res/FX/Materials] 文件夹 + shader放在 [Assets/Game/AssetBundles/_Res/FX/Shaders] 文件夹 + 贴图放在 [Assets/Game/AssetBundles/_Res/FX/Textures] 文件夹 + Mesh放在 [Assets/Game/AssetBundles/_Res/FX/Mesh] 文件夹 + Buff:战斗中的各个Buff配置 + 配置文件放在 [Assets/Game/AssetBundles/FightBuff] 文件夹 + 地图: + prefab放在 [Assets/Game/AssetBundles/FightMap] 文件夹 + 战斗单位: + prefab放在 [Assets/Game/AssetBundles/FightUnit] 文件夹 + 配置文件放在 [Assets/Game/AssetBundles/UnitConfig] 文件夹 + 技能: + 配置文件放在 [Assets/Game/AssetBundles/SkillConfig] 文件夹 + 动作: + 配置文件放在 [Assets/Game/AssetBundles/_Res/Prefabs/FightAction] 文件夹 ### 基本介绍 + 战斗特效: + 战斗中使用的各种特效,通过在各个配置中填写特效名字来使用 + Buff: + 战斗中的各种Buff,通过在各个配置中填写Buff配置文件的文件名来使用 + 对于已经实现的Buff效果,可以直接配置使用,例:在FightBuff文件夹右键->Create->配置->Buff->护盾 + 对于还未实现的Buff效果,联系程序进行实现后使用 + 通用属性: + 持续时间 + 是否可以叠加:未勾选的buff,在同一个单位上相同的两个buff时,两个buff会同时存在,对于勾选了该项的buff,新的buff会覆盖掉老的buff + 地图: + 战斗中的地图,在配置关卡的时候填写地图文件名来使用 + 战斗单位: + 战斗中几乎所有的物体都可以称为战斗单位,例如:英雄,子弹,召唤物等 + 每一个战斗单位都包含一个prefab和一个配置文件,两者一一对应,缺一不可,两者文件名必须一致 + prefab和配置文件都由程序制作,制作完成后策划可以调整配置文件中的各项参数,配置文件中的参数根据需求,由以下模块的一个或多个组成 + 攻击模块:对于有攻击力的战斗单位,需要配置该模块 + Attack:攻击力 + Hp模块:对于有血量的战斗单位,需要配置该模块 + Def:防御力 + MaxHp:最大血量 + Show Slider:战斗中是否要显示血条 + Slider Offset:血条的位置 + Show Num:战斗中受到伤害是否要显示数字 + Num Offset:数字的位置 + 直线移动模块:对于直线移动的战斗单位,需要配置该模块(移动类模块,不可和其他移动类模块同时存在) + Speed:移动速读(米/秒) + 抛物线移动模块:对于抛物线移动的战斗单位,需要配置该模块(移动类模块,不可和其他移动类模块同时存在) + Height:抛物线的最大高度(米) + G:抛物线的重力加速度 + 技能模块:对于可以使用技能的战斗单位,需要配置该模块 + Skill Infos: 技能列表,可以配置多个技能,由AI模块决定技能使用规则,其中Skill Id为技能配置文件的文件名,Skill Lv为技能等级.特殊的,英雄的技能等级会在战斗中被覆盖掉 + Attack Id:普攻id + 动作模块:对于可以做动作的战斗单位,需要配置该模块 + Actions: 需要从动作文件夹中,将单位需要有的动作都拖拽过来 + Default Action:默认动作名(注意:动作名不是动作文件的文件名,而是在动作文件中配置的ActionName) + 其他模块:对于不同的战斗单位,有一些特有的参数,都在其他模块中配置 + 技能: + 战斗中的各种技能,通过在战斗单位的技能模块中配置技能文件名来使用 + 对于已经实现的技能效果,可以直接配置使用,例:在SkillConfig文件夹右键->Create->技能->远程范围 + 对于还未实现的技能效果,联系程序进行实现后使用 + 通用属性: + 技能cd(秒) + 角色动作:角色释放技能的时候需要做的动作,该动作必须配置在动作模块中,并且不同的技能对动作事件有要求,详见各个技能的说明 + 动作优先级:详见优先级机制介绍 + 动作: + 主要由技能使用,通过在技能中配置动作名来使用 + 注意,所有的动作都是通过动作名来使用的,不是通过动作配置文件的文件名来使用的 + 不同prefab使用的动作要放在以prefab命名的子文件夹中,特殊的,所有英雄通用一套动作,放在Hero子文件夹中 + 新建动作: 在指定的子文件夹中,右键->Create->FightAction + 特殊动作: + Move: 移动时播放的动作,必须为循环动作 + Injured: 被击退时播放的动作,必须为非循环动作 + Die: 死亡时播放的动作,必须为非循环动作 + 动作属性: + Action Name: 动作名称,用来索引动作,要跟技能上配置的名称一致 + Animation Name: 动画名称,由程序填写 + Time Scale: 播放速度(例:1为原速,1.5为1.5倍速) + Is Loop: 是否为循环动作 + Events:动作包含的事件,一般与技能效果配合使用 + Name: 事件名,不同技能会需要特的事件名 + Start Time: 事件触发时机(秒) + Position: 事件触发位置,部分技能需要使用(例如:发射子弹的位置) ### 优先级和打断机制 + 战斗中,单位的大部分行为都会有优先级(例如技能的优先级),如果单位即将要做的行为比当前正在执行的行为优先级低,那么即将要做的行为不会执行,否则会打断当前行为,执行即将要做的行为 + 如果优先级相等,新行为也会打断当前行为 + 默认一些行为的优先级: + 待机: 0 + 移动: 10 + 技能: 根据配置来,推荐:15-会被击退打断,25-不会被击退打断 + 击退: 根据配置来,推荐:20 + 死亡: 999 ### 使用示例 + 假设我们要做一个英雄及其技能: + 制作一个给全体加护盾的技能(1005): + 准备好需要的特效,并将各种资源导入正确的文件夹中: + 护盾特效: HuDun + 护盾受击特效: HuDunGlow + 护盾技能施法特效: AddHuDunShiFa + 制作技能动作(Skill01): + 在Assets/Game/AssetBundles/_Res/Prefabs/FightAction/Hero文件夹中,右键->Create->FightAction + 将新建的文件更名为Skill01 + 配置内容: + Action Name: Skill01 + Animation Name: Skill01 (该属性由程序配合填写) + Time Scale: 1 + Events: + Name: 攻击点 (该名字由技能决定,详见各个技能的文档) + Start Time: 0.51 (事件触发的时机,该值正好与动画Skill01对应) + Position: 全为0 (该技能不需要读取位置数据) + 制作一个护盾BUFF(HuDun01): + 在FightBuff文件夹右键->Create->配置->Buff->护盾 + 将新建的Buff配置文件更名为HuDun01 + 配置内容: + 是否可以叠加: 勾选 + 持续时间: 5 + Max Hp Rate: 20 (护盾值为最大生命的20%) + Add: 0 (护盾值额外+0) + Effect: HuDun (护盾特效) + Hit Effect: HuDunGlow (护盾受击特效) + 在SkillConfig文件夹右键->Create->技能->己方全体加Buff + 将新建的技能配置文件更名为1005 + 配置内容: + 技能CD(秒): 5 + 角色动作: Skill01 (上面做好的动作) + 动作优先级: 15 + Buff: HuDun01 (上面做好的Buff) + 施法特效: AddHuDunShiFa (技能施法特效) + 制作一个近战普攻(1001): + 准备好需要的特效,并将各种资源导入正确的文件夹中: + 该技能无特效 + 制作技能动作(Skill02): + 在Assets/Game/AssetBundles/_Res/Prefabs/FightAction/Hero文件夹中,右键->Create->FightAction + 将新建的文件更名为Skill02 + 配置内容: + Action Name: Skill02 + Animation Name: Skill02 (该属性由程序配合填写) + Time Scale: 1 + Events: + Name: 攻击点 (该名字由技能决定,详见各个技能的文档) + Start Time: 0.51 (事件触发的时机,该值正好与动画Skill01对应) + Position: 全为0 (该技能不需要读取位置数据) + 在SkillConfig文件夹右键->Create->技能->己方全体加Buff + 将新建的技能配置文件更名为1001 + 配置内容: + 技能CD(秒): 3 + 角色动作: Skill02 (上面做好的动作) + 动作优先级: 15 + 攻击百分比(%): 15 (技能攻击力为角色攻击的15%) + 攻击固定值: 15 (技能额外附加15的攻击力) + 击退距离: 0 (击退效果为:在[击退时间]内,将单位击退[击退距离],然后停留[击退后停留时间],该技能只需要实现一个受击后仰效果,所以击退时间和击退距离都为0) + 击退时间: 0 + 击退后停留时间: 0.2 + 击退优先级: 19 (有打断效果) + 制作一个角色(20001): + 由程序制作好prefab和配置文件(20001) + 策划修改配置文件(Assets/Game/AssetBundles/UnitConfig/20001)中的部分属性: + Attack: 100 (攻击力100) + Def: 50 (防御50) + Max Hp: 1000 (血量1000) + Show Slider: 勾选 (显示血条) + Slider Offset: (0, 0.8, 0) (该项由程序配合填写) + Show Num: 勾选 (受击会显示数字) + Num Offset: (0, 0.9, 0) (该项由程序配合填写) + Speed: 4 (移动速度,英雄默认4) + Skill Infos: 填入上面做好的技能(1001, 1005),等级都填1 + Attack Id: 1001 (普攻id) + Actions: 除了程序制作时放入的默认动作(Move, StandBy, Die, Injured)外,拖拽放入上面做好的两个动作(Skill01, Skill02) + Default Action: StandBy (待机动作) + Attack Range: 1 (攻击范围) ### 升级属性覆盖 + 升级后会带来属性变化,该数据由策划控制 + 配置表:配置表为Excel表格,示例文件: [Assets/Test/FightLv.xlsx] + Excel文件导入项目,使用导入工具,详见: [导入工具](https://git.bluefir.cn/kok/ArcherMini/tree/master/Assets/Kunpo/Editor/ConfigImporter) + 配置表中的字段说明: + id: 自增id + configId: 配置文件名 + lv: 要配置的等级 + type: 配置文件类型,只能是:skill,unit,buff + fieldName: 要覆盖的字段名 + fieldVal: 要覆盖的字段值 ### 逐帧调试 + 使用逐帧调试功能,可以将战斗暂停,并手动控制逐帧播放战斗内容 + 进入战斗后,在Hierarchy面板中选中FightManager(Clone)下的UpdateManager1 (如果不方便快速找到,可以在进入战斗后先将游戏暂停,然后再找) + 在Inspector面板中,找到Debug,勾选(如果在上一步暂停了游戏,勾选后就可以取消暂停了) + 此时游戏处于暂停状态,点击面板上的UpdateOnce按钮,可以手动播放,点击一次播放一帧 + 面板上的UpdateIndex表示当前播放到了第几帧,方便对照 + 面板上的TimeScale字段,可以控制非暂停状态下的播放速度 ### 资源规范和注意事项 + 注意事项: + 对于不使用的资源,策划做好备份后需要及时在项目中删除,删除的时候注意要将关联的资源一并删除,不要有遗漏 + 战斗特效: + prefab: + 注意特效的层数越少越好,不需要或者在手机上不明显的特效层考虑是否可以删除 + 父物体为空的层(Renderer没有勾选的特效层),注意要使用默认的材质球,并且Renderer Mode要选择默认的Billboard,防止将不必要的材质球和Mesh包含进去 + 父物体为空的层(Renderer没有勾选的特效层),特效功能里面所有模块的勾选都需要去掉 + 子物体为空的层(Renderer没有勾选的特效层)直接删掉 + 特效是根据父物体的播放时间来判断回收的,对于非循环特效,父物体不要勾选looping选项,并且控制父物体的duration在合理的范围内.looping勾选会导致战斗时特效不会被自动回收,duration时间过长会导致特效播放完成后回收不及时,duration时间过段会导致特效还没播放完就被回收掉 + 检查特效各个物体上不要挂脚本和碰撞盒 + 特效各个物体的Layer都设置为Default + 材质球: + 相似的材质球考虑能否复用 + 贴图: + 相似的贴图考虑能否复用 + 根据贴图实际在屏幕中显示的尺寸,合理设置贴图实际尺寸,不要导入过大的贴图 + 不要勾选MipMap和Read/Write选项 + Mesh: + 检查模型的面数是否合理 + 不要导入模型中的动画数据: + Rig->AnimationType选择None + Animation->Import Constraints 不勾选 + Animation->Import Animation 不勾选 + 不要导入模型中的材质球:Materials->Material Creation Mode选择None + Shader: + 不要导入不必要的shader,特别是各种Additive和Blended效果shader,尝试使用系统默认的Additive和Blended