Unity3D自学笔记——星际2技能系统分析(三)Ability(Effect)

星际2技能系统分析(三)Ability(Effect)

技能施放的阶段

技能被分为了7个阶段
Approach:接近
Wait:等待
Prep:准备
Cast:施放
Channel:引导
Finish:结束
Bail:保释

AbilEffect

效果技能基类

属性

这里写图片描述
好吧。。太多了
Arc:施法范围,若目标不在范围内,单位会自动调整至目标进入施法范围
Cost:技能消耗
AutoCast:自动释放技能的属性
Effect:技能应用的效果,默认值为##id##,既Id相同的CEffect
EffctRange : 效果范围
然后就是一堆技能各个阶段的配置:比如哪个阶段可以被强行中断,哪个阶段可以返回Cost, 哪个阶段取消特效等

XML定义

<CAbilEffect default="1">
    <!--目标离开施法者距离1米远后,施法取消-->
    <RangeSlop value="1"/>
    <!--目标离开施法弧形11.25角度后,施法取消-->
    <ArcSlop value="11.25"/>
    <!--自动施法,主动攻击-->
    <AutoCastAcquireLevel value="Offensive"/>
    <!--自动施法对象, 可见的;玩家;同盟-->
    <AutoCastFilters value="Visible;Player,Ally"/>
    <!--联盟变换后中止-->
    <Flags index="AbortOnAllianceChange" value="1"/>
    <!--最小引导-->
    <Flags index="ChannelingMinimum" value="1"/>
    <!--使用施法者半径范围-->
    <Flags index="RangeUseCasterRadius" value="1"/>
    <!--再次接近-->
    <Flags index="ReApproachable" value="1"/>
    <!--目标在视野范围内-->
    <Flags index="RequireTargetVision" value="1"/>
    <!--等级改变时更新充电-->
    <Flags index="UpdateChargesOnLevelChange" value="1"/>
    <!--等待耗尽-->
    <Flags index="WaitToSpend" value="1"/>
    <!--找到相同ID的Effect-->
    <Effect value="##id##"/>
    <!--效果距离0 - 500 -->
    <EffectRange value="0,500"/>
    <AINotifyEffect value="##id##"/>
    <!--接近阶段可以退还消耗-->
    <RefundArray index="Approach" value="1"/>
    <!--准备阶段可以退还消耗-->
    <RefundArray index="Prep" value="1"/>
    <!--施放阶段可以退还消耗-->
    <RefundArray index="Cast" value="1"/>
    <!--退还的消耗系数-->
    <RefundFraction>
        <!--水晶矿-->
        <Resource index="Minerals" value="-1"/>
        <!--气矿-->
        <Resource index="Vespene" value="-1"/>
        <!--人口-->
        <Resource index="Terrazine" value="-1"/>
        <!--自定义-->
        <Resource index="Custom" value="-1"/>
        <!--充能-->
        <Charge value="-1"/>
        <!--CD-->
        <Cooldown value="-1"/>
    </RefundFraction>
    <UseMarkerArray index="Approach" value="1"/>
    <UseMarkerArray index="Prep" value="1"/>
    <UseMarkerArray index="Cast" value="1"/>
    <UseMarkerArray index="Channel" value="1"/>
    <PauseableArray index="Approach" value="1"/>
    <PauseableArray index="Prep" value="1"/>
    <PauseableArray index="Cast" value="1"/>
    <PauseableArray index="Channel" value="1"/>
    <PauseableArray index="Finish" value="1"/>
    <PreemptableArray index="Approach" value="1"/>
    <PreemptableArray index="Prep" value="1"/>
    <PreemptableArray index="Channel" value="1"/>
    <DefaultError value="MustTargetUnit"/>
    <AcquirePriority value="3"/>
    <SetLastTarget value="Unknown"/>
</CAbilEffect>

AbilEffectInstant

立即生效的效果技能基类

属性

这里写图片描述

XML定义

<CAbilEffectInstant default="1">
    <CmdButtonArray index="Execute">
        <Flags index="ShowInGlossary" value="1"/>
    </CmdButtonArray>
</CAbilEffectInstant>

实体类

人族机枪兵兴奋剂技能,首先需要花费10点生命值
这里写图片描述
下图强化剂挂载的模组
这里写图片描述

使用兴奋剂的逻辑猜测
1. 玩家点兴奋剂按钮
2. 如果技能不处于冷却状态,则UseStimpack为真
3. 启用Simpack技能
4. 从挂载的效果模组中找到EffectID = ‘Simpack’的Effect

<CEffectApplyBehavior id="Stimpack">
    <EditorCategories value="Race:Terran"/>
</CEffectApplyBehavior>

CEffectApplyBehavior是增加行为的效果,括号内的文字是编辑器里取的别名与ID无关
5. 执行兴奋剂的逻辑处理

这里写图片描述
6. 兴奋剂效果又挂载了一个行为模组
7. 执行兴奋剂的行为逻辑
这里写图片描述
CBehaviorBuff是Buff行为

AbilEffectTarget

目标效果技能基类,选择目标后触发效果

属性

这里写图片描述
FinishCommand:单位完成技能后使用的命令

XML定义

<CAbilEffectTarget default="1">
    <CmdButtonArray index="Execute">
        <Flags index="ShowInGlossary" value="1"/>
    </CmdButtonArray>
    <Flags index="BestUnit" value="1"/>
    <FollowRange value="5"/>
</CAbilEffectTarget>

实体类

机枪兵的搭档的医疗兵治疗技能

<CAbilEffectTarget id="MedivacHeal">
        <OrderArray index="0" DisplayType="Confirm" Model="Assets\UI\Cursors\WayPointAttack_Void\WayPointAttack_Void.m3"/>
    </CAbilEffectTarget>

这里写图片描述
貌似不是医疗兵,是医疗运输机- -

表示还没玩过星际2,哈哈哈,建了个图实验了下
这里写图片描述
让机枪兵自相残杀,医疗运输机自动加血

这里写图片描述
治疗技能无CD

治疗逻辑猜测
1.治疗技能是自动施放
2.首先执行验证器
healCasterMinEnergy:治疗运输机是否有足够的能量
healSmartTargetFilters :筛选需要治疗的对象
NotWrapingIn : 没有被缠绕
3. 验证通过后施放技能
4. 执行MedivacHeal效果

<CEffectCreateHealer id="MedivacHeal">
    <ValidatorArray value="IsBiological"/>
</CEffectCreateHealer>

这里写图片描述
发现没有挂载治疗相关的逻辑部分,然后看CEffectCreateHealer
这里写图片描述
定义了消耗能量和修复比例,但是米有指定修复哪种属性,然后看默认值
这里写图片描述
目标被治疗的活力类型为Life

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值