【hammer进阶】csgo地图搓招高达神器制作教程
CD意识
2018年12月16日 20:09

地图实体运用进阶-高达神器制作教学

前言:神器创意不是我,案例方法由我拆地图自己一点一点研究剖析的酸奶的wk制作方法,教程由本人(steam:CD意识.)制作,一共30页。 最终实现效果:允许一名人类捡起地图上的高达神器(刀),免疫僵尸(T)和摔落伤害,鼠标右键控制高达挥刀砍杀并击飞僵尸,输入sawdwdsa搓招指令释放高达技能大范围秒杀,186s冷却。高达死亡,小范围爆炸,会炸死自己和附近ct。高达持有者死亡,持有者伤害过滤等参数恢复默认。

word文档和所用素材:地址乐涩度盘19msr6fTLeda_9934AJJX1A提取码ik9j

正文: 1. 创建一个点实体weapon_knife, 拖离地面一段高度,取名为wk_knife,调整点实体刀模型角度0 270 0,最后一项是否允许被捡起改为no(不允许),flag页面start constrained勾上(能将刀子固定在半空)

武器实体参数

武器实体FLAGS

2. 拉一块区域,转换成区域实体trigger_multiple,大小刚好包住之前实体的刀子模型,如图:

在旁边空地上创建一个筛选器点实体filter_activator_team,取名为human,属性里filtermode(过滤方式)选择Allow entities that match criteria,filter team number(过滤阵营)里选择Counter-Terrorist。这个筛选器的作用是只有CT(僵尸模式的人类)允许通过。如图:

打开之前创建用来包裹住刀子的trigger_multiple属性,取名为wk_trigger。filter name选择之前创建的筛选器human。此时这个触发区域只有ct人类可以触发。如图:

3. 创建点实体player_weaponstrip,如图:

(默认hammer列表没有,但是实际存在并可以被调用,随意创建1个别的点实体改个class即可),改完class,回车,点一下应用。如图:

  按下add按钮,在弹出来的窗口中,key填入targetname,value填入stripper(取名为stripper),按ok,如图:

这个点实体的作用是当被使用时,可以剥离触发者武器或护甲,包括刀。

 打开之前创建的wk_trigger触发区域的属性页面,翻到output页面,写入下面2输出, OnTrigger   wk_knife   AddOutput    CanBePickedUp 1 OnTrigger   stripper    StripWeaponsAndSuit 如图 

  意思是:第一条ontrigger(被触发时),wk_knife刀子的属性,能否被捡起那一栏改为yes         第二条ontrigger,调用stripper,剥离触发者的武器和防弹衣。 现在人类碰到wk_trigger触发区,会被剥离所有武器和护甲,然后捡起刀。 打开名为wk_knife的刀的属性输出页面。写入下面的输出(难点之一,请记住这个刀子实体名字,后面要往里面加输出) Onpickedup   wk_trigger   kill   (当被捡起,wk_trigger这个实体   删除) 这样就避免了刀被捡起后,后来者碰到wk_trigger触发区被剥离武器和护甲的悲惨命运。

4. 创建一个prop_dynamic点实体,取名为wk_model,属性页面world model一栏点击browse,选择我们要的模型,我这儿选择的是之前下载的new_wk.mdl模型。如图:

  点击ok来确定。再来看wk_model的属性页面的parent(父级),里面输入我们之前创建的刀子实体的名字wk_knife,这样一来,高达模型的位置就会随着刀子的位置改变而改变,如图:

  再找到属性页面的collisions一栏,选择no solid没有实体,这样模型就可以被穿过。如图:

  现在我们把属性页面翻到model便签页面。如图:

  我们可以看到,有很多参数,这些参数就是模型自带的动作参数。之后输出要更换动作的时候会用到,大家可以自己一个个选过去在相机视图来观看模型的动作。 最后在3视图调整高达和模型刀之间的位置关系(自己把握),如图:

 

5. 下面我们继续给点实体wk_knife(刀)添加输出,如下: OnPlayerPickup   !activator   AddOutput   rendermode 1 延迟0s勾选fire once only OnPlayerPickup   !activator   Alpha        0           延迟0.1s 勾选fire once only OnPlayerPickup   !activator   AddOutput   targetname wk_user延迟0s勾选fire once only OnPlayerPickup   wk_model   SetDefaultAnimation   dog_run  延迟0s勾选fire once only OnPlayerPickup   wk_model   SetAnimation  dog_run延迟0s 勾选fire once only 意思:第一条,当刀被捡起,捡起的人 增加输出 渲染模式改为1(color)这时人类模型可以被更改透明度 0s延迟,只被触发一次 第二条,当刀被捡起,捡起的人 透明度变为0(透明)0.1s延迟,只被触发一次,之所以要0.1s是因为先要改上面那条更改渲染模式生效,人物透明度更改才有用,所以这条要比上一条慢一点 第三条,当刀被捡起,捡起的人 增加输出 属性页面的名字变成 wk_user(默认为空)0s延迟,只被触发一次。 第四条,当刀被捡起,点实体wk_model(高达模型) 默认动画设置为 dog_run(这里的dog_run就是上面介绍到的模型动作参数) 第五条,当刀被捡起,点实体wk_model(高达模型) 设置动画为dog_run 现在当人去捡刀的时候,碰到wk_trigger触发区,会被剥离所有武器和护甲,然后捡起刀,wk_trigger触发区被立刻删除,高达模型动作改为dog_run,捡起刀的人变成透明,同时标记为wk_user。

6. 在旁边空地上创建一个筛选器点实体filter_activator_team,取名为zombie,属性里filtermode(过滤方式)选择Allow entities that match criteria,filter team number(过滤阵营)里选择Terrorist。这个筛选器的作用是只有T(僵尸模式的僵尸)允许通过。如图:

  在旁边空地上创建一个筛选器点实体filter_activator_team,取名为nozombie,属性里filtermode(过滤方式)选择Disallow entities that match criteria,filter team number(过滤阵营)里选择Terrorist。这个筛选器的作用是T(僵尸模式的僵尸)不允许通过。如图:

  在旁边空地上创建一个筛选器点实体filter_damage_type,取名为nofall,属性里filtermode(过滤方式)选择Disallow entities that match criteria,Damage type(过滤伤害)里选择FALL。这个筛选器的作用是摔落伤害不允许通过。如图:

  在旁边空地上创建一个筛选器点实体filter_damage_type,取名为nogeneric,属性里filtermode(过滤方式)选择Disallow entities that match criteria,Damage type(过滤伤害)里选择GENERIC。这个筛选器的作用是一般伤害不允许通过。如图:

  在旁边空地上创建一个筛选器点实体filter_multi,取名为nofallandzombie,属性里filter1(筛选器1)选择之前创建的筛选器nofall,filter2(筛选器2)选择之前创建的筛选器nozombie,。这个筛选器的是结合了nofall与nozombie两个筛选器的功效。如图:

  创建完筛选期后,下面我们继续给点实体wk_knife(刀)添加输出,如下: OnPlayerPickup  !activator  SetDamageFilter  nofallandzombie  延迟0s勾选fire once only 当刀被捡起,捡起的人,设置伤害筛选器 nofallandzombie(即捡起刀的人不会有摔落伤害和被僵尸攻击到)

  在旁边空地上创建一个筛选器点实体point_clientcommand,取名为command,这个点实体在这儿的作用是用来在在对话框打字。 然后我们继续给点实体wk_knife(刀)添加输出,如下: OnPlayerPickup  command  Command  say <--A human has picked White Knight--> 延迟0s勾选fire once only 当刀被捡起,实体point_clientcommand 输入command指令 在对话框打出字: <--A human has picked White Knight-->

  现在当人去捡刀的时候,碰到wk_trigger触发区,会被剥离所有武器和护甲,然后捡起刀,wk_trigger触发区被立刻删除,高达模型动作改为dog_run,捡起刀的人变成透明,同时标记为wk_user,免疫僵尸(t)的所有伤害和掉落伤害。对话框打出文字:<--A human has picked White Knight-->

7. 下面我们来制作高达神器的打击框(难点)。拉两个固体方块,组合成如图所示的L形状(不要盖住捡起的人的枪的位置)

  选中拉出的2个方块固体,贴图用invisible,A转换成实体func_physbox_multiplayer,取名为wk_box parent一栏里输入wk_knife(和之前模型一样随刀子移动而移动) damage filter一栏写入我们之前创建的筛选器名字nogeneric,即没人捡起的时候打击框不受一般伤害,捡起后这里我们还要用输出来改,后面再说 Disable shadows 改为yes Disable shadows depth改为yes   Disable receiving shadows 改为yes 这三栏是禁止光影相关,因为打击框不能被看见 Strength 改为 1000000 一百万生命 和前面damage filter一栏一样,没人捡起的时候百万生命,捡起后我们还要用输出来改,后面再说 Material Type 改为metal 铁质,被打的时候发出铁质声响 下面两张图就是改完后的属性

 

  翻到flags页面,勾选如图:

  Start Asleep 开始休眠 Ignore +USE for Pickup 忽略使用的输入来获取 Debris - Don't collide with the player or other debris 碎片不与其他玩家或其他碎片发生碰撞 Motion Disabled 禁止运动 Not affected by rotor wash 玩家碰撞后的动作禁用 Don't take physics damage 不受物理伤害 Don't allow bullet penetration 不让子弹穿透。 回到点实体wk_knife(刀)我们添加输出: OnPlayerPickup  wk_box  SetHealth  800  延迟0s勾选fire once only 当刀被捡起 受打击框 设置生命为800 OnPlayerPickup  wk_box  SetDamageFilter  zombie  延迟0s勾选fire once only 当刀被捡起 受打击狂 设置伤害筛选器为 zombie(我们上面内容里创建的筛选器,这里设置后受打击框就只会接受僵尸的攻击,人类打了没用)

8. 旁边在空地创建点实体game_ui,取名为wk_ui,翻到flags页面,把4项全部取消勾选。

  这个实体主要作用是感应触发玩家的输入操作例如玩家wasd输入的移动,鼠标左右按键输入的轻重攻击等等。用于控制玩家鼠标右键对应高达挥刀相关,像拳皇一样搓秒杀技能相关。 回到点实体wk_knife(刀)我们添加输出: OnPlayerPickup  wk_ui  Activate  延迟0s勾选fire once only 当刀被捡起,wk_ui被激活 到目前为止点实体wk_knife(刀)的所有输出已经写完,如下图:

  一共11条输出。 现在当人去捡刀的时候,碰到wk_trigger触发区,会被剥离所有武器和护甲,然后捡起刀,wk_trigger触发区被立刻删除,高达模型动作改为dog_run,捡起刀的人变成透明,同时标记为wk_user。免疫僵尸(t)的所有伤害和掉落伤害。对话框打出文字:<--A human has picked White Knight-->。受打击框子设置生命为800,筛选器为zombie(只有僵尸打的到受打击框), 同时wk_ui开始感应玩家的输入操作。

9. 好我们继续来做玩家控制高达挥刀相关 拉一个固体,材质选用trigger,转换为trigger_hurt(伤害触发区),调整位置放在高达前方,如图

  打开属性页面, 取名为wk_attack2_hurt parent写入wk_model(随着高达模型移动而移动) filter name中写入zombie(选择筛选器为zombie,这个伤害触发区只对僵尸起作用) start disable一栏选yes(默认该伤害触发区是禁止状态,静止状态下僵尸走进去啥事也没有) damage写入1000(高达每刀伤害1000) Damage cup写入1000(每秒伤害1000) Damage Type 写入SONIC(伤害类型sonic)

  打开属性flag标签,只勾选client。

  拉一个固体,材质选用trigger,转换为trigger_push(推力触发区),大小位置与之前的trigger_hurt一模一样,完全重叠一起,如图

  打开属性页面, 取名为wk_attack2_push         parent写入wk_model(随着高达模型移动而移动) filter name中写入zombie(选择筛选器为zombie,这个推力只对僵尸起作用) start disable一栏选yes(默认该推力触发区是禁止状态,静止状态下僵尸走进去啥事也没有) Push direction写入模型正前方向(我是0 -90 0,因人而异,总是高达模型脸的正前方) Speed of push写入800(推力800)

  打开属性flag标签,只勾选client。

  空地上创建一个点实体ambient_generic 取名为wk_attack_1_sound SourceEnitityName写入wk_knife,发音源头为刀 Sound name选一个自己想要的刀的音效。我用的是wk_attack_1.mp3 Max audible distance 写入3000,声音传播最大半径3000

  打开属性flag标签,勾选start slient和is not looped。

  回到game_ui点实体,打开输入页面写入以下输入: PressedAttack2  !self  Deactivate  延迟0s  不勾选fire once only PressedAttack2  !self  Activate  延迟5s    不勾选fire once only 这2个是控制挥刀cd的,鼠标右键重攻击时点实体game_ui自身禁用,5s后启用。 PressedAttack2  wk_attack2_hurt  Enable 延迟0.3s 不勾选fire once only PressedAttack2  wk_attack2_hurt  Disable 延迟0.6s 不勾选fire once only 这2个是控制伤害触发区的,重攻击后0.3s开放伤害触发区,0.6s关闭。 PressedAttack2  wk_attack2_push  Enable 延迟0.3s 不勾选fire once only PressedAttack2  wk_attack2_push  Disable 延迟0.6s 不勾选fire once only 这2个是控制推力触发区的,重攻击后0.3s开放推力触发区,0.6s关闭。 PressedAttack2  wk_attack_1_sound  PlaySound  延迟0s 不勾选fire once only 当重攻击时,播放挥刀音频 PressedAttack2  wk_model  SetAnimation  dog_sword2  延迟0s 不勾选fire once only 这个是控制高达模型动画,重攻击后模型动画改为dog_sword2(挥刀动作) 做到这一步后,实现的效果是:当人去捡刀的时候,碰到wk_trigger触发区,会被剥离所有武器和护甲,然后捡起刀,wk_trigger触发区被立刻删除,高达模型动作改为dog_run,捡起刀的人变成透明,同时标记为wk_user。免疫僵尸(t)的所有伤害和掉落伤害。对话框打出文字:<--A human has picked White Knight-->。受打击框子设置生命为800,筛选器为zombie(只有僵尸打的到受打击框),同时wk_ui开始感应玩家的输入操作,当玩家按下鼠标右键,高达挥出一刀,播放挥刀声音,前方你设定的一片区域内僵尸受到伤害和击飞。 挥刀相关制作完毕

10. 神器高达被打烂后的爆炸相关 拉一块固体,材质选用trigger,转换为trigger_hurt(伤害触发区),,范围是包括住神器持有人和附近一圈(就是高达爆炸伤害范围)。如图:

  打开属性页面, 取名为wk_box_hurt parent写入wk_knife(随着持有者手中的刀移动而移动) Start disable 写入yes(在高达受击打框hp归0前都禁止) Filter name 写入human (只对人类起作用) damage写入1000000(高达爆炸伤害为1000000) Damage cup写入1000000(每秒伤害1000000) Damage Type 写入SONIC(伤害类型sonic)

  翻到输出页面,写入以下输出: OnHurtPlayer  !activator  AddOutput  targetname player  延迟0s勾选fire once only OnHurtPlayer  !activator  Alpha  255  延迟0s勾选fire once only OnHurtPlayer  !activator  SetDamageFilter  延迟0s勾选fire once only 第一条,爆炸(秒杀伤害)伤到人时, 被炸的人 标记为player。(去除wk_user标记) 第二条,爆炸(秒杀伤害)伤到人时, 被炸的人 改为默认的完全不透明(去除神器持有者的透明) 第三条,爆炸(秒杀伤害)伤到人时, 被炸的人 设置伤害筛选器为空(游戏里玩家筛选器默认就是空的,这里是去除神器持有者的免疫掉落与僵尸伤害) 思路是,由于之前,持有者捡起刀后,变成透明,同时标记为wk_user,免疫僵尸(t)的所有伤害和掉落伤害,同时身上有个高达作为视野参照物。如果高达死了后(参照物消失)不把持有者的伤害免疫和透明改回去,下局他就一直是透明和伤害免疫状态,会形成一个bug。 爆炸相关就做完了。

11. 高达实现像拳皇一样搓技能,释放范围秒杀。(难点) 秒杀区域: 拉一块固体,形状圆柱体,材质选用trigger,转换为trigger_hurt(伤害触发区),以神器持有者为圆心。如图:

  打开属性页面, 取名为wk_ultimate_hurt parent写入wk_model(随着高达模型移动而移动) Start disable 写入yes(在技能被搓招触发前都禁止) Filter name 写入zombie (只对僵尸起作用) damage写入1000000(高达爆炸伤害为1000000) Damage cup写入1000000(每秒伤害1000000) Damage Type 写入SONIC(伤害类型sonic) 搓招的实现: 先写输出,后讲思路 创建8个logic_relay点实体,分别命名为wk_relay1到wk_relay8。 除了wk_relay1的属性里,start disable是no(默认开启),其余7个start disable都是yes(默认关闭) 下面一次是8的点实体的输出:

wk_relay8: 秒杀技能输出相关,可以看成是搓招逻辑的终点,这里讲的是搓招,先不写输出。 我们把视角转到之前创建的点实体game_ui上(之前创建的用来感应玩家操作输入的点实体)。打开game_ui的属性,翻到输出,增加以下输出:

现在搓招算是实现了,效果是拿到神器后键盘输入sawdwdsa,开启秒杀技能(relay8)。其中按键与按键之间按下的有效时间间隔是0.2s,超过了就判定搓招失败。 下面是思路,为了方便理解我画了个树状图:

  图中relay1和7被绑定在了按下后指令上(PressedBack),3和5在前上(PressedForward),2和8在左上(PressedMoveLeft),4和6在右上(PressedMoveRight)。除了1其余2-8都是默认禁用的,也就是说除了按下后按键(1被绑定在后按键上),其余3个方向的按键因为绑的2-8都是禁用的,所以按下去不会算在搓招里。 当按下按键后,1因为默认启用能被触发,然后输出2被启用,0.2s禁用。 2被绑定在左按键,0.2s内按下左,2被触发输出3启用,0.2s禁用。 3被绑定在前按键,0.2s内按下前,3被触发输出4启用,0.2s禁用。 4被绑定在右按键,0.2s内按下右,4被触发输出5启用,0.2s禁用。 5被绑定在前按键,0.2s内按下前,5被触发输出6启用,0.2s禁用。 6被绑定在右按键,0.2s内按下右,6被触发输出7启用,0.2s禁用。 7被绑定在后按键,0.2s内按下后,7被触发输出8启用,0.2s禁用。 8被绑定在左按键,0.2s内按下左,8被触发输出内置的秒杀技能相关输出。 所以搓招是↓←↑→↑→↓←。 秒杀技能输出相关: 复制一个,空地上之前创建的,一个名为wk_attack_1_sound的,点实体ambient_generic 取名为wk_attack_2_sound Sound name选一个自己想要的秒杀技能的音效。我用的是wk_attack_2.mp3(6s长,前面是蓄力声音,5.8秒是秒杀的声音) 找到之前的relay8,打开写入以下输出:

思路,当搓招完成触发relay8,8被触发后: 第一条,高达模型动作变为发秒杀技能的动作(举起剑)。 第二条,感应玩家输入的实体停止激活,防止玩家重攻击控制高达挥刀改变当前动作。 第三条,播放技能的6s音频。 第四条,relay1禁用,搓招的开头是绑定按键后的relay1,禁用就相当于不能搓招,技能进入冷却。 第五条,秒杀伤害区5.5s开放,5.8s关闭。因为音频是6s,前5.5s是蓄力声音,然后才是技能发出的声音,所以秒杀区域5.5s开放。 第六条,感应玩家输入的实体激活。技能放完,玩家恢复对高达挥刀的控制。 第七条,ralay1在186s后启用。相当于技能冷却是186s。 高达搓招释放技能相关结束。 12. 高达受击框hp归0后的相关输出 也就是高达被僵尸打烂了,删除神器的模型和相关点实体,然后触发前面做的爆炸。 复制一个,空地上之前创建的,一个名为wk_attack_1_sound的,点实体ambient_generic 取名为wk_explosion,翻到flags页面全勾上 Sound name选一个自己想要的爆炸的音效,用于高达爆炸声音。 选中之前做的受击框wk_box,属性,添加以下输出

思路:受击框被打碎时,输出: 第一条,高达秒杀的伤害区域删除 第二条,感应玩家操作输入的实体停止激活 第三条,播放爆炸音效 第四条,搓招技能音效删除 第五条,挥刀音效删除 第六条,搓招要用的relay1-8删除 第七条,感应玩家操作输入的实体0.03s后删除(先停止激活后删除) 第八条,高达模型删除(killhierarchy能更快的删除有很多带有子项的实体,之前我们创建了一些以高达模型为父级的实体) 第九条,爆炸伤害区域开启 第十条,爆炸伤害区域1s后删除 第十一条,爆炸音效1.01s后删除 第十二条,神器持有者透明度改为255不透明 第十三条,神器持有者伤害免疫变回默认 第十四条,神器持有者标记由之前的wk_user变为player。

教学内容到此结束。

教程由CD意识.制作(steam:CD意识.) 历时8h 版权所有