# 4.7)动画位移参数:需要配合acf_displace_position和偏移坐标 (x,y,z) x右左 y前后 z上下,按照我的经验,每个单位量为3dmax中一格,注意该参数是动画播放完毕时相对于播放前的位置偏移量,如果你整个动画是飞起来又落地,那实际上是没有这个z轴上的位移的
# 4.8)布娃娃延迟,agent死亡后会有一段时间切换到布娃娃状态,这个参数就是控制这个时间的,单位为秒。这个参数很有意思,我之前一度以为这个布娃娃参数是战团针对undead整活留的东西,似了以后可以临时放动画玩炸湿什么的。现在才发现,是为了修正skin里面的scale参数大人变大斧头的问题的。简单的说就是skin里面用scale参数调整大小比例的话,有一个小小的问题,即agent被投掷物杀死的时候这个投掷物prop也会变大,原因就是在agent死的一瞬间,如果直接便布娃娃的话,斧头会跟着一起变,所以会被scale参数污染。这个延迟时间的真正作用就是在修正这个,所以当时我写的 “不能超过2s,超过的话会直接挂起,就无法切换为布娃娃了” 这个是错误的,这个参数还真他娘的可以超过2秒。真正的用法是,如果你玩炸湿,那尽量控制在2s以内,如果是为了修正大人大斧头的问题,那需要在对应的dead动画里面将这个参数拉大,保证大于动画播放时间。
例如
- [1.0, "death_chest", 4, 37, arf_blend_in_16|arf_make_custom_sound, pack2f(0.9, 0.0), (0,0,0), 0.5],</font>
复制代码
arf参数后面的三个参数就对应了4.6-4.8
二,anim文件结构和一些参数说明
- amf_priority_jump = 2
- amf_priority_ride = 2
- amf_priority_continue = 1
- amf_priority_attack = 10
- amf_priority_cancel = 12
- amf_priority_defend = 14
- amf_priority_defend_parry = amf_priority_defend + 1
- amf_priority_throw = amf_priority_defend + 1
- amf_priority_blocked = amf_priority_defend_parry
- amf_priority_parried = amf_priority_defend_parry
- amf_priority_kick = 33
- amf_priority_jump_end = 33
- amf_priority_reload = 60
- amf_priority_mount = 64
- amf_priority_equip = 70
- amf_priority_rear = 74
- amf_priority_striked = 80
- amf_priority_fall_from_horse= 81
- amf_priority_die = 95</font>
复制代码
这些是anim的优先级,高优先级的anim会打断低优先级的anim的播放,比如die,死亡的动画优先级是95,所以死亡会打断所有的其他动画,目前没发现有超过95的优先级,但是配合布娃娃延迟参数应该可以做一些炸湿类的小玩意。
需要注意amf_continue_to_next会暂时打破这个优先级的排列,应该是强制执行的。
当然这里的优先级是你自己填数字也可以,amf只是一个方便检索的标识。
- horse_move = 10000
- combat = 20000
- defend = 35000
- blow = 40000</font>
复制代码
区间分段,和战团的anim_human搭配使用,该骨骼动画集成很多动作在里面,帧数过大,便于区分查找会用到该分段,例如 [1, "anim_human",combat+10, combat+50],
- attack_parried_duration = 0.6
- attack_blocked_duration = 0.3
- attack_blocked_duration_thrust = attack_blocked_duration + 0.3
- attack_parried_duration_thrust = attack_parried_duration + 0.1
- defend_parry_duration_1 = 0.6
- defend_parry_duration_2 = 0.6
- defend_parry_duration_3 = 0.8
- ready_durn = 0.35
- defend_duration = 0.75
- defend_keep_duration = 2.0
- cancel_duration = 0.25</font>
复制代码 一些播放时间的说明
- blend_in_defense = arf_blend_in_3
- blend_in_ready = arf_blend_in_6
- blend_in_release = arf_blend_in_5
- blend_in_parry = arf_blend_in_5
- blend_in_parried = arf_blend_in_3
- blend_in_walk = arf_blend_in_3
- blend_in_continue = arf_blend_in_1</font>
复制代码 这个很特殊,试过很多方法,也差了不少资料,一直到现在我也没有确定这些arf的标签是干什么的,之前东海猜测过是控制结束帧的,我感觉应该不是,更应该是在当前播放的动画中加入一个动画,但是这个参数一直没搞明白。
然后是anim的list正文,里面有几个点需要说明一下:
1,如果要添加新的anim,一定不能在中间直接插入,因为战团对于自带的anim的调用是硬编码的,和itm/trp/party等等不一样,如果排序变动会影响到后面所有anim的调用
2,新加anim可以直接写在 ### Unused human/horse animations startfrom here.后面,各留了一百个空位,但是human类的被婚礼之类的占用了一部分,也可以直接写在anim文件的最后。总之记得一点,不要打乱原条目的id!
3,一个anim里面可以写多个动作,播放时随机选取一个播放,所以攻击类动作的添加需要注意ready/release等前后帧的衔接,推荐直接复制上一部分的最后一帧作为第一帧
4,在第三条的情况下,如果使用了amf_use_cycle_period,会重复该动作,即动作的变换
三,分享讨论一下anim头文件中的一些总结
先说一下amf 动作优先级标识
amf_rider_rot_bow = 0x00001000 #限制骑手在马背上右转的角度,下面都差不多
amf_rider_rot_throw = 0x00002000
amf_rider_rot_crossbow = 0x00003000
amf_rider_rot_pistol = 0x00004000
amf_rider_rot_overswing = 0x00005000
amf_rider_rot_thrust = 0x00006000
amf_rider_rot_swing_right =0x00007000
amf_rider_rot_swing_left =0x00008000
amf_rider_rot_couched_lance = 0x00009000
amf_rider_rot_shield = 0x0000a000
amf_rider_rot_defend = 0x0000b000
#以上都是限制骑手在马背上的上半身右转角度,限制范围各有不同
amf_start_instantly = 0x00010000 #立即开始播放,如正在播放其他动画会直接结束并播放此动画
amf_use_cycle_period = 0x00100000 #当一个anim里有多个动画并列的时候,重复该动作(正常情况下是随机播放其中之一)
amf_use_weapon_speed = 0x00200000 #武器速度会影响动画实际播放时间(例如装填瞄准)
amf_use_defend_speed = 0x00400000 #盾牌速度会影响动画实际播放时间
amf_client_prediction = 0x01000000 #联机用
amf_play = 0x02000000#播放至最后一帧就结束
amf_keep = 0x04000000 #播放完毕保持最后一帧直到有操作打破,和arf_cyclic一起使用会一直循环播放,有人说这个是循环播放,实际上不是
amf_restart = 0x08000000 #重新播放动画
amf_hide_weapon = 0x10000000 #播放时隐藏武器
amf_client_owner_prediction = 0x20000000 #联机用
amf_use_inertia = 0x40000000 #运动速度(惯性)会影响动画实际播放时间
amf_continue_to_next = 0x80000000 #当前动画结束时,直接播放下一个动画
然后是acf类动作功能标识
acf_synch_with_horse = 0x00000001 #同步骑手和坐骑
acf_align_with_ground = 0x00000002 #将动画的纵轴与地面法线对齐(即播放时不会拖离地面)
#下面三条疑似优先级的强制执行可以保证动作一定会播放出来,不会因为骑马或者其他原因上下部分受到影响,以及应该还有enforce_upperbody?因为我在t社那边论坛看到了,或许是因为版本更新被取消了?
acf_enforce_lowerbody = 0x00000100 #让动画始终在下半身播放,即使被调用的范围是上半身
acf_enforce_rightside = 0x00000200 #实际效果是强制在右半侧播放,且会调整视角,视野内会有右手出现(例如很多武器的单手蓄力状态)
acf_enforce_all = 0x00000400 #将动画在骨骼的所有部分上播放(上下两部分)
acf_parallels_for_look_slope= 0x00001000 #动画启用俯仰视角,即该动作虽然条目里面只写了一段动画,但是添加标签后会将条目内的动画作为平时视角的动画,在brf中平视动画之前100帧起会作为俯视视角动画,平视动画之后100帧起会作为仰视视角动画
例如defend_shield_parry_1,
- ["defend_shield_parry_1", acf_parallels_for_look_slope|acf_anim_length(100), amf_priority_defend_parry|amf_play|amf_restart|amf_rider_rot_shield,
- [defend_parry_duration_1, "anim_human", defend+121, defend+130, arf_blend_in_1],</font>
复制代码起始帧为defend+121, defend = 35000
正常的是35121,俯视视角是35021,仰视视角是35221,在brf的anim_human中我们在对应的帧数可以对比看到三种视角,截图丢最后。
acf_lock_camera = 0x00002000 #锁定cam在动画play的过程中不会移动
acf_displace_position = 0x00004000 #需要配合偏移坐标 (x,y,z) x右左 y前后 z上下,按照我的经验,每个单位量为3dmax中一格,注意该参数是动画播放完毕时相对于播放前的位置偏移量,如果你整个动画是飞起来又落地,那实际上是没有这个z轴上的位移的。如果你到你动画有位移但是实际代码里面没写这个位移相关的参数和flag,那么在动画结束后会瞬移到动画开始时的位置。
acf_ignore_slope = 0x00008000 #动画过程不考虑倾斜角度
acf_thrust = 0x00010000 #刺击
acf_right_cut = 0x00020000 #右攻击
acf_left_cut = 0x00040000 #左攻击
acf_overswing = 0x00080000 #上劈
#下面三条常用于瞄准,有俯仰角度或旋转的攻击动作里面(rot是rotate的缩写),但是实际最好用的还是acf_rot_vertical_bow,sword这个有时候有点怪怪的,像是不生效,没用
acf_rot_vertical_mask = 0x00300000 #垂直旋转,影响部位暂时不明,用在瞄准类动画上
acf_rot_vertical_bow = 0x00100000 #垂直旋转,用在瞄准攻击类动画上,可以旋转俯仰角(例如上刺)
acf_rot_vertical_sword = 0x00200000 #垂直旋转,用在瞄准类动画上,但会影响头部和右肩骨骼(疑似有问题,会影响实际效果)
最后是arf 动作序列标识
#arf_make_walk_sound和arf_make_custom_sound播放声音。
#与pack2f或pack4f配合使用
#括号内参数是开始播放声音和结束播放声音的进度
#播放的声音内容应该是编码的,改不了,不能自定义播放内容就基本没什么大用了
arf_make_walk_sound = 0x00000100 #走路声音,会自行播放人或马的走路声音(会参考是否在水中)
arf_make_custom_sound = 0x00000200 #播放对应的声音(获取弹药,装弹,摔落等)
arf_stick_item_to_left_hand = 0x04000000 #物品移动到左手(比如火枪装弹)有时候会突然移回右手
arf_cyclic = 0x10000000 #循环播放
arf_use_walk_progress = 0x20000000 #使用当前的前进动作方向
arf_use_stand_progress = 0x40000000 #使用当前的站立动作方向
arf_use_inv_walk_progress = 0x80000000 #同上,但是反向
这三条之前瞎几把猜的,现在更正
arf_use_walk_progress = 0x20000000 #自动适配并应用当前的步行动作的进度
arf_use_stand_progress = 0x40000000 #自动适配并应用当前的站立动作的进度
arf_use_inv_walk_progress = 0x80000000 #同上,但是反向
暂时写的就这么多,一直没有系统地整理,可能漏了一些小姿势,后面记起来再补充吧。也算是对这么长时间anim研究的一点交代,希望可以尽快找到志同道合的朋友一起做解侠