Ultimate 发表于 2015-9-14 22:11:35

【15-09-16更新】【地图实例教程】榴弹反射台+假DMM破坏效果

本帖最后由 Ultimate 于 2015-9-16 22:19 编辑



注意:下载本帖下方提供的地图源码文件进行参考/学习。如果你对实体没有基础了解,你可能不知道干了什么,完全新手请先了解实体Inputs/Outputs系统以及实体属性,如果你会做一个按E开门的按钮触发或者会制作一个简单的传送区域,那么你基本就知道这个帖子在说啥。

Valve Developer Community:https://developer.valvesoftware.com

地图包括内容:
+一个榴弹发射台
+四个带物理效果的可破坏性固实体建筑

关键实体:
-榴弹炮
game_ui (控制方向)https://developer.valvesoftware.com/wiki/Game_ui
这里用于限制玩家行动、限制玩家可控当前FOV、启用/关闭控制炮台、触发开火、恢复正常玩家Targetname。

被使用到的I/O:
Outputs:
PlayerOn - 当输入者激活game ui控制时
PlayerOff - 当输入者脱离game ui控制时
PressedAttack - 当输入者执行了一个+attack命令时
Inputs:
Activate - 对输入者激活game ui控制

point_template (“榴弹”生成)https://developer.valvesoftware.com/wiki/Point_template
生成指定实体模板,实体被指定将开局不存在,这里用作生成“榴弹”

被使用到的I/O:
Inputs:
ForceSpawn - 生成所有被指定的实体在实体位置

logic_measure_movement (生成瞄准)https://developer.valvesoftware.com/wiki/Logic_measure_movement
该实体我个人也不熟悉,这里我用作将炮台绕一个实体的Helper位置旋转,在vmf中你可以看到func physbox(这里是作为控制框架,并不是下面的碰撞网格)和prop dynamic(引用一个模型作为炮台模型,没有任何实际功能)被Parent在一块。

被使用到的I/O:
Inputs:
SetMeasureTarget - 相当于修改了Entity to Measure的键值,也就是重新定义被测量运动的实体。
Disable - 关闭/禁用这个实体
Enable - 启用/激活这个实体

trigger_teleport (传送“榴弹”)https://developer.valvesoftware.com/wiki/Trigger_teleport
这里将point_template生成的榴弹传送到榴弹发射台炮管口,也就是传送到push的发射线处,勾选了Physics Objects。

func_physbox (负责碰撞与触发爆炸)https://developer.valvesoftware.com/wiki/Func_physbox
prop physics没有生命值设定,所以这里使用func physbox作为prop physics的额外碰撞网格与生命值,当func physbox受到物理伤害/顶点碰到任意碰撞网格位置,physbox则会Break(因为我设置了生命值仅为1),当Break,触发事件:prop physics→Break。

MassScale(SmartEdit Off,SmartEdit On是Mass)键值会影响飞行,这里设置了100倍。

被使用到的I/O:
Outsputs:
OnBreak - 当physbox被破坏/摧毁时(与Source L4D2时期后新增的OnKilled类似,并不是同一个意思!)

prop_physics (负责爆炸与伤害)https://developer.valvesoftware.com/wiki/Prop_physics
physics和physbox都具有一个当Break时创建一个爆炸的属性,但physbox的是无效的,这里用有效的实体prop physics作为爆炸用途。当func physbox受到物理伤害则Break,则触发自身OnBreak→prop physics→Break,当prop physics被触发Break,立即爆炸。(由于爆炸没有额外音效,这里同时OnBreak→ambient_generic→PlaySound)。

MassScale(SmartEdit Off,SmartEdit On是Mass)键值会影响飞行,这里设置了100倍。

被使用到的I/O:
Outputs:
OnBreak - 当physbox被破坏/摧毁时(与Source L4D2时期后新增的OnKilled类似,并不是同一个意思!)

trigger_push (发射线)https://developer.valvesoftware.com/wiki/Trigger_push
这里使传送进来的“榴弹”“发射”,力度这里是极为巨大的,但其实足够大就行了,注意:这里推动的是Physics物体,记得在Flag勾选Physics Object才能对prop physics和func physbox生效。

logic_timer (冷却时间)https://developer.valvesoftware.com/wiki/Logic_timer
在这里,开火是logic relay负责,则设置logic relay→OnTrigger→logic timier→Enable(这一步一定要在Disable自身之前),logic relay→OnTrigger→!self→Disable,设定timer的时间为3秒,然后logic timer→OnTime→logic relay→Enable。

这样做会有一个无法开火的BUG,也就是可能当玩家刚好在OnTime时开火,所以我设置了一个修复这个BUG的按钮

被使用到的I/O:
Outputs:
OnTime - 当实体自身被设定的时间到时
Inputs:
Enable - 启用/激活这个实体

-假DMM效果
func_physbox(没错,一实体全役)https://developer.valvesoftware.com/wiki/Func_physbox
设置physobx的Strength,在设置Physics Impact Force to Override Motion(如果被设定,开局将关闭运动,当任何一个大于设定值的力被施加在physbox上,physbox开启运动),也可以配合使用Health Level to Override Motion(如果被设定,开局将关闭运动,当生命值低于多少时,同上),这样设定后由于Disable Motion时是看不到组成之间的缝隙的,所以跟一个整体没区别,这个效果如果太过于精细,会过度消耗电脑资源。

设置不同的MassScale会有不同的效果。

可选性实体:
func_button(启动控制)https://developer.valvesoftware.com/wiki/Func_physbox
这里用作启用炮台与设定玩家独有Targetname防止与其他Targetname混淆导致出现问题。

被使用到的I/O:
Outputs:
OnPressed - 当Button被按下/执行Press时

logic_relay (消息转发器,将开火触发集合在一块,分清条理)https://developer.valvesoftware.com/wiki/Logic_relay
ambient_generic(爆炸声、发射声)https://developer.valvesoftware.com/wiki/Ambient_generic
设定SourceEntityName值到支持的实体则可以让声音从这个实体发出,参数同套用ambient_generic

被使用到的I/O:
Outputs:
OnTrigger - 当触发时
Inputs:
Trigger - 触发该实体,将对应输出OnTrigger

env_sprite (开火特效)https://developer.valvesoftware.com/wiki/Env_sprite
最佳渲染模式:World Space Glow

被使用到的I/O:
Outputs:
OnUser1 - 当实体被输入FireUser1时,执行OnUser1输出,这是一个自定义输出,用途广泛。
Inputs:
ShowSprite - 显示Sprite
HideSprite - 隐藏Sprite

未被使用:env_smokestack(烟)https://developer.valvesoftware.com/wiki/Env_smokestack
未被使用:env_steam(同烟)https://developer.valvesoftware.com/wiki/Env_steam

有更多的想法能实现:
+发射不同属性的榴弹(实体拼盘)
+发射距离控制(分trigger_push块,Disable与Enable)
+按钮发射操控台
+etc..

问题总结:
-伤害不能过滤。
-轨迹线会有开火一瞬间显示错乱。Valve没有给“轨迹”实体加Disable和Enable……
-没有故障修复按钮,虽然我在移动式所有测试过程中从未出现过任何一次故障。
-爆炸音效仅个人能听到,由于SourceEntityName的问题,绑定在“炮弹”实体上不生效,所以这里直接放在Knife上播放这个音效了。
-切记不要保存笔刷,这会让你创建一个无效固体!要复制到其他地图中,请保证Targetname没有重复!

其他信息:
http://tieba.baidu.com/p/4032088655
http://tieba.baidu.com/p/4038213272

(VMF+BSP)固定式下载地址:http://pan.baidu.com/s/1gduEef5 密码:5iw4

2015-09-16更新:便携式
http://i3.tietuku.com/74d985c24c86fb81.gif
关键实体:
env_spritetrail(“榴弹轨迹”)https://developer.valvesoftware.com/wiki/Env_spritetrail
这里用于制作一个“轨迹”,使用白色laser spr

(VMF+BSP)便携式下载地址:http://pan.baidu.com/s/1mgKS2hU

大萌宅 发表于 2015-9-14 22:23:14

{:32_795:}Cyber nyx

Ultimate 发表于 2015-9-14 22:25:59

大萌宅 发表于 2015-9-14 22:23
Cyber nyx

你是?                  

Kirby君 发表于 2015-9-14 22:39:09

{:32_795:}

kine 发表于 2015-9-15 00:04:41

好厉害的样子。

软妹 发表于 2015-9-15 00:05:52

{:32_795:}看不懂 一看就是技术宅

劍琳 发表于 2015-9-15 00:21:30

{:27_127:}

不起眼的轧空 发表于 2015-9-15 00:29:53

也许可以拿去做地图?{:27_148:}

wyx5125867 发表于 2015-9-15 03:04:15

{:32_795:}

Ultimate 发表于 2015-9-15 06:21:23

不起眼的轧空 发表于 2015-9-15 00:29
也许可以拿去做地图?

一个例子,看源码学习是最有效的,这个也就是让你学别人的地图是怎么做到的。然后自己就也能做出来了。

豆奶 发表于 2015-9-15 06:49:56

{:32_795:}家里蹲的技术宅

KarmaJING 发表于 2015-9-15 12:04:32

{:32_777:}

MSUIT00 发表于 2015-9-15 14:34:58

不明觉厉

CTMM的sQee 发表于 2015-9-15 18:18:20

我有一个问题.如果要生成一个附带其他效果的武器在point_template里面也要填上与武器相关的点实体/实体吗

Ultimate 发表于 2015-9-15 18:32:58

CTMM的sQee 发表于 2015-9-15 18:18
我有一个问题.如果要生成一个附带其他效果的武器在point_template里面也要填上与武器相关的点实体/实体吗 ...

不太清楚你的意思,详细点,或者去群里@我,你知道我是谁233,Cyber....

在你回复的时候,我刚刚更新了所有被使用到的I/O。

乐乐 发表于 2017-6-27 14:29:53

{:27_127:}
页: [1]
查看完整版本: 【15-09-16更新】【地图实例教程】榴弹反射台+假DMM破坏效果