Skip to main content

Grabbable(抓握)组件

Grabbable 组件介绍

“Grabbable 是个复杂的东西” —— AlexFromAlaska

Grabbable(可抓取)组件允许你抓取其所附着的任意插槽(Slot),前提是该物体必须拥有某种类型的 Collider(碰撞体)。

用法

属性名称 类型 描述
ReparentOnRelease
(释放时重置父级)
Bool 当物体被放下时,将其父级重置为 _lastParent 的值,而不是 Root(世界根节点)。*
PreserveUserSpace
(保留用户空间)
Bool 物体将被重置父级到 Local User Space(本地用户空间)。*
DestroyOnRelease
(释放时销毁)
Bool 该组件附着的物体在被放下时会被销毁。
GrabPriority
(抓取优先级)
Int 决定抓取的优先顺序(数值越高优先级越高)。
GrabPriorityWhenGrabbed
(被抓取时的优先级)
Nullable<Int> (可选)当物体已经被抓取时更改其抓取优先级。用于处理当物体可能被其他玩家“抢夺”时的不同行为逻辑。
CustomCanGrabCheck
(自定义抓取检查)
GrabCheck 在 Resonite 内部不可用。需要 Mod 才能与 Sync Delegates 交互。
EditModeOnly
(仅编辑模式)
Bool 决定此物体是否仅在 Edit Mode(编辑模式)下可被抓取。
AllowSteal
(允许抢夺)
Bool 允许其他用户抓取该组件附着的物体(即便它正被别人拿着)。就像夺旗模式里的旗帜一样。
DropOnDisable
(禁用时掉落)
Bool 当此组件被禁用时,父级 Slot 将被强制放下。
ActiveUserFilter
(活跃用户过滤器)
ActiveUserHandling 根据当前的活跃用户(如果有),更改此组件是否可被抓取。
OnlyUsers
(仅限用户)
List<UserRef> 允许抓取此物体的特定用户白名单。
Scalable
(可缩放)
Bool 允许通过双手抓取来缩放物体。
Receivable
(可接收)
Bool 允许该物体被接收(例如放入库存或插槽)。
AllowOnlyPhysicalGrab
(仅允许物理抓取)
Bool 仅允许通过物理接触抓取物体——不允许远程(激光)抓取。
_grabber Grabber 自动赋值,当前正在抓取此组件的 Grabber。
_lastParent Slot 自动赋值,此 Slot 上一次的父级。用于在松手时(如果允许)将 Slot 放回原处。
_lastParentIsUserSpace Bool 自动赋值,上一个父级 Slot 是否为抓取者的用户空间 Slot。
__legacyActiveUserRootOnly Bool 自动赋值,遗留字段,请勿使用。建议使用 ActiveUserFilter

行为机制

ReparentOnReleasePreserveUserSpace 以及任何 Grabbable extensions(可抓取扩展,例如 GrabbableReparentBlock)之间的交互逻辑非常复杂。

当物体被释放(松手)时,系统将按以下顺序进行评估:

  1. 如果 ReparentOnRelease 为真(True),Slot 的父级将被设置为 _lastParent 中的值。
  2. 如果 PreserveUserSpace_lastParentIsUserSpace 均为真,Slot 的父级将被设置为 Local User Space(本地用户空间)。
  3. 如果在层级结构中,该组件上方存在 IGrabbable(例如 GrabbableReparentBlock),且处于该块指定的 MaxDepth 范围内,Slot 的父级将被设置为 Local User Space。
  4. 否则,Slot 的父级将被设置为 Root(世界根节点)。

注意: 即使 Scalable 布尔值为 False,你仍然可以通过其他方式驱动 Grabbable 对象的缩放。

示例

暂无示例。

参见

  • IGrabbable:列出了行为类似但不完全相同的可抓取类型列表。