逻辑门

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

逻辑门是用于对多个布尔值(en)输入(en)执行逻辑运算并生成单一输出(en)的模型。在游戏中可用于实现如"仅当特定按钮组处于特定开关状态时才开门"等复杂逻辑。

实现原理

起源(en)引擎中,可通过组合logic_branch(en)logic_branch_listener(en)实体实现逻辑门功能:

1. **输入设备**(如按钮)状态存储:

  - 开(ON)状态 = 1 (TRUE)
  - 关(OFF)状态 = 0 (FALSE)
  - 通过logic_branch(en)存储布尔值

2. **输出设备**(如门)触发:

  - 接收logic_branch_listener(en)的输出信号
  - TRUE信号触发开门动作

3. **级联组合**:

  - 监听器的输出可接入新的logic_branch(en)
  - 实现多级逻辑门串联
Note.png注意:当监听多个分支时,若分支值未实际改变最终结果,监听器仍会更新输出。可通过中间分支实体隔离此行为。

标准逻辑门实现

每种逻辑门均通过logic_branch_listener(en)配置不同输出规则实现:

中继门

用于解决某些引擎版本中的分支异常问题:

输出 目标实体 目标输入 参数 延迟
OnAllFalse MyNewBranch SetValue 0 0
OnAllTrue MyNewBranch SetValue 1 0

与门(AND)

所有输入为TRUE时输出TRUE:

输出 目标实体 目标输入 参数
OnAllFalse branch_Z_N SetValue 0
OnAllTrue branch_Z_N SetValue 1
OnMixed branch_Z_N SetValue 0

或门(OR)

任意输入为TRUE时输出TRUE:

输出 目标实体 目标输入 参数
OnAllFalse branch_Z_N SetValue 0
OnAllTrue branch_Z_N SetValue 1
OnMixed branch_Z_N SetValue 1

非门(NOT)

输出与输入相反:

输出 目标实体 目标输入 参数
OnAllFalse branch_Z_N SetValue 1
OnAllTrue branch_Z_N SetValue 0

与非门(NAND)

非全TRUE时输出TRUE:

输出 目标实体 目标输入 参数
OnAllFalse branch_Z_N SetValue 1
OnAllTrue branch_Z_N SetValue 0
OnMixed branch_Z_N SetValue 1

或非门(NOR)

全FALSE时输出TRUE:

输出 目标实体 目标输入 参数
OnAllFalse branch_Z_N SetValue 1
OnAllTrue branch_Z_N SetValue 0
OnMixed branch_Z_N SetValue 0

异或门(XOR)

仅当单输入为TRUE时输出TRUE:

输出 目标实体 目标输入 参数
OnAllFalse branch_Z_N SetValue 0
OnAllTrue branch_Z_N SetValue 0
OnMixed branch_Z_N SetValue 1

同或门(XNOR)

输入相同时输出TRUE:

输出 目标实体 目标输入 参数
OnAllFalse branch_Z_N SetValue 1
OnAllTrue branch_Z_N SetValue 1
OnMixed branch_Z_N SetValue 0

参见