Home
Development Environment

Interaction 개요

상호 작용이 가능한 물체와 상호 작용할 때에 맞추어 기능을 구현할 수 있습니다.

Viven Grabbable Module

플레이어가 상호작용하기 위한 기본적인 기능을 제공합니다.
GrabbableModule은 네트워크를 통해 RigidBody를 동기화합니다. 추가적인 데이터를 동기화하기 위해서는 VivenBehaviour에서 RPC를 사용해 동기화 합니다.
GrabbableModule은 다음과 같은 기능을 제공합니다.
Grab 모드 : 물체를 잡으면 Grab 모드로 전환됩니다.
Place 모드 : Place 모드를 선택하면 배치 모드로 전환됩니다. 배치모드에서는 이벤트가 불리지 않습니다.
HoldAction과 ClickAction을 같이 사용할 경우 실행 순서를 보장할 수 없습니다. 두 이벤트 종류를 같이 사용하는 것은 권장되지 않습니다.
GrabbableModule을 포함한 게임 오브젝트는 상호작용 과정에서 Layer가 변경됩니다. Layer 변경을 방지하려면 excludeLayerObjects 에 등록해주세요.

Grab 모드

플레이어는 물체를 손에 잡고 이동할 수 있습니다. 물체를 손에 잡기 시작한 순간 부터 Grab모드가 시작됩니다.
Grab 이 가능한 물체는 Outline이 주황색으로 활성화됩니다.
Grab 모드를 시작하는 방법은 다음과 같습니다.
PC : 물체를 바라보고 마우스 좌클릭
VR : 물체를 손에 대고 Grip버튼 클릭
Grab 모드에서는 액션 버튼을 눌러 기능을 사용할 수 있습니다.
Grabbable Event에 따라 다양한 기능들을 사용할 수 있습니다.
Release 버튼을 누르면 오브젝트를 내려놓거나 던질 수 있습니다. RigidBodyControlModule의 PhysicsType이 PhysicsType.Physics 가 아닌 경우 던지기는 동작하지 않습니다.

Place 모드

오브젝트를 원하는 위치에 배치하거나 다른 오브젝트에 붙일 수 있습니다.
Place 모드를 시작하는 방법은 다음과 같습니다.
PC : 물체를 바라보고 마우스 우클릭
VR : 물체를 손에 대고 Trigger버튼 클릭
Place에서는 VObject로 생성한 오브젝트를 삭제할 수 있습니다. 맵에 포함된 오브젝트는 삭제할 수 없습니다.

Fields

objectGrabType
물체를 잡았을 때, 해당 물체의 Rigidbody 상태를 결정합니다.
Kinematic : 물체가 충돌 등 물리학의 영향을 받지 않습니다.
Velocity : 물체가 물리학의 영향을 받습니다.
parentToHandOnGrab
해당 값이 true이면, 물체를 잡았을 때 물체의 parent가 interactor가 됩니다.
longClickTimeThreshold
물체를 잡았을 때 실행 가능한 액션은 액션 버튼을 짧게 눌렀을 때, 길게 눌렀을 때로 두 가지가 있습니다. 해당 값을 설정하여 길게 누른다의 기준을 설정할 수 있습니다.
예를 들어, 값이 1.5이면 액션 버튼을 1.5초 이상 눌러야 길게 눌렀을 때의 액션이 실행됩니다.
placePivot
배치 모드인 물체를 벽에 가져다 댔을 때, 물체가 벽에 붙는 축을 결정할 수 있습니다. 기본 값은 Vector3.up입니다.
grabPoints
물체를 잡을 때, 물체가 잡힐 위치를 커스텀하게 결정할 수 있습니다. grab point가 없으면 잡았을 때의 위치로 잡힙니다.
vivenAttachPoints
해당 오브젝트에 붙어 있는 모든 attach points입니다.

Grabbable Event Function

onGrab
물체를 잡았을 때 발동합니다.
function onGrab(interactor) interactor.InteractingInteractable.Transform:Translate(Vector(0,1,0)) -- 현재 인터랙션 중인 Intractable의 Transform을 조정함. end
Lua
복사
onRelease
물체를 놓았을 때 발동합니다.
function onRelease(interactor) interactor.InteractingInteractable.Transform:Translate(Vector(0,1,0)) -- 현재 인터랙션 중인 Intractable의 Transform을 조정함. end
Lua
복사
objectShortClickActionStart
물체를 잡고 있는 채로 짧은 클릭을 하였을 때 발동합니다.
function objectShortClickActionStart(interactor) -- 짧은 클릭을 했을 때 발동합니다. end
Lua
복사
objectLongClickActionStart
물체를 잡고 있는 채로 길게 클릭을 하였을 때 발동합니다. 길게 클릭의 기준은 longClickTimeThreshold 으로 결정됩니다.
function objectLongClickActionStart(interactor) -- 길게 클릭을 했을 때 발동합니다. end
Lua
복사
objectLongClickActionEnd
물체를 잡고 있는 채로 길게 클릭을 하고 뗐을 때 발동합니다.
function objectLongClickActionEnd(interactor) -- 긴 클릭을 멈추었을 때 발동합니다. end
Lua
복사

Viven Sittable

해당 컴포넌트를 붙인 물체에 앉을 수 있습니다. (PC 모드에서만 가능)
앉기를 실행하면, 캐릭터가 해당 Transform으로 이동 후 앉는 모션을 취합니다. 앉은 캐릭터는 이동할 수 없고, Yaw 회전만 가능합니다.
플레이어는 앉은 상태에서 다른 Grabbable 오브젝트를 잡거나 상호작용할 수 있습니다.
TwozSittable은 추후 변경될 예정입니다.
vivenSitPoint
캐릭터가 앉는 모션을 취하기 전 해당 위치로 이동 후 앉습니다.

Viven Attach Point

해당 물체에 다른 물체를 붙일 때 사용하는 컴포넌트입니다.
오브젝트를 붙일 수 있는 지점을 나타냅니다.
VivenAttachPointGrabbableModule컴포넌트가 붙어 있는 오브젝트의 hierarchy 내에만 붙일 수 있으며, 마찬가지로 붙여지는 오브젝트도 GrabbableMoudle컴포넌트를 포함하고 있어야 합니다.
VivenAttachPointCollider를 기반으로 동작합니다.
attachablePrefabs와 notAttachablePrefabs는 VObject 빌드 시 ContentId를 사용해 화이트리스트, 블랙리스트로 사용됩니다. 둘 다 설정되어 있는 경우 attachablePrefabs 를 우선합니다.
예를 들어, 활 오브젝트에는 화살 오브젝트 만을 붙이고 싶은 경우 attachablePrefabs에 화살 오브젝트의 ContentId를 입력합니다.
attachablePrefabs
해당 attach point에 붙일 수 있는 오브젝트의 ContentId list. 기본적으로 모든 오브젝트를 붙일 수 있습니다.
notAttachablePrefabs
해당 attach point에 붙일 수 없는 오브젝트의 ContentId list입니다.