背景:
这篇文章是专门来讲解起源引擎中Entity的I/O system,如果你不是地图开发者或者是插件开发者,可能会听的一头雾水。但是如果你恰好有兴趣,欢迎一起讨论。
如果你觉得有讲得不对的地方,欢迎一起讨论
资源:
我创建了一个地图,专门用来做这次测试:https://steamcommunity.com/sharedfiles/filedetails/?id=3221309888
内容讲解:
地图中,当前button_0的Output/Input状态:
下面重点讲一下FireUser1,OnUser1,AddOutput这几个名词
注意:这几个知识对于初学者来说非常难理解,可以先看关于I/O system 的V社官方文档:Category:IO System - Valve Developer Community (valvesoftware.com)
OnUser1它是一个条件(contition),这个条件在世界中产生了User1信号(也即是某个entity执行了FireUser1的命令)的时候被满足。在下面的例子中,User1这个信号是被logic_auto发出的,是它执行了FireUser1的命令
FireUser1 和 AddOutput(这个input可以看这篇文章:The Input named AddOutput | TF2Maps.net,说的非常详细)。 他们2个都是被entity执行的命令。其中AddOutput比较难以理解,简单说一个entity可以通过执行AddOutput命令,来为另外一个entity添加一个条件,至于AddOutput具体的parameter要怎么写,可以继续往下看
logic_auto 在 接收到一个MapSpawn的event之后,自己的OnMapSpawn条件被满足,然后执行一个FireUser1的命令
dummy_0 由于 logic_auto 执行了一个FireUser1的命令,它收到了一个User1信号,自己的OnUser1的条件被满足,因此执行一个AddOutput命令,这个AddOutput命令可以为door_0 entity添加一个output的命令。
door_0 entity被dummy_0 enity通过AddOutput命令,添加的的这个新的output命令是为了让 door_0 entity 在接收到User1信号时(也就是door_0的OnUser1条件被满足),执行StartGlowing命令,发光效果在2秒后发生,StaringGlowing的这个命令可以被多次执行。
在整个世界中,User1的这个信号同时被dummy_0 和 door_0所接收,并且满足他们各自的OnUser1条件,其中的差别在于door_0的OnUser1这个条件是由dummy_0 在接收到User1信号之后才创建的。
- logic_auto 发送 User1 信号
- dummy_0 接收到User1信号后,通过AddOutput命令,为door_0创造了一个名为OnUser1的条件
- door_0 在整个世界也会接收到User1信号(由logic_auto发出),因此它会在接收到User1信号的时候(就是满足了OnUser1),执行StartGlowing的命令(也就是发光)
最终整体效果是:
- 服务器地图加载完成,2秒钟之后,门(door_0)这个entity会发光
- 当按钮被击中,门会发光
- 当门被击中,门将停止发光