diff --git a/Assets/Gothic-VR/Resources/VR/Prefabs/VR - Player XRI.prefab b/Assets/Gothic-VR/Resources/VR/Prefabs/VR - Player XRI.prefab
index 7a225ccce..2a7708b59 100644
--- a/Assets/Gothic-VR/Resources/VR/Prefabs/VR - Player XRI.prefab
+++ b/Assets/Gothic-VR/Resources/VR/Prefabs/VR - Player XRI.prefab
@@ -38,6 +38,186 @@ Transform:
- {fileID: 1397900127559310352}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1648582915323492552
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7590858937247465678}
+ - component: {fileID: 3406680570543717621}
+ - component: {fileID: 6819593342976840041}
+ m_Layer: 8
+ m_Name: Hand Placeholder
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &7590858937247465678
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1648582915323492552}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.04, y: 0.04, z: 0.04}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6788907536904435118}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &3406680570543717621
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1648582915323492552}
+ m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &6819593342976840041
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1648582915323492552}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_MaskInteraction: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1779402344543698678
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5574353106735583174}
+ - component: {fileID: 6781701994134242995}
+ - component: {fileID: 8195154184858830657}
+ m_Layer: 8
+ m_Name: Hand Placeholder
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5574353106735583174
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1779402344543698678}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.04, y: 0.04, z: 0.04}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 5451842862611423810}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &6781701994134242995
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1779402344543698678}
+ m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &8195154184858830657
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1779402344543698678}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_MaskInteraction: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &3580888346999583535
GameObject:
m_ObjectHideFlags: 0
@@ -345,7 +525,7 @@ Transform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6001075864142468059}
- - {fileID: 4353545054853201903}
+ - {fileID: 6788907536904435118}
m_Father: {fileID: 7905090655299301591}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7612709134508012581
@@ -666,7 +846,7 @@ MonoBehaviour:
_fadeSpeed: 6
_teleportDistance: 1
_distanceIterations: 5
---- !u!1 &4731101190965350723
+--- !u!1 &5458298503362937332
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -674,43 +854,279 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 6347680414218280407}
- - component: {fileID: 1007848101285802167}
- - component: {fileID: 4875168347225730959}
- - component: {fileID: 6723761090415705728}
+ - component: {fileID: 907255186901895709}
+ - component: {fileID: 3084357974999831216}
+ - component: {fileID: 2422468784815213386}
+ - component: {fileID: 2509143315430069749}
m_Layer: 8
- m_Name: UI Ray
+ m_Name: LineVisual
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &6347680414218280407
+--- !u!4 &907255186901895709
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4731101190965350723}
+ m_GameObject: {fileID: 5458298503362937332}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 4055452250844519603}
+ m_Father: {fileID: 5451842862611423810}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!120 &1007848101285802167
+--- !u!114 &3084357974999831216
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5458298503362937332}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 80e353695beb436ab39a90d9ecefaee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_LineRenderer: {fileID: 2422468784815213386}
+ m_CurveVisualObject: {fileID: 9092921936286841604}
+ m_OverrideLineOrigin: 1
+ m_LineOriginTransform: {fileID: 5451842862611423810}
+ m_VisualPointCount: 20
+ m_MaxVisualCurveDistance: 30
+ m_RestingVisualLineLength: 0.25
+ m_LineDynamicsMode: 1
+ m_RetractDelay: 1
+ m_RetractDuration: 1
+ m_ExtendLineToEmptyHit: 0
+ m_ExtensionRate: 10
+ m_EndPointExpansionRate: 10
+ m_ComputeMidPointWithComplexCurves: 0
+ m_SnapToSelectedAttachIfAvailable: 1
+ m_SnapToSnapVolumeIfAvailable: 1
+ m_CurveStartOffset: 0.015
+ m_CurveEndOffset: 0.005
+ m_CustomizeLinePropertiesForState: 1
+ m_LinePropertyAnimationSpeed: 8
+ m_NoValidHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.25
+ m_AdjustWidth: 1
+ m_StartWidth: 0.003
+ m_EndWidth: 0.003
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 1, g: 1, b: 1, a: 0.5019608}
+ key2: {r: 0, g: 0, b: 0, a: 0.2509804}
+ key3: {r: 0, g: 0, b: 0, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 65535
+ ctime2: 0
+ ctime3: 0
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 193
+ atime1: 8192
+ atime2: 32768
+ atime3: 55705
+ atime4: 65342
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 2
+ m_NumAlphaKeys: 4
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_UIHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.5
+ m_AdjustWidth: 1
+ m_StartWidth: 0.004
+ m_EndWidth: 0.004
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 1, g: 0.78431374, b: 0.5686275, a: 0.49019608}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 0, g: 0, b: 0, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 16384
+ ctime2: 65535
+ ctime3: 0
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 8192
+ atime2: 32768
+ atime3: 65535
+ atime4: 0
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 4
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_UIPressHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.5
+ m_AdjustWidth: 1
+ m_StartWidth: 0.003
+ m_EndWidth: 0.003
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 0.5686275, g: 0.78431374, b: 1, a: 0.627451}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 1, g: 1, b: 1, a: 0.78431374}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 32768
+ ctime2: 65535
+ ctime3: 65535
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 8192
+ atime2: 26214
+ atime3: 42598
+ atime4: 65535
+ atime5: 65535
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 5
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_SelectHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.5
+ m_AdjustWidth: 1
+ m_StartWidth: 0.003
+ m_EndWidth: 0.003
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 0.5686275, g: 0.78431374, b: 1, a: 0.627451}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 1, g: 1, b: 1, a: 0.78431374}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 32768
+ ctime2: 65535
+ ctime3: 65535
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 8192
+ atime2: 26214
+ atime3: 42598
+ atime4: 65535
+ atime5: 65535
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 5
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.75
+ m_HoverHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.25
+ m_AdjustWidth: 1
+ m_StartWidth: 0.004
+ m_EndWidth: 0.004
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 1, g: 0.78431374, b: 0.5686275, a: 0.49019608}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 1, g: 1, b: 1, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 16384
+ ctime2: 65535
+ ctime3: 65535
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 13878
+ atime2: 32768
+ atime3: 65535
+ atime4: 0
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 4
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_RenderLineInWorldSpace: 1
+ m_SwapMaterials: 0
+ m_BaseLineMaterial: {fileID: 0}
+ m_EmptyHitMaterial: {fileID: 0}
+--- !u!120 &2422468784815213386
LineRenderer:
serializedVersion: 3
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4731101190965350723}
- m_Enabled: 1
+ m_GameObject: {fileID: 5458298503362937332}
+ m_Enabled: 0
m_CastShadows: 0
- m_ReceiveShadows: 0
+ m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 0
@@ -726,7 +1142,7 @@ LineRenderer:
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
@@ -749,9 +1165,7 @@ LineRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
- m_Positions:
- - {x: 0, y: 0, z: 0}
- - {x: 0, y: 0, z: 1}
+ m_Positions: []
m_Parameters:
serializedVersion: 3
widthMultiplier: 1
@@ -760,7 +1174,7 @@ LineRenderer:
m_Curve:
- serializedVersion: 3
time: 0
- value: 1
+ value: 0.012002945
inSlope: 0
outSlope: 0
tangentMode: 0
@@ -800,8 +1214,8 @@ LineRenderer:
m_ColorSpace: -1
m_NumColorKeys: 2
m_NumAlphaKeys: 2
- numCornerVertices: 0
- numCapVertices: 2
+ numCornerVertices: 8
+ numCapVertices: 8
alignment: 0
textureMode: 0
textureScale: {x: 1, y: 1}
@@ -809,51 +1223,103 @@ LineRenderer:
generateLightingData: 0
m_UseWorldSpace: 1
m_Loop: 0
- m_ApplyActiveColorSpace: 1
---- !u!114 &4875168347225730959
-MonoBehaviour:
+ m_ApplyActiveColorSpace: 0
+--- !u!210 &2509143315430069749
+SortingGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4731101190965350723}
+ m_GameObject: {fileID: 5458298503362937332}
m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 6803edce0201f574f923fd9d10e5b30a, type: 3}
- m_Name:
- m_EditorClassIdentifier: Unity.XR.Interaction.Toolkit::UnityEngine.XR.Interaction.Toolkit.Interactors.XRRayInteractor
- m_InteractionManager: {fileID: 0}
- m_InteractionLayers:
- m_Bits: 0
- m_Handedness: 2
- m_AttachTransform: {fileID: 0}
- m_KeepSelectedTargetValid: 1
- m_DisableVisualsWhenBlockedInGroup: 1
- m_StartingSelectedInteractable: {fileID: 0}
- m_StartingTargetFilter: {fileID: 0}
- m_AutoFindParentInteractableInHierarchy: 0
- m_ParentInteractableObject: {fileID: 0}
- m_HoverEntered:
- m_PersistentCalls:
- m_Calls: []
- m_HoverExited:
- m_PersistentCalls:
- m_Calls: []
- m_SelectEntered:
- m_PersistentCalls:
- m_Calls: []
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 30005
+ m_SortAtRoot: 0
+ m_Sort3DAs2D: 0
+--- !u!1 &5636525272695460430
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6788907536904435118}
+ - component: {fileID: 1096273261276596531}
+ - component: {fileID: 7902857795092302613}
+ - component: {fileID: 1774130759478450103}
+ - component: {fileID: 3337548623410234358}
+ - component: {fileID: 6472663756327604934}
+ - component: {fileID: 3337253397848854983}
+ m_Layer: 8
+ m_Name: Near-Far Interactor
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &6788907536904435118
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5636525272695460430}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 6160204099483398844}
+ - {fileID: 7590858937247465678}
+ m_Father: {fileID: 2704301485295035116}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1096273261276596531
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5636525272695460430}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 25a07ef133a37d140a87cdf1f1c75fdf, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_InteractionManager: {fileID: 6227812651718498198}
+ m_InteractionLayers:
+ m_Bits: 1
+ m_Handedness: 1
+ m_AttachTransform: {fileID: 0}
+ m_KeepSelectedTargetValid: 1
+ m_DisableVisualsWhenBlockedInGroup: 1
+ m_StartingSelectedInteractable: {fileID: 0}
+ m_StartingTargetFilter: {fileID: 6472663756327604934}
+ m_AutoFindParentInteractableInHierarchy: 0
+ m_ParentInteractableObject: {fileID: 0}
+ m_HoverEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ m_HoverExited:
+ m_PersistentCalls:
+ m_Calls: []
+ m_SelectEntered:
+ m_PersistentCalls:
+ m_Calls: []
m_SelectExited:
m_PersistentCalls:
m_Calls: []
m_StartingHoverFilters: []
m_StartingSelectFilters: []
m_SelectInput:
- m_InputSourceMode: 0
+ m_InputSourceMode: 2
m_InputActionPerformed:
m_Name: Select
m_Type: 1
m_ExpectedControlType:
- m_Id: b471e55a-b3c9-4672-958c-b80bb6d9695e
+ m_Id: 2491b664-3d4e-4f20-a7ae-ee1861d845f2
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
@@ -862,13 +1328,13 @@ MonoBehaviour:
m_Name: Select Value
m_Type: 0
m_ExpectedControlType: Axis
- m_Id: 69fcf19e-30fe-4837-a9c7-fd0348702802
+ m_Id: fc42dacc-33eb-41ec-9c17-d242ac6b0c5b
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReferencePerformed: {fileID: 0}
- m_InputActionReferenceValue: {fileID: 0}
+ m_InputActionReferencePerformed: {fileID: -7966444640328253993, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferenceValue: {fileID: -7989615598897241686, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualPerformed: 0
m_ManualValue: 0
@@ -878,12 +1344,12 @@ MonoBehaviour:
m_ManualQueueValue: 0
m_ManualQueueTargetFrame: 0
m_ActivateInput:
- m_InputSourceMode: 0
+ m_InputSourceMode: 2
m_InputActionPerformed:
m_Name: Activate
m_Type: 1
m_ExpectedControlType:
- m_Id: 36a6bae6-ef66-428d-9799-25f86174d382
+ m_Id: 77660b9e-6bbe-4740-b80f-1fea8d0f59e1
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
@@ -892,13 +1358,13 @@ MonoBehaviour:
m_Name: Activate Value
m_Type: 0
m_ExpectedControlType: Axis
- m_Id: 46d346f2-2d53-4246-b8f4-5a6820fa0027
+ m_Id: 94568f52-c27a-47fc-a190-5e3b17572929
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReferencePerformed: {fileID: 0}
- m_InputActionReferenceValue: {fileID: 0}
+ m_InputActionReferencePerformed: {fileID: -8244156659083291672, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferenceValue: {fileID: -8654792680252043297, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualPerformed: 0
m_ManualValue: 0
@@ -944,61 +1410,29 @@ MonoBehaviour:
m_HapticHoverCancelIntensity: 0
m_HapticHoverCancelDuration: 0
m_AllowHoverHapticsWhileSelecting: 1
- m_LineType: 0
- m_BlendVisualLinePoints: 1
- m_MaxRaycastDistance: 30
- m_RayOriginTransform: {fileID: 0}
- m_ReferenceFrame: {fileID: 0}
- m_Velocity: 16
- m_Acceleration: 9.8
- m_AdditionalGroundHeight: 0.1
- m_AdditionalFlightTime: 0.5
- m_EndPointDistance: 30
- m_EndPointHeight: -10
- m_ControlPointDistance: 10
- m_ControlPointHeight: 5
- m_SampleFrequency: 20
- m_HitDetectionType: 0
- m_SphereCastRadius: 0.1
- m_ConeCastAngle: 6
- m_LiveConeCastDebugVisuals: 0
- m_RaycastMask:
- serializedVersion: 2
- m_Bits: 32
- m_RaycastTriggerInteraction: 1
- m_RaycastSnapVolumeInteraction: 1
- m_RaycastUIDocumentTriggerInteraction: 1
- m_HitClosestOnly: 0
- m_HoverToSelect: 0
- m_HoverTimeToSelect: 0.5
- m_AutoDeselect: 0
- m_TimeToAutoDeselect: 3
+ m_InteractionAttachController: {fileID: 7902857795092302613}
+ m_EnableNearCasting: 1
+ m_NearInteractionCaster: {fileID: 1774130759478450103}
+ m_NearCasterSortingStrategy: 1
+ m_SortNearTargetsAfterTargetFilter: 0
+ m_EnableFarCasting: 1
+ m_FarInteractionCaster: {fileID: 3337548623410234358}
+ m_FarAttachMode: 0
m_EnableUIInteraction: 1
- m_BlockInteractionsWithScreenSpaceUI: 0
m_BlockUIOnInteractableSelection: 1
- m_ManipulateAttachTransform: 1
- m_UseForceGrab: 0
- m_RotateSpeed: 180
- m_TranslateSpeed: 1
- m_RotateReferenceFrame: {fileID: 0}
- m_RotateMode: 0
m_UIHoverEntered:
m_PersistentCalls:
m_Calls: []
m_UIHoverExited:
m_PersistentCalls:
m_Calls: []
- m_EnableARRaycasting: 0
- m_OccludeARHitsWith3DObjects: 0
- m_OccludeARHitsWith2DObjects: 0
- m_ScaleMode: 0
m_UIPressInput:
m_InputSourceMode: 2
m_InputActionPerformed:
m_Name: UI Press
m_Type: 1
m_ExpectedControlType:
- m_Id: d0bfb5c4-7a68-4b72-9c10-aef78e3cacc5
+ m_Id: ded1ccb2-ff18-46c7-ade9-b80985fe2825
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
@@ -1007,13 +1441,13 @@ MonoBehaviour:
m_Name: UI Press Value
m_Type: 0
m_ExpectedControlType: Axis
- m_Id: 7e769f7f-e0f9-4408-8325-11f0df58fd7f
+ m_Id: d762660e-30e0-4a4d-8e2a-e6b553e03f11
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReferencePerformed: {fileID: 2665380231154864692, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
- m_InputActionReferenceValue: {fileID: 2562612067216775393, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferencePerformed: {fileID: -1689652814259620815, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferenceValue: {fileID: 6375731832589024377, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualPerformed: 0
m_ManualValue: 0
@@ -1028,264 +1462,145 @@ MonoBehaviour:
m_Name: UI Scroll
m_Type: 0
m_ExpectedControlType: Vector2
- m_Id: eb22c89e-e384-48d0-83e1-8b0b4a55deba
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: -711930659198068045, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: {x: 0, y: 0}
- m_TranslateManipulationInput:
- m_InputSourceMode: 2
- m_InputAction:
- m_Name: Translate Manipulation
- m_Type: 0
- m_ExpectedControlType: Vector2
- m_Id: cc26a325-b3b1-4ad6-9df9-44d1e4ebaa9a
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: {x: 0, y: 0}
- m_RotateManipulationInput:
- m_InputSourceMode: 2
- m_InputAction:
- m_Name: Rotate Manipulation
- m_Type: 0
- m_ExpectedControlType: Vector2
- m_Id: 0d936db2-a7d3-4d2b-b7bc-b344da544173
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: {x: 0, y: 0}
- m_DirectionalManipulationInput:
- m_InputSourceMode: 2
- m_InputAction:
- m_Name: Directional Manipulation
- m_Type: 0
- m_ExpectedControlType: Vector2
- m_Id: 3e8c45e8-765a-4b9d-9985-7e9199dcf134
+ m_Id: ef5cc4a5-b968-432c-9ae7-45e494178db0
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReference: {fileID: 0}
+ m_InputActionReference: {fileID: 8109287064717489457, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualValue: {x: 0, y: 0}
- m_ScaleToggleInput:
- m_InputSourceMode: 2
- m_InputActionPerformed:
- m_Name: Scale Toggle
- m_Type: 1
- m_ExpectedControlType:
- m_Id: df8a8838-2881-4d9d-8486-2bee7662d138
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionValue:
- m_Name: Scale Toggle Value
- m_Type: 0
- m_ExpectedControlType: Axis
- m_Id: b4f1baad-1223-4283-8143-09cce25bd3b7
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReferencePerformed: {fileID: 0}
- m_InputActionReferenceValue: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualPerformed: 0
- m_ManualValue: 0
- m_ManualQueuePerformed: 0
- m_ManualQueueWasPerformedThisFrame: 0
- m_ManualQueueWasCompletedThisFrame: 0
- m_ManualQueueValue: 0
- m_ManualQueueTargetFrame: 0
- m_ScaleOverTimeInput:
+--- !u!114 &7902857795092302613
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5636525272695460430}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 792f6c7eaa1a4b82abf8351559ac97eb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_TransformToFollow: {fileID: 6788907536904435118}
+ m_MotionStabilizationMode: 1
+ m_PositionStabilization: 0.25
+ m_AngleStabilization: 20
+ m_SmoothOffset: 0
+ m_SmoothingSpeed: 10
+ m_UseDistanceBasedVelocityScaling: 1
+ m_UseMomentum: 1
+ m_MomentumDecayScale: 1.25
+ m_MomentumDecayScaleFromInput: 5.5
+ m_ZVelocityRampThreshold: 0.3
+ m_PullVelocityBias: 1
+ m_PushVelocityBias: 1.25
+ m_MinAdditionalVelocityScalar: 0.05
+ m_MaxAdditionalVelocityScalar: 1.5
+ m_UseManipulationInput: 0
+ m_ManipulationInput:
m_InputSourceMode: 2
m_InputAction:
- m_Name: Scale Over Time
+ m_Name: Manipulation
m_Type: 0
m_ExpectedControlType: Vector2
- m_Id: 43f1d0ee-5981-4ed2-80bb-68e6a3c234d7
+ m_Id: 9914e1e2-77ba-43ae-8266-fd33d44c8a24
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReference: {fileID: 0}
+ m_InputActionReference: {fileID: -1031338271674280626, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualValue: {x: 0, y: 0}
- m_ScaleDistanceDeltaInput:
- m_InputSourceMode: 0
- m_InputAction:
- m_Name: Scale Distance Delta
- m_Type: 0
- m_ExpectedControlType: Axis
- m_Id: 90bba99f-cfe6-486e-8303-cd6bf7ffc87a
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: 0
---- !u!114 &6723761090415705728
+ m_ManipulationXAxisMode: 1
+ m_ManipulationYAxisMode: 2
+ m_CombineManipulationAxes: 0
+ m_ManipulationTranslateSpeed: 1
+ m_ManipulationRotateSpeed: 180
+ m_ManipulationRotateReferenceFrame: {fileID: 0}
+ m_EnableDebugLines: 0
+--- !u!114 &1774130759478450103
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4731101190965350723}
+ m_GameObject: {fileID: 5636525272695460430}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: e988983f96fe1dd48800bcdfc82f23e9, type: 3}
+ m_Script: {fileID: 11500000, guid: 48139a683d3b4ac3a37cd5d24f71acf1, type: 3}
m_Name:
- m_EditorClassIdentifier: Unity.XR.Interaction.Toolkit::UnityEngine.XR.Interaction.Toolkit.Interactors.Visuals.XRInteractorLineVisual
- m_LineWidth: 0.005
- m_OverrideInteractorLineLength: 1
- m_LineLength: 10
- m_AutoAdjustLineLength: 0
- m_MinLineLength: 0.5
- m_UseDistanceToHitAsMaxLineLength: 1
- m_LineRetractionDelay: 0.5
- m_LineLengthChangeSpeed: 12
- m_WidthCurve:
- serializedVersion: 2
- m_Curve:
- - serializedVersion: 3
- time: 0
- value: 1
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0
- outWeight: 0
- - serializedVersion: 3
- time: 1
- value: 1
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0
- outWeight: 0
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- m_SetLineColorGradient: 1
- m_ValidColorGradient:
+ m_EditorClassIdentifier:
+ m_CastOrigin: {fileID: 6788907536904435118}
+ m_EnableStabilization: 0
+ m_PositionStabilization: 0.25
+ m_AngleStabilization: 20
+ m_AimTargetObject: {fileID: 0}
+ m_PhysicsLayerMask:
serializedVersion: 2
- key0: {r: 1, g: 1, b: 1, a: 1}
- key1: {r: 1, g: 1, b: 1, a: 0.3}
- key2: {r: 0, g: 0, b: 0, a: 0}
- key3: {r: 0, g: 0, b: 0, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 65535
- ctime2: 0
- ctime3: 0
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 65535
- atime2: 0
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: -1
- m_NumColorKeys: 2
- m_NumAlphaKeys: 2
- m_InvalidColorGradient:
+ m_Bits: 1051840
+ m_PhysicsTriggerInteraction: 1
+ m_CastRadius: 0.1
+--- !u!114 &3337548623410234358
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5636525272695460430}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ef20135915079454985abea5a2ec8967, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_CastOrigin: {fileID: 6788907536904435118}
+ m_EnableStabilization: 1
+ m_PositionStabilization: 0.25
+ m_AngleStabilization: 20
+ m_AimTargetObject: {fileID: 1096273261276596531}
+ m_RaycastMask:
serializedVersion: 2
- key0: {r: 1, g: 1, b: 1, a: 0}
- key1: {r: 1, g: 1, b: 1, a: 0}
- key2: {r: 0, g: 0, b: 0, a: 0}
- key3: {r: 0, g: 0, b: 0, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 65535
- ctime2: 0
- ctime3: 0
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 65535
- atime2: 0
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: -1
- m_NumColorKeys: 2
- m_NumAlphaKeys: 2
- m_BlockedColorGradient:
+ m_Bits: 1051873
+ m_RaycastTriggerInteraction: 1
+ m_RaycastSnapVolumeInteraction: 1
+ m_RaycastUIDocumentTriggerInteraction: 1
+ m_TargetNumCurveSegments: 1
+ m_HitDetectionType: 2
+ m_CastDistance: 30
+ m_SphereCastRadius: 0.1
+ m_ConeCastAngle: 6
+ m_LiveConeCastDebugVisuals: 0
+--- !u!114 &6472663756327604934
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5636525272695460430}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 06d37e5228fbbc744a06dbbcbfa399a9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Gothic.VR::Gothic.VR.Interaction.Backends.Xri.XriLineOfSightFilter
+ _blockingLayers:
serializedVersion: 2
- key0: {r: 1, g: 1, b: 1, a: 0}
- key1: {r: 1, g: 1, b: 1, a: 0}
- key2: {r: 0, g: 0, b: 0, a: 0}
- key3: {r: 0, g: 0, b: 0, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 65535
- ctime2: 0
- ctime3: 0
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 65535
- atime2: 0
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: -1
- m_NumColorKeys: 2
- m_NumAlphaKeys: 2
- m_TreatSelectionAsValidState: 0
- m_SmoothMovement: 0
- m_FollowTightness: 10
- m_SnapThresholdDistance: 10
- m_Reticle: {fileID: 0}
- m_BlockedReticle: {fileID: 0}
- m_StopLineAtFirstRaycastHit: 1
- m_StopLineAtSelection: 0
- m_SnapEndpointIfAvailable: 1
- m_LineBendRatio: 0.5
- m_BendingEnabledInteractionLayers:
- m_Bits: 4294967295
- m_OverrideInteractorLineOrigin: 1
- m_LineOriginTransform: {fileID: 0}
- m_LineOriginOffset: 0
+ m_Bits: 1051713
+ _maxDistance: 10
+ _minCheckDistance: 0.15
+ _surfaceTolerance: 0.02
+--- !u!114 &3337253397848854983
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5636525272695460430}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dfa36fd411a0e614a83609318964c858, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Gothic.VR::Gothic.VR.Interaction.Backends.Xri.XriGrabberBridge
+ _nearGrabMargin: 0.05
--- !u!1 &5690067108025510331
GameObject:
m_ObjectHideFlags: 0
@@ -1429,7 +1744,7 @@ MonoBehaviour:
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
m_Version: 2
---- !u!1 &6676953773607633624
+--- !u!1 &6995813130144571658
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -1437,163 +1752,92 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 4353545054853201903}
- - component: {fileID: 6548728158081960086}
- - component: {fileID: 4801461948607133199}
- - component: {fileID: 3310644866045247143}
+ - component: {fileID: 7905090655299301591}
m_Layer: 8
- m_Name: UI Ray
+ m_Name: Camera Offset
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &4353545054853201903
+--- !u!4 &7905090655299301591
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6676953773607633624}
+ m_GameObject: {fileID: 6995813130144571658}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 2704301485295035116}
+ m_Children:
+ - {fileID: 3795310480892305868}
+ - {fileID: 2704301485295035116}
+ - {fileID: 4055452250844519603}
+ m_Father: {fileID: 1361426706454156200}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!120 &6548728158081960086
-LineRenderer:
- serializedVersion: 3
+--- !u!1 &7605250946350940930
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5451842862611423810}
+ - component: {fileID: 9092921936286841604}
+ - component: {fileID: 1382507949571466866}
+ - component: {fileID: 4320139648255297471}
+ - component: {fileID: 1489026597932994268}
+ - component: {fileID: 3191210277239289247}
+ - component: {fileID: 2750591488407108373}
+ m_Layer: 8
+ m_Name: Near-Far Interactor
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &5451842862611423810
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7605250946350940930}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 907255186901895709}
+ - {fileID: 5574353106735583174}
+ m_Father: {fileID: 4055452250844519603}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &9092921936286841604
+MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6676953773607633624}
- m_Enabled: 1
- m_CastShadows: 0
- m_ReceiveShadows: 0
- m_DynamicOccludee: 1
- m_StaticShadowCaster: 0
- m_MotionVectors: 0
- m_LightProbeUsage: 0
- m_ReflectionProbeUsage: 0
- m_RayTracingMode: 0
- m_RayTraceProcedural: 0
- m_RayTracingAccelStructBuildFlagsOverride: 0
- m_RayTracingAccelStructBuildFlags: 1
- m_SmallMeshCulling: 1
- m_ForceMeshLod: -1
- m_MeshLodSelectionBias: 0
- m_RenderingLayerMask: 1
- m_RendererPriority: 0
- m_Materials:
- - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_ReceiveGI: 1
- m_PreserveUVs: 0
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_StitchLightmapSeams: 1
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_GlobalIlluminationMeshLod: 0
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
- m_MaskInteraction: 0
- m_Positions:
- - {x: 0, y: 0, z: 0}
- - {x: 0, y: 0, z: 1}
- m_Parameters:
- serializedVersion: 3
- widthMultiplier: 1
- widthCurve:
- serializedVersion: 2
- m_Curve:
- - serializedVersion: 3
- time: 0
- value: 1
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- colorGradient:
- serializedVersion: 2
- key0: {r: 1, g: 1, b: 1, a: 1}
- key1: {r: 1, g: 1, b: 1, a: 1}
- key2: {r: 0, g: 0, b: 0, a: 0}
- key3: {r: 0, g: 0, b: 0, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 65535
- ctime2: 0
- ctime3: 0
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 65535
- atime2: 0
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: -1
- m_NumColorKeys: 2
- m_NumAlphaKeys: 2
- numCornerVertices: 0
- numCapVertices: 2
- alignment: 0
- textureMode: 0
- textureScale: {x: 1, y: 1}
- shadowBias: 0.5
- generateLightingData: 0
- m_UseWorldSpace: 1
- m_Loop: 0
- m_ApplyActiveColorSpace: 1
---- !u!114 &4801461948607133199
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6676953773607633624}
+ m_GameObject: {fileID: 7605250946350940930}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 6803edce0201f574f923fd9d10e5b30a, type: 3}
+ m_Script: {fileID: 11500000, guid: 25a07ef133a37d140a87cdf1f1c75fdf, type: 3}
m_Name:
- m_EditorClassIdentifier: Unity.XR.Interaction.Toolkit::UnityEngine.XR.Interaction.Toolkit.Interactors.XRRayInteractor
- m_InteractionManager: {fileID: 0}
+ m_EditorClassIdentifier:
+ m_InteractionManager: {fileID: 6227812651718498198}
m_InteractionLayers:
- m_Bits: 0
- m_Handedness: 1
+ m_Bits: 1
+ m_Handedness: 2
m_AttachTransform: {fileID: 0}
m_KeepSelectedTargetValid: 1
m_DisableVisualsWhenBlockedInGroup: 1
m_StartingSelectedInteractable: {fileID: 0}
- m_StartingTargetFilter: {fileID: 0}
+ m_StartingTargetFilter: {fileID: 3191210277239289247}
m_AutoFindParentInteractableInHierarchy: 0
m_ParentInteractableObject: {fileID: 0}
m_HoverEntered:
@@ -1611,12 +1855,12 @@ MonoBehaviour:
m_StartingHoverFilters: []
m_StartingSelectFilters: []
m_SelectInput:
- m_InputSourceMode: 0
+ m_InputSourceMode: 2
m_InputActionPerformed:
m_Name: Select
m_Type: 1
m_ExpectedControlType:
- m_Id: 2c2d09cc-6f7e-485d-8201-779ccb72b47b
+ m_Id: 2491b664-3d4e-4f20-a7ae-ee1861d845f2
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
@@ -1625,13 +1869,13 @@ MonoBehaviour:
m_Name: Select Value
m_Type: 0
m_ExpectedControlType: Axis
- m_Id: f4aa7ab5-9c01-4fe3-a9fa-e8e54bb69cf7
+ m_Id: fc42dacc-33eb-41ec-9c17-d242ac6b0c5b
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReferencePerformed: {fileID: 0}
- m_InputActionReferenceValue: {fileID: 0}
+ m_InputActionReferencePerformed: {fileID: 2952293240542986942, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferenceValue: {fileID: 2356269739022366052, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualPerformed: 0
m_ManualValue: 0
@@ -1641,12 +1885,12 @@ MonoBehaviour:
m_ManualQueueValue: 0
m_ManualQueueTargetFrame: 0
m_ActivateInput:
- m_InputSourceMode: 0
+ m_InputSourceMode: 2
m_InputActionPerformed:
m_Name: Activate
m_Type: 1
m_ExpectedControlType:
- m_Id: 350d7cae-4b8f-4992-9454-c02bafd85deb
+ m_Id: 77660b9e-6bbe-4740-b80f-1fea8d0f59e1
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
@@ -1655,13 +1899,13 @@ MonoBehaviour:
m_Name: Activate Value
m_Type: 0
m_ExpectedControlType: Axis
- m_Id: a491f432-bdc7-47e4-8aa2-c825497237e4
+ m_Id: 94568f52-c27a-47fc-a190-5e3b17572929
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReferencePerformed: {fileID: 0}
- m_InputActionReferenceValue: {fileID: 0}
+ m_InputActionReferencePerformed: {fileID: -2432073547575864795, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferenceValue: {fileID: -3908803764926266157, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualPerformed: 0
m_ManualValue: 0
@@ -1707,61 +1951,29 @@ MonoBehaviour:
m_HapticHoverCancelIntensity: 0
m_HapticHoverCancelDuration: 0
m_AllowHoverHapticsWhileSelecting: 1
- m_LineType: 0
- m_BlendVisualLinePoints: 1
- m_MaxRaycastDistance: 30
- m_RayOriginTransform: {fileID: 0}
- m_ReferenceFrame: {fileID: 0}
- m_Velocity: 16
- m_Acceleration: 9.8
- m_AdditionalGroundHeight: 0.1
- m_AdditionalFlightTime: 0.5
- m_EndPointDistance: 30
- m_EndPointHeight: -10
- m_ControlPointDistance: 10
- m_ControlPointHeight: 5
- m_SampleFrequency: 20
- m_HitDetectionType: 0
- m_SphereCastRadius: 0.1
- m_ConeCastAngle: 6
- m_LiveConeCastDebugVisuals: 0
- m_RaycastMask:
- serializedVersion: 2
- m_Bits: 32
- m_RaycastTriggerInteraction: 1
- m_RaycastSnapVolumeInteraction: 1
- m_RaycastUIDocumentTriggerInteraction: 1
- m_HitClosestOnly: 0
- m_HoverToSelect: 0
- m_HoverTimeToSelect: 0.5
- m_AutoDeselect: 0
- m_TimeToAutoDeselect: 3
+ m_InteractionAttachController: {fileID: 1382507949571466866}
+ m_EnableNearCasting: 1
+ m_NearInteractionCaster: {fileID: 4320139648255297471}
+ m_NearCasterSortingStrategy: 1
+ m_SortNearTargetsAfterTargetFilter: 0
+ m_EnableFarCasting: 1
+ m_FarInteractionCaster: {fileID: 1489026597932994268}
+ m_FarAttachMode: 0
m_EnableUIInteraction: 1
- m_BlockInteractionsWithScreenSpaceUI: 0
m_BlockUIOnInteractableSelection: 1
- m_ManipulateAttachTransform: 1
- m_UseForceGrab: 0
- m_RotateSpeed: 180
- m_TranslateSpeed: 1
- m_RotateReferenceFrame: {fileID: 0}
- m_RotateMode: 0
m_UIHoverEntered:
m_PersistentCalls:
m_Calls: []
m_UIHoverExited:
m_PersistentCalls:
m_Calls: []
- m_EnableARRaycasting: 0
- m_OccludeARHitsWith3DObjects: 0
- m_OccludeARHitsWith2DObjects: 0
- m_ScaleMode: 0
m_UIPressInput:
m_InputSourceMode: 2
m_InputActionPerformed:
m_Name: UI Press
m_Type: 1
m_ExpectedControlType:
- m_Id: ef9aa844-3839-47af-8488-ffd1125978d8
+ m_Id: ded1ccb2-ff18-46c7-ade9-b80985fe2825
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
@@ -1770,13 +1982,13 @@ MonoBehaviour:
m_Name: UI Press Value
m_Type: 0
m_ExpectedControlType: Axis
- m_Id: 6d73baf7-8ec0-40dc-88d1-79d81f74c543
+ m_Id: d762660e-30e0-4a4d-8e2a-e6b553e03f11
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReferencePerformed: {fileID: -1689652814259620815, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
- m_InputActionReferenceValue: {fileID: 6375731832589024377, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferencePerformed: {fileID: 2665380231154864692, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
+ m_InputActionReferenceValue: {fileID: 2562612067216775393, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualPerformed: 0
m_ManualValue: 0
@@ -1791,298 +2003,145 @@ MonoBehaviour:
m_Name: UI Scroll
m_Type: 0
m_ExpectedControlType: Vector2
- m_Id: 8a8b5555-7f42-45ee-9db4-923737557f23
+ m_Id: ef5cc4a5-b968-432c-9ae7-45e494178db0
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReference: {fileID: 8109287064717489457, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: {x: 0, y: 0}
- m_TranslateManipulationInput:
- m_InputSourceMode: 2
- m_InputAction:
- m_Name: Translate Manipulation
- m_Type: 0
- m_ExpectedControlType: Vector2
- m_Id: a93e6c6a-e2b8-4809-ad36-1ed6995957ee
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: {x: 0, y: 0}
- m_RotateManipulationInput:
- m_InputSourceMode: 2
- m_InputAction:
- m_Name: Rotate Manipulation
- m_Type: 0
- m_ExpectedControlType: Vector2
- m_Id: 8053c0d7-17d8-4ec6-acb0-e24bb3a4f6fc
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: {x: 0, y: 0}
- m_DirectionalManipulationInput:
- m_InputSourceMode: 2
- m_InputAction:
- m_Name: Directional Manipulation
- m_Type: 0
- m_ExpectedControlType: Vector2
- m_Id: 42fef18f-8012-4366-ab89-a49da023aecb
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: 0}
+ m_InputActionReference: {fileID: -711930659198068045, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualValue: {x: 0, y: 0}
- m_ScaleToggleInput:
- m_InputSourceMode: 2
- m_InputActionPerformed:
- m_Name: Scale Toggle
- m_Type: 1
- m_ExpectedControlType:
- m_Id: 5d9dcd36-d3e3-498b-8727-4d94092d47a8
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionValue:
- m_Name: Scale Toggle Value
- m_Type: 0
- m_ExpectedControlType: Axis
- m_Id: e70181b8-3068-4a01-a830-152a23f7c27f
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReferencePerformed: {fileID: 0}
- m_InputActionReferenceValue: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualPerformed: 0
- m_ManualValue: 0
- m_ManualQueuePerformed: 0
- m_ManualQueueWasPerformedThisFrame: 0
- m_ManualQueueWasCompletedThisFrame: 0
- m_ManualQueueValue: 0
- m_ManualQueueTargetFrame: 0
- m_ScaleOverTimeInput:
+--- !u!114 &1382507949571466866
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7605250946350940930}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 792f6c7eaa1a4b82abf8351559ac97eb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_TransformToFollow: {fileID: 5451842862611423810}
+ m_MotionStabilizationMode: 1
+ m_PositionStabilization: 0.25
+ m_AngleStabilization: 20
+ m_SmoothOffset: 0
+ m_SmoothingSpeed: 10
+ m_UseDistanceBasedVelocityScaling: 1
+ m_UseMomentum: 1
+ m_MomentumDecayScale: 1.25
+ m_MomentumDecayScaleFromInput: 5.5
+ m_ZVelocityRampThreshold: 0.3
+ m_PullVelocityBias: 1
+ m_PushVelocityBias: 1.25
+ m_MinAdditionalVelocityScalar: 0.05
+ m_MaxAdditionalVelocityScalar: 1.5
+ m_UseManipulationInput: 0
+ m_ManipulationInput:
m_InputSourceMode: 2
m_InputAction:
- m_Name: Scale Over Time
+ m_Name: Manipulation
m_Type: 0
m_ExpectedControlType: Vector2
- m_Id: c17d131b-924f-465c-8d68-1e0382a3e18e
+ m_Id: 9914e1e2-77ba-43ae-8266-fd33d44c8a24
m_Processors:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
- m_InputActionReference: {fileID: 0}
+ m_InputActionReference: {fileID: 7489563345203072732, guid: 2924cdc729619de4a8f9d4046047a886, type: 3}
m_ObjectReferenceObject: {fileID: 0}
m_ManualValue: {x: 0, y: 0}
- m_ScaleDistanceDeltaInput:
- m_InputSourceMode: 0
- m_InputAction:
- m_Name: Scale Distance Delta
- m_Type: 0
- m_ExpectedControlType: Axis
- m_Id: 5a7511f7-3e7a-4817-8f6b-7c6d55926fa3
- m_Processors:
- m_Interactions:
- m_SingletonActionBindings: []
- m_Flags: 0
- m_InputActionReference: {fileID: 0}
- m_ObjectReferenceObject: {fileID: 0}
- m_ManualValue: 0
---- !u!114 &3310644866045247143
+ m_ManipulationXAxisMode: 1
+ m_ManipulationYAxisMode: 2
+ m_CombineManipulationAxes: 0
+ m_ManipulationTranslateSpeed: 1
+ m_ManipulationRotateSpeed: 180
+ m_ManipulationRotateReferenceFrame: {fileID: 0}
+ m_EnableDebugLines: 0
+--- !u!114 &4320139648255297471
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6676953773607633624}
+ m_GameObject: {fileID: 7605250946350940930}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: e988983f96fe1dd48800bcdfc82f23e9, type: 3}
+ m_Script: {fileID: 11500000, guid: 48139a683d3b4ac3a37cd5d24f71acf1, type: 3}
m_Name:
- m_EditorClassIdentifier: Unity.XR.Interaction.Toolkit::UnityEngine.XR.Interaction.Toolkit.Interactors.Visuals.XRInteractorLineVisual
- m_LineWidth: 0.005
- m_OverrideInteractorLineLength: 1
- m_LineLength: 10
- m_AutoAdjustLineLength: 0
- m_MinLineLength: 0.5
- m_UseDistanceToHitAsMaxLineLength: 1
- m_LineRetractionDelay: 0.5
- m_LineLengthChangeSpeed: 12
- m_WidthCurve:
- serializedVersion: 2
- m_Curve:
- - serializedVersion: 3
- time: 0
- value: 1
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0
- outWeight: 0
- - serializedVersion: 3
- time: 1
- value: 1
- inSlope: 0
- outSlope: 0
- tangentMode: 0
- weightedMode: 0
- inWeight: 0
- outWeight: 0
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- m_SetLineColorGradient: 1
- m_ValidColorGradient:
- serializedVersion: 2
- key0: {r: 1, g: 1, b: 1, a: 1}
- key1: {r: 1, g: 1, b: 1, a: 0.3}
- key2: {r: 0, g: 0, b: 0, a: 0}
- key3: {r: 0, g: 0, b: 0, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 65535
- ctime2: 0
- ctime3: 0
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 65535
- atime2: 0
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: -1
- m_NumColorKeys: 2
- m_NumAlphaKeys: 2
- m_InvalidColorGradient:
+ m_EditorClassIdentifier:
+ m_CastOrigin: {fileID: 5451842862611423810}
+ m_EnableStabilization: 0
+ m_PositionStabilization: 0.25
+ m_AngleStabilization: 20
+ m_AimTargetObject: {fileID: 0}
+ m_PhysicsLayerMask:
serializedVersion: 2
- key0: {r: 1, g: 1, b: 1, a: 0}
- key1: {r: 1, g: 1, b: 1, a: 0}
- key2: {r: 0, g: 0, b: 0, a: 0}
- key3: {r: 0, g: 0, b: 0, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 65535
- ctime2: 0
- ctime3: 0
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 65535
- atime2: 0
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: -1
- m_NumColorKeys: 2
- m_NumAlphaKeys: 2
- m_BlockedColorGradient:
+ m_Bits: 1051840
+ m_PhysicsTriggerInteraction: 1
+ m_CastRadius: 0.1
+--- !u!114 &1489026597932994268
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7605250946350940930}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ef20135915079454985abea5a2ec8967, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_CastOrigin: {fileID: 5451842862611423810}
+ m_EnableStabilization: 1
+ m_PositionStabilization: 0.25
+ m_AngleStabilization: 20
+ m_AimTargetObject: {fileID: 9092921936286841604}
+ m_RaycastMask:
serializedVersion: 2
- key0: {r: 1, g: 1, b: 1, a: 0}
- key1: {r: 1, g: 1, b: 1, a: 0}
- key2: {r: 0, g: 0, b: 0, a: 0}
- key3: {r: 0, g: 0, b: 0, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 65535
- ctime2: 0
- ctime3: 0
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 65535
- atime2: 0
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: -1
- m_NumColorKeys: 2
- m_NumAlphaKeys: 2
- m_TreatSelectionAsValidState: 0
- m_SmoothMovement: 0
- m_FollowTightness: 10
- m_SnapThresholdDistance: 10
- m_Reticle: {fileID: 0}
- m_BlockedReticle: {fileID: 0}
- m_StopLineAtFirstRaycastHit: 1
- m_StopLineAtSelection: 0
- m_SnapEndpointIfAvailable: 1
- m_LineBendRatio: 0.5
- m_BendingEnabledInteractionLayers:
- m_Bits: 4294967295
- m_OverrideInteractorLineOrigin: 1
- m_LineOriginTransform: {fileID: 0}
- m_LineOriginOffset: 0
---- !u!1 &6995813130144571658
-GameObject:
+ m_Bits: 1051873
+ m_RaycastTriggerInteraction: 1
+ m_RaycastSnapVolumeInteraction: 1
+ m_RaycastUIDocumentTriggerInteraction: 1
+ m_TargetNumCurveSegments: 1
+ m_HitDetectionType: 2
+ m_CastDistance: 30
+ m_SphereCastRadius: 0.1
+ m_ConeCastAngle: 6
+ m_LiveConeCastDebugVisuals: 0
+--- !u!114 &3191210277239289247
+MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 7905090655299301591}
- m_Layer: 8
- m_Name: Camera Offset
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &7905090655299301591
-Transform:
+ m_GameObject: {fileID: 7605250946350940930}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 06d37e5228fbbc744a06dbbcbfa399a9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Gothic.VR::Gothic.VR.Interaction.Backends.Xri.XriLineOfSightFilter
+ _blockingLayers:
+ serializedVersion: 2
+ m_Bits: 1051713
+ _maxDistance: 10
+ _minCheckDistance: 0.15
+ _surfaceTolerance: 0.02
+--- !u!114 &2750591488407108373
+MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6995813130144571658}
- serializedVersion: 2
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 3795310480892305868}
- - {fileID: 2704301485295035116}
- - {fileID: 4055452250844519603}
- m_Father: {fileID: 1361426706454156200}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_GameObject: {fileID: 7605250946350940930}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dfa36fd411a0e614a83609318964c858, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Gothic.VR::Gothic.VR.Interaction.Backends.Xri.XriGrabberBridge
+ _nearGrabMargin: 0.05
--- !u!1 &7701317328730321625
GameObject:
m_ObjectHideFlags: 0
@@ -2113,7 +2172,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- - {fileID: 6347680414218280407}
+ - {fileID: 5451842862611423810}
m_Father: {fileID: 7905090655299301591}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3829692317711544481
@@ -2185,6 +2244,397 @@ MonoBehaviour:
m_Interactions:
m_SingletonActionBindings: []
m_Flags: 0
+--- !u!1 &7854938562963395461
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6160204099483398844}
+ - component: {fileID: 8802700396031472356}
+ - component: {fileID: 2837570909488418039}
+ - component: {fileID: 8383563443979425973}
+ m_Layer: 8
+ m_Name: LineVisual
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &6160204099483398844
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7854938562963395461}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6788907536904435118}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &8802700396031472356
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7854938562963395461}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 80e353695beb436ab39a90d9ecefaee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_LineRenderer: {fileID: 2837570909488418039}
+ m_CurveVisualObject: {fileID: 1096273261276596531}
+ m_OverrideLineOrigin: 1
+ m_LineOriginTransform: {fileID: 6788907536904435118}
+ m_VisualPointCount: 20
+ m_MaxVisualCurveDistance: 30
+ m_RestingVisualLineLength: 0.25
+ m_LineDynamicsMode: 1
+ m_RetractDelay: 1
+ m_RetractDuration: 1
+ m_ExtendLineToEmptyHit: 0
+ m_ExtensionRate: 10
+ m_EndPointExpansionRate: 10
+ m_ComputeMidPointWithComplexCurves: 0
+ m_SnapToSelectedAttachIfAvailable: 1
+ m_SnapToSnapVolumeIfAvailable: 1
+ m_CurveStartOffset: 0.015
+ m_CurveEndOffset: 0.005
+ m_CustomizeLinePropertiesForState: 1
+ m_LinePropertyAnimationSpeed: 8
+ m_NoValidHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.25
+ m_AdjustWidth: 1
+ m_StartWidth: 0.003
+ m_EndWidth: 0.003
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 1, g: 1, b: 1, a: 0.5019608}
+ key2: {r: 0, g: 0, b: 0, a: 0.2509804}
+ key3: {r: 0, g: 0, b: 0, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 65535
+ ctime2: 0
+ ctime3: 0
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 193
+ atime1: 8192
+ atime2: 32768
+ atime3: 55705
+ atime4: 65342
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 2
+ m_NumAlphaKeys: 4
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_UIHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.5
+ m_AdjustWidth: 1
+ m_StartWidth: 0.004
+ m_EndWidth: 0.004
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 1, g: 0.78431374, b: 0.5686275, a: 0.49019608}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 0, g: 0, b: 0, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 16384
+ ctime2: 65535
+ ctime3: 0
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 8192
+ atime2: 32768
+ atime3: 65535
+ atime4: 0
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 4
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_UIPressHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.5
+ m_AdjustWidth: 1
+ m_StartWidth: 0.003
+ m_EndWidth: 0.003
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 0.5686275, g: 0.78431374, b: 1, a: 0.627451}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 1, g: 1, b: 1, a: 0.78431374}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 32768
+ ctime2: 65535
+ ctime3: 65535
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 8192
+ atime2: 26214
+ atime3: 42598
+ atime4: 65535
+ atime5: 65535
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 5
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_SelectHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.5
+ m_AdjustWidth: 1
+ m_StartWidth: 0.003
+ m_EndWidth: 0.003
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 0.5686275, g: 0.78431374, b: 1, a: 0.627451}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 1, g: 1, b: 1, a: 0.78431374}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 32768
+ ctime2: 65535
+ ctime3: 65535
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 8192
+ atime2: 26214
+ atime3: 42598
+ atime4: 65535
+ atime5: 65535
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 5
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.75
+ m_HoverHitProperties:
+ m_SmoothlyCurveLine: 1
+ m_LineBendRatio: 0.25
+ m_AdjustWidth: 1
+ m_StartWidth: 0.004
+ m_EndWidth: 0.004
+ m_EndWidthScaleDistanceFactor: 2
+ m_AdjustGradient: 1
+ m_Gradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 0}
+ key1: {r: 1, g: 0.78431374, b: 0.5686275, a: 0.49019608}
+ key2: {r: 1, g: 1, b: 1, a: 1}
+ key3: {r: 1, g: 1, b: 1, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 16384
+ ctime2: 65535
+ ctime3: 65535
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 13878
+ atime2: 32768
+ atime3: 65535
+ atime4: 0
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 3
+ m_NumAlphaKeys: 4
+ m_CustomizeExpandLineDrawPercent: 1
+ m_ExpandModeLineDrawPercent: 0.9
+ m_RenderLineInWorldSpace: 1
+ m_SwapMaterials: 0
+ m_BaseLineMaterial: {fileID: 0}
+ m_EmptyHitMaterial: {fileID: 0}
+--- !u!120 &2837570909488418039
+LineRenderer:
+ serializedVersion: 3
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7854938562963395461}
+ m_Enabled: 0
+ m_CastShadows: 0
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 0
+ m_LightProbeUsage: 0
+ m_ReflectionProbeUsage: 0
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_MaskInteraction: 0
+ m_Positions: []
+ m_Parameters:
+ serializedVersion: 3
+ widthMultiplier: 1
+ widthCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 0
+ value: 0.012002945
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0.33333334
+ outWeight: 0.33333334
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ colorGradient:
+ serializedVersion: 2
+ key0: {r: 1, g: 1, b: 1, a: 1}
+ key1: {r: 1, g: 1, b: 1, a: 1}
+ key2: {r: 0, g: 0, b: 0, a: 0}
+ key3: {r: 0, g: 0, b: 0, a: 0}
+ key4: {r: 0, g: 0, b: 0, a: 0}
+ key5: {r: 0, g: 0, b: 0, a: 0}
+ key6: {r: 0, g: 0, b: 0, a: 0}
+ key7: {r: 0, g: 0, b: 0, a: 0}
+ ctime0: 0
+ ctime1: 65535
+ ctime2: 0
+ ctime3: 0
+ ctime4: 0
+ ctime5: 0
+ ctime6: 0
+ ctime7: 0
+ atime0: 0
+ atime1: 65535
+ atime2: 0
+ atime3: 0
+ atime4: 0
+ atime5: 0
+ atime6: 0
+ atime7: 0
+ m_Mode: 0
+ m_ColorSpace: -1
+ m_NumColorKeys: 2
+ m_NumAlphaKeys: 2
+ numCornerVertices: 8
+ numCapVertices: 8
+ alignment: 0
+ textureMode: 0
+ textureScale: {x: 1, y: 1}
+ shadowBias: 0.5
+ generateLightingData: 0
+ m_UseWorldSpace: 1
+ m_Loop: 0
+ m_ApplyActiveColorSpace: 0
+--- !u!210 &8383563443979425973
+SortingGroup:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7854938562963395461}
+ m_Enabled: 1
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 30005
+ m_SortAtRoot: 0
+ m_Sort3DAs2D: 0
--- !u!1 &8467730262558146822
GameObject:
m_ObjectHideFlags: 0
@@ -2534,6 +2984,8 @@ MonoBehaviour:
_camera: {fileID: 7212599541473323004}
_leftController: {fileID: 2704301485295035116}
_rightController: {fileID: 4055452250844519603}
+ _leftGrabber: {fileID: 3337253397848854983}
+ _rightGrabber: {fileID: 2750591488407108373}
_screenFade: {fileID: 7497269210671564284}
_moveProvider: {fileID: 8165985969289754186}
_snapTurnProvider: {fileID: 242655525520869064}
diff --git a/Assets/Gothic-VR/Resources/VR/Prefabs/Vobs/oCItem.prefab b/Assets/Gothic-VR/Resources/VR/Prefabs/Vobs/oCItem.prefab
index ccbf13ffa..112ced04b 100644
--- a/Assets/Gothic-VR/Resources/VR/Prefabs/Vobs/oCItem.prefab
+++ b/Assets/Gothic-VR/Resources/VR/Prefabs/Vobs/oCItem.prefab
@@ -18,6 +18,8 @@ GameObject:
- component: {fileID: 2018021949967966991}
- component: {fileID: 5746501746354695612}
- component: {fileID: 6145980801324581266}
+ - component: {fileID: 5604778400711577802}
+ - component: {fileID: 1949468816389965935}
m_Layer: 6
m_Name: oCItem
m_TagString: GothicVob
@@ -287,6 +289,149 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 594f5e7857d0629419c1bef807639a86, type: 3}
m_Name:
m_EditorClassIdentifier: Gothic.VR::Gothic.VR.Interaction.Backends.Hvr.HvrInteractableBridge
+--- !u!114 &5604778400711577802
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6503575194566409312}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 6087a45bbe7ac8f469bf5110b3d64b49, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Gothic.VR::Gothic.VR.Interaction.Backends.Xri.GothicGrabInteractable
+ m_InteractionManager: {fileID: 0}
+ m_Colliders: []
+ m_InteractionLayers:
+ m_Bits: 1
+ m_DistanceCalculationMode: 1
+ m_SelectMode: 1
+ m_FocusMode: 1
+ m_CustomReticle: {fileID: 0}
+ m_AllowGazeInteraction: 0
+ m_AllowGazeSelect: 0
+ m_OverrideGazeTimeToSelect: 0
+ m_GazeTimeToSelect: 0.5
+ m_OverrideTimeToAutoDeselectGaze: 0
+ m_TimeToAutoDeselectGaze: 3
+ m_AllowGazeAssistance: 0
+ m_FirstHoverEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ m_LastHoverExited:
+ m_PersistentCalls:
+ m_Calls: []
+ m_HoverEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ m_HoverExited:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FirstSelectEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ m_LastSelectExited:
+ m_PersistentCalls:
+ m_Calls: []
+ m_SelectEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ m_SelectExited:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FirstFocusEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ m_LastFocusExited:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FocusEntered:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FocusExited:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Activated:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Deactivated:
+ m_PersistentCalls:
+ m_Calls: []
+ m_StartingHoverFilters: []
+ m_StartingSelectFilters: []
+ m_StartingInteractionStrengthFilters: []
+ m_AutoFindParentInteractableInHierarchy: 0
+ m_ParentInteractableObject: {fileID: 0}
+ m_AttachTransform: {fileID: 0}
+ m_SecondaryAttachTransform: {fileID: 0}
+ m_UseDynamicAttach: 1
+ m_MatchAttachPosition: 1
+ m_MatchAttachRotation: 1
+ m_SnapToColliderVolume: 1
+ m_ReinitializeDynamicAttachEverySingleGrab: 1
+ m_AttachEaseInTime: 0.15
+ m_MovementType: 0
+ m_PredictedVisualsTransform: {fileID: 0}
+ m_VelocityDamping: 1
+ m_VelocityScale: 1
+ m_AngularVelocityDamping: 1
+ m_AngularVelocityScale: 1
+ m_TrackPosition: 1
+ m_SmoothPosition: 0
+ m_SmoothPositionAmount: 8
+ m_TightenPosition: 0.1
+ m_TrackRotation: 1
+ m_SmoothRotation: 0
+ m_SmoothRotationAmount: 8
+ m_TightenRotation: 0.1
+ m_TrackScale: 1
+ m_SmoothScale: 0
+ m_SmoothScaleAmount: 8
+ m_TightenScale: 0.1
+ m_ThrowOnDetach: 1
+ m_ThrowSmoothingDuration: 0.25
+ m_ThrowSmoothingCurve:
+ serializedVersion: 2
+ m_Curve:
+ - serializedVersion: 3
+ time: 1
+ value: 1
+ inSlope: 0
+ outSlope: 0
+ tangentMode: 0
+ weightedMode: 0
+ inWeight: 0
+ outWeight: 0
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ m_ThrowVelocityScale: 1.5
+ m_ThrowAngularVelocityScale: 1
+ m_ForceGravityOnDetach: 0
+ m_UnparentTransformOnGrab: 0
+ m_RetainTransformParent: 1
+ m_StartingSingleGrabTransformers: []
+ m_StartingMultipleGrabTransformers: []
+ m_AddDefaultGrabTransformers: 1
+ m_FarAttachMode: 0
+ m_LimitLinearVelocity: 0
+ m_LimitAngularVelocity: 0
+ m_MaxLinearVelocityDelta: 10
+ m_MaxAngularVelocityDelta: 20
+ _heldInterpolation: 1
+--- !u!114 &1949468816389965935
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6503575194566409312}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d53defac19fbb474d81910e60e275fd7, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Gothic.VR::Gothic.VR.Interaction.Backends.Xri.XriInteractableBridge
--- !u!1001 &2283517946604736509
PrefabInstance:
m_ObjectHideFlags: 0
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Hvr/HvrInteractableBridge.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Hvr/HvrInteractableBridge.cs
index bf6e3f25b..a0f55c62d 100644
--- a/Assets/Gothic-VR/Scripts/Interaction/Backends/Hvr/HvrInteractableBridge.cs
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Hvr/HvrInteractableBridge.cs
@@ -5,6 +5,7 @@
using HurricaneVR.Framework.Core;
using HurricaneVR.Framework.Core.Grabbers;
using HurricaneVR.Framework.Core.Sockets;
+using Reflex.Attributes;
using UnityEngine;
namespace Gothic.VR.Interaction.Backends.Hvr
@@ -12,9 +13,12 @@ namespace Gothic.VR.Interaction.Backends.Hvr
///
/// Sits next to an HVRGrabbable and its VrInteractable. Forwards HVR's grabbable events synchronously to the
/// VrInteractable and executes its commands on the HVRGrabbable.
+ /// Inactive (no subscriptions) if another backend runs; prefabs carry the bridges of all backends.
///
public class HvrInteractableBridge : MonoBehaviour, IVrInteractableBackend
{
+ [Inject] private readonly IVrBackend _vrBackend;
+
private HVRGrabbable _grabbable;
private VrInteractable _interactable;
private bool _isSubscribed;
@@ -29,13 +33,18 @@ private HVRGrabbable Grabbable
}
}
+ ///
+ /// Without injection (e.g. objects outside a scene scope), HVR is assumed as before the XRI backend existed.
+ ///
+ public bool IsActive => _vrBackend == null || _vrBackend is HvrBackend;
+
public bool IsHeld => Grabbable.IsBeingHeld;
public IReadOnlyList Colliders => Grabbable.Colliders;
private void Awake()
{
_interactable = GetComponent();
- if (Grabbable == null || _interactable == null)
+ if (!IsActive || Grabbable == null || _interactable == null)
return;
Grabbable.HoverEnter.AddListener(OnHoverEnter);
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/GothicGrabInteractable.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/GothicGrabInteractable.cs
new file mode 100644
index 000000000..d0d30d6c2
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/GothicGrabInteractable.cs
@@ -0,0 +1,62 @@
+using UnityEngine;
+using UnityEngine.XR.Interaction.Toolkit;
+using UnityEngine.XR.Interaction.Toolkit.Interactables;
+
+namespace Gothic.VR.Interaction.Backends.Xri
+{
+ ///
+ /// XRGrabInteractable for Gothic items. Adds what XRI lacks compared to HVR:
+ /// - BeforeGrabbed: raised (via XriInteractableBridge) before XRI captures the Rigidbody state. Gothic items lie
+ /// kinematic, the game turns physics on there, so that VelocityTracking moves them and they fall when dropped.
+ /// - Interpolation while held, against jitter of velocity tracked items while walking.
+ ///
+ /// Disabled in the prefab. XriInteractableBridge enables it on the XRI backend once the runtime colliders exist.
+ ///
+ public class GothicGrabInteractable : XRGrabInteractable
+ {
+ [Tooltip("Rigidbody interpolation while held. Restored on drop.")]
+ [SerializeField] private RigidbodyInterpolation _heldInterpolation = RigidbodyInterpolation.Interpolate;
+
+ private XriInteractableBridge _bridge;
+ private RigidbodyInterpolation _interpolationBeforeGrab;
+ private bool _isInterpolationOverridden;
+
+ protected override void Awake()
+ {
+ base.Awake();
+ _bridge = GetComponent();
+ }
+
+ protected override void OnSelectEntering(SelectEnterEventArgs args)
+ {
+ // Before base: XRGrabInteractable.Grab() stores isKinematic, which it restores on drop.
+ if (_bridge != null)
+ _bridge.OnSelectEntering(args);
+
+ base.OnSelectEntering(args);
+ }
+
+ protected override void SetupRigidbodyGrab(Rigidbody rigidbody)
+ {
+ // XRI calls it again when the movement type changes while held.
+ if (!_isInterpolationOverridden)
+ {
+ _interpolationBeforeGrab = rigidbody.interpolation;
+ _isInterpolationOverridden = true;
+ }
+
+ base.SetupRigidbodyGrab(rigidbody);
+ rigidbody.interpolation = _heldInterpolation;
+ }
+
+ protected override void SetupRigidbodyDrop(Rigidbody rigidbody)
+ {
+ base.SetupRigidbodyDrop(rigidbody);
+ if (!_isInterpolationOverridden)
+ return;
+
+ rigidbody.interpolation = _interpolationBeforeGrab;
+ _isInterpolationOverridden = false;
+ }
+ }
+}
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/GothicGrabInteractable.cs.meta b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/GothicGrabInteractable.cs.meta
new file mode 100644
index 000000000..7018b9acc
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/GothicGrabInteractable.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 6087a45bbe7ac8f469bf5110b3d64b49
\ No newline at end of file
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriBackend.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriBackend.cs
index 9513c8b69..a68b61c92 100644
--- a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriBackend.cs
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriBackend.cs
@@ -7,9 +7,10 @@ namespace Gothic.VR.Interaction.Backends.Xri
{
///
/// XR Interaction Toolkit backend. Always compiled, as XRI is a free package.
- /// Implemented: input, haptics, SFX, UI laser pointers and the player rig (XriRig on "VR - Player XRI.prefab",
- /// with ScreenFade/WallFade on its camera).
- /// Missing: the simulator (HVR phase 1d) and grabbing (phase 2).
+ /// Implemented: input, haptics, SFX, UI laser pointers, the player rig (XriRig on "VR - Player XRI.prefab",
+ /// with ScreenFade/WallFade on its camera), the XR Interaction Simulator and item grabbing (Near-Far interactor
+ /// per hand, GothicGrabInteractable + XriInteractableBridge on oCItem).
+ /// Missing: grabbing mobs/NPCs (phase 2b), sockets (3), doors/chests/ladders (4) and hands (5).
///
public class XriBackend : IVrBackend
{
@@ -18,8 +19,8 @@ public class XriBackend : IVrBackend
public void InstallBindings(ContainerBuilder containerBuilder)
{
Logger.LogWarning("XRI backend is work in progress: rig, locomotion, input, haptics, UI laser pointers, " +
- "screen fades and the XR Interaction Simulator work. Grabbing (phase 2), sockets (3), " +
- "doors/chests/ladders (4) and hands (5) are missing.", LogCat.VR);
+ "screen fades, the XR Interaction Simulator and item grabbing work. Mobs/NPCs (phase " +
+ "2b), sockets (3), doors/chests/ladders (4) and hands (5) are missing.", LogCat.VR);
containerBuilder.AddSingleton(typeof(XriInput), typeof(IVrInput), typeof(XriInput));
containerBuilder.AddSingleton(typeof(XriHaptics), typeof(IVrHaptics));
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriGrabberBridge.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriGrabberBridge.cs
new file mode 100644
index 000000000..051eea660
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriGrabberBridge.cs
@@ -0,0 +1,150 @@
+using System;
+using Gothic.VR.Interaction.Components;
+using Gothic.VR.Interaction.Models;
+using Gothic.VR.Interaction.Ports;
+using UnityEngine;
+using UnityEngine.XR.Interaction.Toolkit;
+using UnityEngine.XR.Interaction.Toolkit.Interactables;
+using UnityEngine.XR.Interaction.Toolkit.Interactors;
+using UnityEngine.XR.Interaction.Toolkit.Interactors.Casters;
+using UnityEngine.XR.Interaction.Toolkit.Utilities;
+
+namespace Gothic.VR.Interaction.Backends.Xri
+{
+ ///
+ /// Sits next to the NearFarInteractor of one hand and forwards its events synchronously as IVrGrabber events.
+ /// One interactor does direct and distance grabs, so Kind is always Hand. The VrGrabArgs of each event say
+ /// whether the current object was grabbed directly (Hand) or pulled from a distance (Distance).
+ /// BeforeGrabbed is raised by GothicGrabInteractable (XRI has no such interactor event).
+ ///
+ [RequireComponent(typeof(NearFarInteractor))]
+ public class XriGrabberBridge : MonoBehaviour, IVrGrabber
+ {
+ [Tooltip("Added to the near caster's radius: a target this close to the hand at selection is a Hand grab, " +
+ "everything further away a Distance grab.")]
+ [SerializeField] private float _nearGrabMargin = 0.05f;
+
+ public event Action BeforeGrabbed;
+ public event Action Grabbed;
+ public event Action Released;
+
+ private NearFarInteractor _interactor;
+ private VrGrabberKind _heldKind = VrGrabberKind.Hand;
+ private bool _isSubscribed;
+
+ public NearFarInteractor Interactor
+ {
+ get
+ {
+ if (_interactor == null)
+ _interactor = GetComponent();
+ return _interactor;
+ }
+ }
+
+ public VrGrabberKind Kind => VrGrabberKind.Hand;
+
+ public VrHandSide HandSide => Interactor.handedness == InteractorHandedness.Left
+ ? VrHandSide.Left
+ : VrHandSide.Right;
+
+ public VrInteractable Held => Interactor.hasSelection
+ ? GetInteractable(Interactor.firstInteractableSelected)
+ : null;
+
+ private void Awake()
+ {
+ Interactor.selectEntered.AddListener(OnSelectEntered);
+ Interactor.selectExited.AddListener(OnSelectExited);
+ _isSubscribed = true;
+ }
+
+ private void OnDestroy()
+ {
+ if (!_isSubscribed || _interactor == null)
+ return;
+
+ _interactor.selectEntered.RemoveListener(OnSelectEntered);
+ _interactor.selectExited.RemoveListener(OnSelectExited);
+ }
+
+ public void ForceRelease()
+ {
+ if (Interactor.hasSelection && Interactor.interactionManager != null)
+ Interactor.interactionManager.CancelInteractorSelection((IXRSelectInteractor)Interactor);
+ }
+
+ ///
+ /// Args of a selection that starts now. Remembers the kind (Hand or Distance) until the release.
+ ///
+ internal VrGrabArgs CreateSelectArgs(VrInteractable interactable, IXRInteractable xrInteractable)
+ {
+ _heldKind = ResolveKind(xrInteractable);
+ return CreateArgs(interactable, _heldKind);
+ }
+
+ internal VrGrabArgs CreateHoverArgs(VrInteractable interactable, IXRInteractable xrInteractable)
+ {
+ return CreateArgs(interactable, ResolveKind(xrInteractable));
+ }
+
+ internal VrGrabArgs CreateHeldArgs(VrInteractable interactable)
+ {
+ return CreateArgs(interactable, _heldKind);
+ }
+
+ internal void RaiseBeforeGrabbed(VrGrabArgs args)
+ {
+ BeforeGrabbed?.Invoke(args);
+ }
+
+ private VrGrabArgs CreateArgs(VrInteractable interactable, VrGrabberKind kind)
+ {
+ return new VrGrabArgs(kind, HandSide, interactable, gameObject);
+ }
+
+ ///
+ /// Near-Far's selectionRegion can't tell us: with InteractorFarAttachMode.Near, a far grab has no attach
+ /// offset and reports Near as well. Therefore, the distance between hand and target decides.
+ ///
+ private VrGrabberKind ResolveKind(IXRInteractable xrInteractable)
+ {
+ if (xrInteractable == null || !Interactor.enableNearCasting)
+ return VrGrabberKind.Distance;
+
+ var nearRadius = Interactor.nearInteractionCaster is SphereInteractionCaster sphereCaster
+ ? sphereCaster.castRadius
+ : 0.1f;
+ var caster = Interactor.nearInteractionCaster;
+ var origin = caster != null && caster.effectiveCastOrigin != null
+ ? caster.effectiveCastOrigin
+ : Interactor.transform;
+ var maxDistance = nearRadius + _nearGrabMargin;
+
+ if (!XRInteractableUtility.TryGetClosestPointOnCollider(xrInteractable, origin.position,
+ out var distanceInfo))
+ return VrGrabberKind.Distance;
+
+ return distanceInfo.distanceSqr <= maxDistance * maxDistance ? VrGrabberKind.Hand : VrGrabberKind.Distance;
+ }
+
+ private void OnSelectEntered(SelectEnterEventArgs args)
+ {
+ var interactable = GetInteractable(args.interactableObject);
+ if (interactable != null)
+ Grabbed?.Invoke(CreateHeldArgs(interactable));
+ }
+
+ private void OnSelectExited(SelectExitEventArgs args)
+ {
+ var interactable = GetInteractable(args.interactableObject);
+ if (interactable != null)
+ Released?.Invoke(CreateHeldArgs(interactable));
+ }
+
+ private static VrInteractable GetInteractable(IXRInteractable xrInteractable)
+ {
+ return xrInteractable is Component component ? component.GetComponent() : null;
+ }
+ }
+}
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriGrabberBridge.cs.meta b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriGrabberBridge.cs.meta
new file mode 100644
index 000000000..cbaf6c988
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriGrabberBridge.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: dfa36fd411a0e614a83609318964c858
\ No newline at end of file
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriInteractableBridge.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriInteractableBridge.cs
new file mode 100644
index 000000000..4a991a996
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriInteractableBridge.cs
@@ -0,0 +1,207 @@
+using System.Collections.Generic;
+using Gothic.Core.Logging;
+using Gothic.VR.Interaction.Components;
+using Gothic.VR.Interaction.Models;
+using Gothic.VR.Interaction.Ports;
+using Reflex.Attributes;
+using UnityEngine;
+using UnityEngine.XR.Interaction.Toolkit;
+using UnityEngine.XR.Interaction.Toolkit.Interactables;
+using UnityEngine.XR.Interaction.Toolkit.Interactors;
+using Logger = Gothic.Core.Logging.Logger;
+
+namespace Gothic.VR.Interaction.Backends.Xri
+{
+ ///
+ /// Sits next to an XRI interactable (GothicGrabInteractable for items) and its VrInteractable. Forwards XRI's
+ /// hover/select events synchronously to the VrInteractable and executes its commands on the interactable.
+ ///
+ /// Prefabs carry the components of both backends. The XRI interactable is disabled in the prefab and only this
+ /// bridge enables it, if XRI is the active backend. Otherwise, it stays disabled and never looks for (or
+ /// creates) an XRInteractionManager.
+ ///
+ public class XriInteractableBridge : MonoBehaviour, IVrInteractableBackend
+ {
+ [Inject] private readonly IVrBackend _vrBackend;
+
+ private readonly Dictionary _selectArgs = new();
+ private readonly HashSet _handHovers = new();
+ private readonly List _colliderBuffer = new();
+
+ private XRBaseInteractable _xrInteractable;
+ private VrInteractable _interactable;
+ private bool _isSubscribed;
+
+ public bool IsActive => _vrBackend is XriBackend;
+ public bool IsHeld => _xrInteractable != null && _xrInteractable.isSelected;
+
+ public IReadOnlyList Colliders => _xrInteractable != null
+ ? _xrInteractable.colliders
+ : System.Array.Empty();
+
+ private void Awake()
+ {
+ if (!IsActive)
+ return;
+
+ _interactable = GetComponent();
+ _xrInteractable = GetComponent();
+ if (_interactable == null || _xrInteractable == null)
+ {
+ Logger.LogError($"[XRI] {name} needs a VrInteractable and an XR interactable next to " +
+ $"{nameof(XriInteractableBridge)}.", LogCat.VR);
+ return;
+ }
+
+ _xrInteractable.hoverEntered.AddListener(OnHoverEntered);
+ _xrInteractable.hoverExited.AddListener(OnHoverExited);
+ _xrInteractable.selectEntered.AddListener(OnSelectEntered);
+ _xrInteractable.selectExited.AddListener(OnSelectExited);
+ _isSubscribed = true;
+ }
+
+ private void Start()
+ {
+ if (!_isSubscribed)
+ return;
+
+ // Gothic meshes and their colliders are created at runtime, after XRI collected the colliders in Awake.
+ CollectColliders();
+ _xrInteractable.enabled = true;
+ }
+
+ private void OnDestroy()
+ {
+ if (!_isSubscribed || _xrInteractable == null)
+ return;
+
+ _xrInteractable.hoverEntered.RemoveListener(OnHoverEntered);
+ _xrInteractable.hoverExited.RemoveListener(OnHoverExited);
+ _xrInteractable.selectEntered.RemoveListener(OnSelectEntered);
+ _xrInteractable.selectExited.RemoveListener(OnSelectExited);
+ }
+
+ public void ForceRelease()
+ {
+ if (IsHeld && _xrInteractable.interactionManager != null)
+ _xrInteractable.interactionManager.CancelInteractableSelection((IXRSelectInteractable)_xrInteractable);
+ }
+
+ ///
+ /// Re-collects the colliders. The interaction manager maps colliders to interactables on registration only,
+ /// therefore an enabled interactable is registered again (not while it's held or hovered).
+ ///
+ public void SetupColliders()
+ {
+ if (!_isSubscribed)
+ return;
+
+ CollectColliders();
+
+ if (!_xrInteractable.isActiveAndEnabled || _xrInteractable.isSelected || _xrInteractable.isHovered)
+ return;
+
+ _xrInteractable.enabled = false;
+ _xrInteractable.enabled = true;
+ }
+
+ public void SetSocketSounds(AudioClip socketed, AudioClip unsocketed)
+ {
+ // TODO HVR phase 3: XRI sockets.
+ }
+
+ ///
+ /// Called by GothicGrabInteractable before XRI moves the interactable (BeforeGrabbed of HVR).
+ ///
+ internal void OnSelectEntering(SelectEnterEventArgs args)
+ {
+ if (!_isSubscribed)
+ return;
+
+ var grabArgs = CreateSelectArgs(args.interactorObject);
+ _selectArgs[args.interactorObject] = grabArgs;
+
+ if (args.interactorObject is Component component && component.TryGetComponent(out XriGrabberBridge grabber))
+ grabber.RaiseBeforeGrabbed(grabArgs);
+
+ _interactable.RaiseBeforeGrabbed(grabArgs);
+ }
+
+ private void CollectColliders()
+ {
+ GetComponentsInChildren(_colliderBuffer);
+ _xrInteractable.colliders.Clear();
+ foreach (var itemCollider in _colliderBuffer)
+ {
+ // Same as XRI: triggers are usually snap volumes and don't count.
+ if (!itemCollider.isTrigger)
+ _xrInteractable.colliders.Add(itemCollider);
+ }
+
+ _colliderBuffer.Clear();
+
+ if (_xrInteractable.colliders.Count == 0)
+ Logger.LogWarning($"[XRI] {name} has no colliders. It can't be grabbed or hovered.", LogCat.VR);
+ }
+
+ private VrGrabArgs CreateSelectArgs(IXRInteractor interactor)
+ {
+ if (interactor is Component component && component.TryGetComponent(out XriGrabberBridge grabber))
+ return grabber.CreateSelectArgs(_interactable, _xrInteractable);
+
+ return CreateOtherArgs(interactor);
+ }
+
+ private VrGrabArgs CreateOtherArgs(IXRInteractor interactor)
+ {
+ var kind = interactor is XRSocketInteractor ? VrGrabberKind.Socket : VrGrabberKind.Other;
+ var grabberGo = interactor is Component component ? component.gameObject : null;
+ return new VrGrabArgs(kind, VrHandSide.Left, _interactable, grabberGo);
+ }
+
+ ///
+ /// Only hands hover (focus label, highlight). With both hands on one object, HoverEntered is raised for the
+ /// first and HoverExited for the last hand, so that the label doesn't vanish while one hand still hovers.
+ /// Near-Far hovers only its closest target, so overlapping objects don't flicker.
+ ///
+ private void OnHoverEntered(HoverEnterEventArgs args)
+ {
+ if (args.interactorObject is not Component component ||
+ !component.TryGetComponent(out XriGrabberBridge grabber))
+ return;
+
+ if (_handHovers.Add(args.interactorObject) && _handHovers.Count == 1)
+ _interactable.RaiseHoverEntered(grabber.CreateHoverArgs(_interactable, _xrInteractable));
+ }
+
+ private void OnHoverExited(HoverExitEventArgs args)
+ {
+ if (args.interactorObject is not Component component ||
+ !component.TryGetComponent(out XriGrabberBridge grabber))
+ return;
+
+ if (_handHovers.Remove(args.interactorObject) && _handHovers.Count == 0)
+ _interactable.RaiseHoverExited(grabber.CreateHoverArgs(_interactable, _xrInteractable));
+ }
+
+ private void OnSelectEntered(SelectEnterEventArgs args)
+ {
+ if (!_selectArgs.TryGetValue(args.interactorObject, out var grabArgs))
+ {
+ // Interactables without GothicGrabInteractable (e.g. XRSimpleInteractable) have no OnSelectEntering.
+ grabArgs = CreateSelectArgs(args.interactorObject);
+ _selectArgs[args.interactorObject] = grabArgs;
+ }
+
+ _interactable.RaiseGrabbed(grabArgs);
+ }
+
+ private void OnSelectExited(SelectExitEventArgs args)
+ {
+ if (!_selectArgs.Remove(args.interactorObject, out var grabArgs))
+ grabArgs = CreateOtherArgs(args.interactorObject);
+
+ _interactable.RaiseReleased(grabArgs);
+ }
+ }
+}
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriInteractableBridge.cs.meta b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriInteractableBridge.cs.meta
new file mode 100644
index 000000000..f6f537cb2
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriInteractableBridge.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: d53defac19fbb474d81910e60e275fd7
\ No newline at end of file
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriLineOfSightFilter.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriLineOfSightFilter.cs
new file mode 100644
index 000000000..a094ef69c
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriLineOfSightFilter.cs
@@ -0,0 +1,80 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.XR.Interaction.Toolkit.Filtering;
+using UnityEngine.XR.Interaction.Toolkit.Interactables;
+using UnityEngine.XR.Interaction.Toolkit.Interactors;
+using UnityEngine.XR.Interaction.Toolkit.Utilities;
+
+namespace Gothic.VR.Interaction.Backends.Xri
+{
+ ///
+ /// Target filter of the Near-Far interactors: an object can only be hovered and grabbed if nothing is between
+ /// the hand and the object (no distance grab through fences, walls or chests).
+ /// A ray from the hand to the closest point of the target must not hit any collider other than the target's own.
+ /// Targets touching the hand are always allowed, targets beyond the max distance never (the far ray is longer, as
+ /// it also points at UI).
+ ///
+ public class XriLineOfSightFilter : XRBaseTargetFilter
+ {
+ [Tooltip("Layers which block the line of sight.")]
+ [SerializeField] private LayerMask _blockingLayers = 1;
+
+ [Tooltip("Targets further away (m) can't be hovered or grabbed.")]
+ [SerializeField] private float _maxDistance = 10f;
+
+ [Tooltip("Targets closer to the hand (m) skip the check.")]
+ [SerializeField] private float _minCheckDistance = 0.15f;
+
+ [Tooltip("The ray ends this far (m) in front of the target's closest point, as the point lies on its surface.")]
+ [SerializeField] private float _surfaceTolerance = 0.02f;
+
+ private readonly RaycastHit[] _hits = new RaycastHit[16];
+
+ public override void Process(IXRInteractor interactor, List targets,
+ List results)
+ {
+ var origin = GetOrigin(interactor);
+ foreach (var target in targets)
+ {
+ if (IsInLineOfSight(origin, target))
+ results.Add(target);
+ }
+ }
+
+ private static Vector3 GetOrigin(IXRInteractor interactor)
+ {
+ if (interactor is NearFarInteractor nearFar && nearFar.nearInteractionCaster != null &&
+ nearFar.nearInteractionCaster.effectiveCastOrigin != null)
+ return nearFar.nearInteractionCaster.effectiveCastOrigin.position;
+
+ return interactor.transform.position;
+ }
+
+ private bool IsInLineOfSight(Vector3 origin, IXRInteractable target)
+ {
+ if (!XRInteractableUtility.TryGetClosestPointOnCollider(target, origin, out var distanceInfo))
+ return true;
+
+ var toTarget = distanceInfo.point - origin;
+ var distance = toTarget.magnitude;
+ if (distance > _maxDistance)
+ return false;
+
+ if (distance <= _minCheckDistance)
+ return true;
+
+ var hitCount = Physics.RaycastNonAlloc(origin, toTarget / distance, _hits, distance - _surfaceTolerance,
+ _blockingLayers, QueryTriggerInteraction.Ignore);
+
+ var targetColliders = (target as XRBaseInteractable)?.colliders;
+ for (var i = 0; i < hitCount; i++)
+ {
+ var hitCollider = _hits[i].collider;
+ if (targetColliders == null || !targetColliders.Contains(hitCollider))
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriLineOfSightFilter.cs.meta b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriLineOfSightFilter.cs.meta
new file mode 100644
index 000000000..17b11b932
--- /dev/null
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriLineOfSightFilter.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 06d37e5228fbbc744a06dbbcbfa399a9
\ No newline at end of file
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriRig.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriRig.cs
index a1f26e6e4..ea06a69bc 100644
--- a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriRig.cs
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriRig.cs
@@ -34,6 +34,13 @@ public class XriRig : MonoBehaviour, IVrRig
[SerializeField] private Transform _leftController;
[SerializeField] private Transform _rightController;
+ [Header("Grabbing")]
+ [Tooltip("Near-Far interactor of the left hand (direct and distance grab, UI).")]
+ [SerializeField] private XriGrabberBridge _leftGrabber;
+
+ [Tooltip("Near-Far interactor of the right hand (direct and distance grab, UI).")]
+ [SerializeField] private XriGrabberBridge _rightGrabber;
+
[Tooltip("Fade on the camera, driven by Fade(). WallFade on the camera uses it too.")]
[SerializeField] private ScreenFade _screenFade;
@@ -74,9 +81,8 @@ public class XriRig : MonoBehaviour, IVrRig
[Tooltip("Below this HMD height (m), the Standing setting doesn't scale (no headset, not tracked yet).")]
[SerializeField] private float _minCalibrationHeight = 0.5f;
- private static readonly IReadOnlyList _noGrabbers = Array.Empty();
-
private XriInput _xriInput;
+ private List _handGrabbers;
private Transform _cameraOffset;
private bool _turnEnabled = true;
private bool _teleportEnabled = true;
@@ -198,8 +204,22 @@ public float StepOffset
public float FadeAlpha => _screenFade != null ? _screenFade.FadeAlpha : 0f;
- // TODO HVR phase 2: Near-Far interactors.
- public IReadOnlyList HandGrabbers => _noGrabbers;
+ ///
+ /// One Near-Far interactor per hand. Resolved lazily, as adapters on this GameObject ask in their Awake.
+ ///
+ public IReadOnlyList HandGrabbers
+ {
+ get
+ {
+ if (_handGrabbers != null)
+ return _handGrabbers;
+
+ _handGrabbers = new List();
+ AddGrabber(_leftGrabber, VrHandSide.Left);
+ AddGrabber(_rightGrabber, VrHandSide.Right);
+ return _handGrabbers;
+ }
+ }
private Transform CameraOffset => _cameraOffset ??= _origin.CameraFloorOffsetObject.transform;
@@ -385,9 +405,32 @@ private void OnTeleportLocomotionEnded(LocomotionProvider provider)
Teleported?.Invoke(_teleportPosition);
}
+ private void AddGrabber(XriGrabberBridge grabber, VrHandSide side)
+ {
+ if (grabber != null)
+ _handGrabbers.Add(grabber);
+ else
+ Logger.LogError($"[XRI] XriRig has no grabber for the {side} hand. Grabbing won't work.", LogCat.VR);
+ }
+
+ ///
+ /// Grabbing and hovering (direct and distance) of both hands. UI pointing keeps working.
+ /// Objects already held stay in the hand.
+ ///
public void SetGrabbingEnabled(bool isEnabled)
{
- // NOP until HVR phase 2 (interactors).
+ SetGrabbingEnabled(VrHandSide.Left, isEnabled);
+ SetGrabbingEnabled(VrHandSide.Right, isEnabled);
+ }
+
+ public void SetGrabbingEnabled(VrHandSide side, bool isEnabled)
+ {
+ var grabber = side == VrHandSide.Left ? _leftGrabber : _rightGrabber;
+ if (grabber == null)
+ return;
+
+ grabber.Interactor.allowSelect = isEnabled;
+ grabber.Interactor.allowHover = isEnabled;
}
public void Fade(float alpha, float speed)
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriUiPointers.cs b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriUiPointers.cs
index 854fa5886..229e58277 100644
--- a/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriUiPointers.cs
+++ b/Assets/Gothic-VR/Scripts/Interaction/Backends/Xri/XriUiPointers.cs
@@ -10,7 +10,7 @@
namespace Gothic.VR.Interaction.Backends.Xri
{
///
- /// UI laser pointers of the XRI rig: one XRRayInteractor per controller (UI only, "UI Ray" on the player prefab)
+ /// UI laser pointers of the XRI rig: the far ray of each hand's NearFarInteractor (also used for distance grabs)
/// and the XRUIInputModule on the player's EventSystem. A canvas is hit only once it has a
/// TrackedDeviceGraphicRaycaster, which RegisterCanvas() adds.
///
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Components/VrInteractable.cs b/Assets/Gothic-VR/Scripts/Interaction/Components/VrInteractable.cs
index 908a55e21..6c3afedca 100644
--- a/Assets/Gothic-VR/Scripts/Interaction/Components/VrInteractable.cs
+++ b/Assets/Gothic-VR/Scripts/Interaction/Components/VrInteractable.cs
@@ -36,11 +36,22 @@ private IVrInteractableBackend Backend
get
{
if (_backend == null)
- _backend = GetComponent();
+ _backend = FindActiveBackend();
return _backend;
}
}
+ private IVrInteractableBackend FindActiveBackend()
+ {
+ foreach (var backend in GetComponents())
+ {
+ if (backend.IsActive)
+ return backend;
+ }
+
+ return null;
+ }
+
///
/// The VrInteractable on this GameObject or (if none) the first one below it.
///
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Models/VrGrabberKind.cs b/Assets/Gothic-VR/Scripts/Interaction/Models/VrGrabberKind.cs
index 43bd2b592..c28bc906e 100644
--- a/Assets/Gothic-VR/Scripts/Interaction/Models/VrGrabberKind.cs
+++ b/Assets/Gothic-VR/Scripts/Interaction/Models/VrGrabberKind.cs
@@ -11,7 +11,8 @@ public enum VrGrabberKind
Hand,
///
- /// A hand pulling an object from a distance (remote grab). The same object is grabbed by the Hand afterwards.
+ /// A hand pulling an object from a distance (remote grab). On HVR, the same object is grabbed by the Hand
+ /// afterwards; on XRI, the distance grab is the only grab event.
///
Distance,
diff --git a/Assets/Gothic-VR/Scripts/Interaction/Ports/IVrInteractableBackend.cs b/Assets/Gothic-VR/Scripts/Interaction/Ports/IVrInteractableBackend.cs
index b842a3684..b5ba731c2 100644
--- a/Assets/Gothic-VR/Scripts/Interaction/Ports/IVrInteractableBackend.cs
+++ b/Assets/Gothic-VR/Scripts/Interaction/Ports/IVrInteractableBackend.cs
@@ -6,9 +6,15 @@ namespace Gothic.VR.Interaction.Ports
///
/// Implemented by the backend bridge next to a VrInteractable. Game code uses VrInteractable instead.
/// The bridge also raises the VrInteractable events.
+ /// Prefabs carry the bridges of all backends; only the bridge of the active backend is used.
///
public interface IVrInteractableBackend
{
+ ///
+ /// Whether this bridge belongs to the active VR backend.
+ ///
+ bool IsActive { get; }
+
bool IsHeld { get; }
IReadOnlyList Colliders { get; }
void ForceRelease();
diff --git a/Docs/HVR-replacement/phase-2-grabbing.md b/Docs/HVR-replacement/phase-2-grabbing.md
index e1db6de8c..ec33126a0 100644
--- a/Docs/HVR-replacement/phase-2-grabbing.md
+++ b/Docs/HVR-replacement/phase-2-grabbing.md
@@ -8,13 +8,45 @@ talking to or looting NPCs.
## Exit criteria
-- [ ] Item pickup by hand and by distance grab adds to the inventory exactly once; two-hand grab doesn't double-count;
- drop removes.
+- [x] Item pickup by hand and by distance grab adds to the inventory exactly once; two-hand grab doesn't double-count;
+ drop removes. (2a. Note: world items have `Amount = 0` in the ZEN, so `VRPlayerService` adds 0 of them on both
+ backends; verified with `Amount = 1` set at runtime. Pre-existing, not fixed here.)
- [ ] Melee: weapon velocity detection (`VrWeaponAttackDomain`) triggers hits with the same thresholds as on HVR.
-- [ ] Hover shows the name label and highlight (`VRFocus`).
+- [x] Hover shows the name label and highlight (`VRFocus`). (2a: items. Mobs/NPCs in 2b.)
- [ ] Grab on NPC = talk / skip line; grab on a dead NPC = loot panel; grab on a mob = use it.
-- [ ] Held/socketed items don't push the player's `CharacterController`.
-- [ ] Swimming disables grabbing and hovering (`IVrRig.SetGrabbingEnabled(false)`).
+- [x] Held/socketed items don't push the player's `CharacterController`. (2a: held items; XRI ignores the
+ CharacterController of the selecting rig on top of `VRPlayerService.IgnorePlayerCollision`. Sockets in phase 3.)
+- [x] Swimming disables grabbing and hovering (`IVrRig.SetGrabbingEnabled(false)`). (2a; UI pointing stays.)
+
+## Split
+
+- **2a - items** (`engine/hvr-replacement-2a`): Near-Far per hand, `GothicGrabInteractable`, `XriInteractableBridge`,
+ `XriGrabberBridge`, `XriLineOfSightFilter`, `oCItem.prefab`, hover, swim toggle.
+- **2b - mobs and NPCs**: `XRSimpleInteractable` + bridge on mobs/`oCNpc` (removes the `ForceRelease()` workaround in
+ `VRNpc.OnGrabbed`), melee velocity tuning, dig spots, `VRMouth` on the XRI camera.
+
+### 2a notes (where reality deviated)
+
+- `Kind` doesn't come from `selectionRegion`: with `farAttachMode = Near` (pull to the hand, like HVR's force grab)
+ a far grab has no attach offset, so Near-Far reports `Near` for it. `XriGrabberBridge` decides by the distance
+ hand → closest collider point at selection (near caster radius + 5 cm). Release events reuse the kind of the grab.
+- `XriGrabberBridge.Kind` is always `Hand` (one interactor per hand does both); the per-event `VrGrabArgs.Kind` says
+ `Hand` or `Distance`. So `VRPlayerWeaponInteraction` (filters grabbers by `Kind == Hand`) also gets distance grabs,
+ which end in the hand on XRI.
+- Prefabs carry both backends. `IVrInteractableBackend.IsActive` (bridges `[Inject] IVrBackend`) picks the bridge;
+ `VrInteractable` uses the active one. `GothicGrabInteractable` is **disabled in `oCItem.prefab`** and only
+ `XriInteractableBridge.Start` enables it on Xri (after collecting the runtime colliders), so the Hvr backend never
+ creates an `XRInteractionManager`. `SetupColliders()` re-collects and re-registers (disable/enable) when not held.
+- `unparentTransformOnGrab = false`: `VRPlayerService` finds the item's `VobLoader` via `GetComponentInParent`.
+- Hover: Near-Far only ever has one valid target (closest). The bridge forwards hovers of hands only and counts
+ them: `HoverEntered` for the first hand, `HoverExited` for the last. Near-Far stops hovering while it selects,
+ so the label goes away once the item is in the hand (same order as HVR: hover, grab, hover exit).
+- Layer masks: near caster `VobItem, VobItemNoWorldCollision, VobNpcOrMonster, VobMovable, Grabbable`; far caster
+ the same + `Default, UI` (far ray also does UI, cast distance 30 m like the 1c UI ray); line of sight blocked by
+ `Default, VobItem, VobNpcOrMonster, VobMovable, Grabbable`, grab/hover range 10 m (`XriLineOfSightFilter`).
+- Held items get `RigidbodyInterpolation.Interpolate` (restored on drop). Throw: XRI defaults (`throwOnDetach`,
+ `throwVelocityScale` 1.5), not tuned against HVR yet.
+- Interim hand visual: a 4 cm sphere (`Hand Placeholder`, URP Lit, no collider) under each Near-Far interactor.
## Mapping