激活交互的类型 (Activate Type Interactions)

“激活交互的类型 (Activate Type Interactions)”可能是所有的可交互对象中,通用性最强的。“激活交互的类型”使用了FPEInteractableActivateScript组件。

在“激活交互的类型”中,我们可以让某些交互变成:需要玩家的库存中(或者手上)持有对应的物品,才能够成功进行交互。

例如:一扇门可能需要钥匙,才能被打开。一台机器可能需要一袋面粉,才能制作面包。一个点唱机,可能需要2个硬币,才能播放。

ActivateInventoryRequirements.jpg

变量名———————— 变量名中文翻译———————— 说明
Require Inventory Item 需要库存中的物品 如果为true,将需要玩家的库存中有对应的物品,才能进行交互。如果为false,则不需要使用库存中的物品,就可以进行交互。
Required Item Type 需要的物品的类型 [这个变量,只有在Require Inventory Item变量为true的时候,才有效]
如果想要成功的和这个对象进行交互,需要玩家持有什么类型的物品?(例如:KEYCARD(密码卡片),BATTERY(电池)等)
Required Inventory Quantity 需要的物品的数量 [这个变量,只有在Require Inventory Item变量为true的时候,才有效]
需要多少个物品(Required Item Type),才能够和这个对象进行交互? (例如:1个密码卡片,3个电池等)
Required To Be In Hand 是否需要拿在手上 这里有3个选项:
IN_HAND:在激活交互时,物品必须拿在手上。
IN_INVENTORY:在激活交互时,物品必须在仓库里。
IN_HAND_OR_INVENTORY(默认值):在激活交互时,物品既可以在玩家的手中,也可以在他们的库存中。这是最灵活的选择。
Remove On Use 使用后是否移除 如果为true,当和这个对象进行交互后,就会从玩家的库存中(或者手中)销毁这个物品。 (例如:对于一个需要钥匙的门来说,你可能希望打开门之后,钥匙还在,所以这个变量应该为false。但是,对于一个榨汁机来说,你放进5个苹果,那么得到苹果汁的时候,苹果应该被消耗了,因此这个变量应该为true。)
注意:
请一定要重视:一个对象对物品的需求。
例如,如果你有2个锁着的门,而且这2个门需要不同钥匙的来解锁。
那么,如果一个门需要玩家把钥匙拿在手上才能够打开,那么另外一个门也应该这样做,因为这样可以保持游戏玩法的一致性。 
同样,如果你需要玩家通过手持钥匙来解锁门,那么必须保证这个"钥匙",能够被玩家拿在手上。
(请参阅Inventory Item documentation(库存中的物品)章节,里面有"允许玩家将物品拿在手上"的相关选项,可以进行设置。)


当激活一个对象的时候,有3种事件触发类型可以选择。你可以在FPEInteractableActivateScript脚本中Event Fire Type变量中,设置激活的类型:

Event Fire Type变量的取值———————— 取值的中文翻译———————— 说明
ONCE 一次 这个对象,只能激活一次。
这会让“激活事件(Activation event)”只能发生一次。这对于一些单向的事件来说,非常的有用。 (例如:剪断一根绳子,砸碎一面玻璃等。玻璃不能被重复的砸碎,所以一般砸碎玻璃只能发生一次)
EVERYTIME 每次 每次去激活这个对象,这个对象都能触发“激活事件”。
这适用于可以重复执行的操作(例如击打一个沙袋。通常来说,只要你愿意,你可以击打一个沙袋无数次。)
TOGGLE 开关 这个对象,有2个状态:打开、关闭。
当对象被激活的时候,Toggle On(开关打开)事件和Toggle Off(开关关闭)事件,将会切换着被触发。(例如:我们和一盏灯进行交互,当这个灯是关着的时候,我们点击这个灯,灯会被打开灯。当这个灯是打开的时候,我们点击这个灯,这个灯会被关闭。)


当一个对象被激活的时候,会根据这个Event Fire Type变量的值,触发FPEInteractableActivateScript脚本中的某些事件:

事件———————— 事件的中文翻译———————— 说明
Shared 'Activation' and 'Toggle On' Event 激活事件 不管Event Fire Types选项的值是什么,都会触发这个选项。
当激活一个对象时,就会触发对象身上的这个事件。或者当打开一个开关的时候,也会触发这个事件。
如果Event Fire Types选项的值为TOGGLE,那么这个事件就是“Toggle On”事件。如果Event Fire Types选项的值是ONCE或EVERYTIME,那么这个事件就是“Activation”事件。
(例如:“demoSwitch”预制体使用的是EVERYTIME事件触发类型,并且上面设置了“Activation”事件,当触发这个事件时,会播放声音、动画和打开灯光。)
Shared 'Activation Failure' Event 激活失败事件 不管Event Fire Types选项的值是什么,都会触发这个选项。
当尝试激活一个需要物品才能交互的对象时,并且玩家的库存中(或者手上)没有所需的物品时,就会触发这个事件。
TOGGLE-specific 'Toggle Off' Event 关闭开关事件 只有当Event Fire Type选项的值为TOGGLE时, 当开关关闭(Toggle Off)时,才会触发这个事件。


如果你想更加直观的这些事件,你可以在DemoPrefabs文件夹中,找到一个叫做“demoFanMachine”的预制体。

DemoFanMachineInspectorEvents.jpg

注意:
如果对象的事件触发类型为TOGGLE,那么只有在物品激活成功时,才会发生Toggle Off事件。
例如,如果激活一个对象,这个对象需要密码卡片才能激活,那么在第一次成功激活之前,对象的状态不是“Toggle On”。
只有在第一次成功激活后,对象的状态才会变为“Toggle On”,然后在下一次激活时变为'Toggle Off'。
这是一个复杂的行为,具体请参阅demoFanMachine预制体。


在FPEInteractableActivateScript组件中,有一些只能用于TOGGLE类型的选项。你应该配置下这些选项,以保证能够Toggle能够正常的运行。

SpecialToggleOptions.jpg

变量名———————— 变量名的中文翻译———————— 说明
Toggle Off Requires Inventory 关闭开关需要物品 当关闭一个开关的时候,是否需要物品?
如果这个选项为true,那么在本章最开始介绍的“Required Inventory”选项的部分,也将应用于Toggle Off(当开关关闭的时候)。
例如,如果有一扇门,门上有一个锁,门锁有两个状态:锁住和没有锁住。如果玩家要锁住门,可能需要钥匙。
Toggle On Interaction String 准备打开开关时的交互字符串 当对象的状态为Toggle Off(开关关闭)时,这个变量的值会应用到Interaction String选项。(比如:灯光如果是打开状态时,显示“关闭灯光”)
Toggle Off Interaction String 准备关闭开关时的交互字符串 当对象的状态切换为Toggle On(开关关闭)时,这个变量的值会应用到Interaction String选项。(比如:灯光如果是关闭状态时,显示“打开灯光”)
Toggle On At Start 在初始化时打开开关 如果这个选项为true,那么会在场景初始化(Start)时,触发Toggle On事件。
注意:如果这个选项为true,那么会忽略对库存中的物品的需求。Toggle On事件只是单纯的被触发。
Toggle Off At Start 在初始化时关闭开关 如果这个选项为true,那么会在场景初始化(Start)时,触发Toggle Off事件。
注意:如果这个选项为true,那么会忽略对库存中的物品的需求。Toggle Off事件只是单纯的被触发。
Fire Toggle Events On Load Game 在加载游戏时,触发Toggle事件 如果为true(默认值),则在加载游戏时触发Toggle事件,从而恢复保存时的开关状态。
例如:打开电灯的开关,然后保存游戏。如果这个选项的值为true,那么会在加载游戏时,再次触发“Toggle事件”,从而自动打开电灯的开关。
注意:
默认情况下,只能保存和加载“激活交互的类型”的基础状态。
例如,如果你在保存游戏时,打开场景中的开关,那么在加载游戏时,将会恢复开关的状态(将开关恢复到保存游戏时的打开状态)。
但是,如果想从激活事件中保存其他的数据,那么可能需要你做一些额外的工作。
例如,如果激活事件产生了一个“可拾取道具(Pickup)”,那么在保存游戏的时候,这个可视区道具将会被自动保存,因为“可拾取道具(Pickup)”会自动被保存。
但是,如果你的激活事件发生了过场动画或墙壁破裂,你需要自己保存这些状态。
有关更多详细信息,请参阅Save/Load System documentation(保存/加载系统)章节的文档,也可以查看demoFanMachine预制体。

results matching ""

    No results matching ""