diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 75386b6ac61ec54f45ee08c879b5ca1065adff12..4c19e5e8343a76f955090776877c98da680d2605 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -323,6 +323,111 @@ Transform:
   - {fileID: 2127634081}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &315870489
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 315870490}
+  - component: {fileID: 315870493}
+  - component: {fileID: 315870492}
+  - component: {fileID: 315870491}
+  m_Layer: 0
+  m_Name: Model
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &315870490
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315870489}
+  serializedVersion: 2
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0.5, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1628232501}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &315870491
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315870489}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 0
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &315870492
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315870489}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, 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_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &315870493
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315870489}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!1 &484130344
 GameObject:
   m_ObjectHideFlags: 0
@@ -353,7 +458,6 @@ Transform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 1374546119}
   - {fileID: 117855957}
   - {fileID: 542408818}
   m_Father: {fileID: 239523007}
@@ -420,6 +524,139 @@ Transform:
   m_CorrespondingSourceObject: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3}
   m_PrefabInstance: {fileID: 2621625618582748302}
   m_PrefabAsset: {fileID: 0}
+--- !u!1 &576314395
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 576314396}
+  - component: {fileID: 576314399}
+  - component: {fileID: 576314398}
+  - component: {fileID: 576314397}
+  - component: {fileID: 576314400}
+  m_Layer: 0
+  m_Name: Marker
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &576314396
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 576314395}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 2.08, y: 2, z: 3.57}
+  m_LocalScale: {x: 1, y: 4, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1098815287}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &576314397
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 576314395}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 0
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &576314398
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 576314395}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, 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_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &576314399
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 576314395}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!54 &576314400
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 576314395}
+  serializedVersion: 4
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_CenterOfMass: {x: 0, y: 0, z: 0}
+  m_InertiaTensor: {x: 1, y: 1, z: 1}
+  m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ImplicitCom: 1
+  m_ImplicitTensor: 1
+  m_UseGravity: 0
+  m_IsKinematic: 0
+  m_Interpolate: 0
+  m_Constraints: 126
+  m_CollisionDetection: 0
 --- !u!1 &675919034
 GameObject:
   m_ObjectHideFlags: 0
@@ -726,9 +963,143 @@ Transform:
   m_LocalPosition: {x: 0, y: -0.125, z: 0}
   m_LocalScale: {x: 100, y: 0.25, z: 100}
   m_ConstrainProportionsScale: 0
-  m_Children: []
+  m_Children:
+  - {fileID: 779633712}
   m_Father: {fileID: 1098815287}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &779633711
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 779633712}
+  - component: {fileID: 779633716}
+  - component: {fileID: 779633715}
+  - component: {fileID: 779633714}
+  - component: {fileID: 779633713}
+  m_Layer: 0
+  m_Name: UnderFloor
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &779633712
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 779633711}
+  serializedVersion: 2
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: -5, z: 0}
+  m_LocalScale: {x: 1, y: 10, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 770593023}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &779633713
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 779633711}
+  serializedVersion: 4
+  m_Mass: 0.0000001
+  m_Drag: 0
+  m_AngularDrag: 0
+  m_CenterOfMass: {x: 0, y: 0, z: 0}
+  m_InertiaTensor: {x: 1, y: 1, z: 1}
+  m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ImplicitCom: 1
+  m_ImplicitTensor: 1
+  m_UseGravity: 0
+  m_IsKinematic: 0
+  m_Interpolate: 0
+  m_Constraints: 126
+  m_CollisionDetection: 0
+--- !u!65 &779633714
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 779633711}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 0
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &779633715
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 779633711}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, 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_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &779633716
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 779633711}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!1 &963194225
 GameObject:
   m_ObjectHideFlags: 0
@@ -741,7 +1112,6 @@ GameObject:
   - component: {fileID: 963194227}
   - component: {fileID: 963194226}
   - component: {fileID: 963194229}
-  - component: {fileID: 963194230}
   m_Layer: 0
   m_Name: MainCamera
   m_TagString: Untagged
@@ -836,30 +1206,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   target: {fileID: 117855957}
-  followingTime: 0.2
+  followingTime: 0.1
   mouseSensitivity: 2
-  mouseTurn: {x: 0, y: 0}
---- !u!65 &963194230
-BoxCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 963194225}
-  m_Material: {fileID: 0}
-  m_IncludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_ExcludeLayers:
-    serializedVersion: 2
-    m_Bits: 0
-  m_LayerOverridePriority: 0
-  m_IsTrigger: 1
-  m_ProvidesContacts: 0
-  m_Enabled: 1
-  serializedVersion: 3
-  m_Size: {x: 1, y: 1, z: 1}
-  m_Center: {x: 0, y: 0, z: 0}
 --- !u!4 &1093326602 stripped
 Transform:
   m_CorrespondingSourceObject: {fileID: 8728181779748450929, guid: 1a7698227caac3d429dceb8aa5056502, type: 3}
@@ -897,6 +1245,8 @@ Transform:
   m_Children:
   - {fileID: 705507995}
   - {fileID: 770593023}
+  - {fileID: 576314396}
+  - {fileID: 1628232501}
   m_Father: {fileID: 239523007}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!114 &1098815288
@@ -911,7 +1261,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: c54dc993f0d1e36499ea37e182a87cbc, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
---- !u!1 &1374546118
+--- !u!1 &1628232500
 GameObject:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
@@ -919,39 +1269,39 @@ GameObject:
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 6
   m_Component:
-  - component: {fileID: 1374546119}
-  - component: {fileID: 1374546122}
-  - component: {fileID: 1374546121}
-  - component: {fileID: 1374546120}
-  m_Layer: 7
-  m_Name: Marker
+  - component: {fileID: 1628232501}
+  - component: {fileID: 1628232503}
+  - component: {fileID: 1628232502}
+  m_Layer: 12
+  m_Name: TestInteractable
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!4 &1374546119
+--- !u!4 &1628232501
 Transform:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1374546118}
+  m_GameObject: {fileID: 1628232500}
   serializedVersion: 2
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 5, y: 2.5, z: 5}
-  m_LocalScale: {x: 5, y: 5, z: 5}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 3, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 484130345}
+  m_Children:
+  - {fileID: 315870490}
+  m_Father: {fileID: 1098815287}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!65 &1374546120
+--- !u!65 &1628232502
 BoxCollider:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1374546118}
+  m_GameObject: {fileID: 1628232500}
   m_Material: {fileID: 0}
   m_IncludeLayers:
     serializedVersion: 2
@@ -960,62 +1310,24 @@ BoxCollider:
     serializedVersion: 2
     m_Bits: 0
   m_LayerOverridePriority: 0
-  m_IsTrigger: 0
+  m_IsTrigger: 1
   m_ProvidesContacts: 0
   m_Enabled: 1
   serializedVersion: 3
   m_Size: {x: 1, y: 1, z: 1}
-  m_Center: {x: 0, y: 0, z: 0}
---- !u!23 &1374546121
-MeshRenderer:
+  m_Center: {x: -1, y: 0.5, z: 0}
+--- !u!114 &1628232503
+MonoBehaviour:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1374546118}
+  m_GameObject: {fileID: 1628232500}
   m_Enabled: 1
-  m_CastShadows: 1
-  m_ReceiveShadows: 1
-  m_DynamicOccludee: 1
-  m_StaticShadowCaster: 0
-  m_MotionVectors: 1
-  m_LightProbeUsage: 1
-  m_ReflectionProbeUsage: 1
-  m_RayTracingMode: 2
-  m_RayTraceProcedural: 0
-  m_RenderingLayerMask: 1
-  m_RendererPriority: 0
-  m_Materials:
-  - {fileID: 10303, 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_SortingLayerID: 0
-  m_SortingLayer: 0
-  m_SortingOrder: 0
-  m_AdditionalVertexStreams: {fileID: 0}
---- !u!33 &1374546122
-MeshFilter:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1374546118}
-  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: afc0fd7c16afe4a42a82353df9b3a73b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &2127634080
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs b/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs
index 5b9556c9eff16e61d41cda5a308e8847fb2eb645..2d47baaafca9453bf465a185297f8fa2fe0dda87 100644
--- a/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs
+++ b/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs
@@ -8,12 +8,8 @@ public class DummyAnimationController : AnimationController{
     private readonly Dummy dummy;
 
     // Constructor
-    public DummyAnimationController(Dummy dummy){
+    public DummyAnimationController(Dummy dummy) : base(dummy) {
         this.dummy = dummy;
-        model = dummy.transform.Find("Model");
-        animator = model.GetComponent<Animator>();
-        meshRenderer = model.GetComponent<MeshRenderer>();
-
         dummy.OnDamagedEvent += IndicateDamaged;
         dummy.stateController.OnDamageDelayOverEvent += IndicateUnamaged;
     }
diff --git a/Assets/Scripts/Core/Game/Data/GameInput.cs b/Assets/Scripts/Core/Game/Data/GameInput.cs
index 37ac6ace1595d500826f7faaeb270761820e3662..1bb69dd5f1ca1450177d03a8580b4421377703d2 100644
--- a/Assets/Scripts/Core/Game/Data/GameInput.cs
+++ b/Assets/Scripts/Core/Game/Data/GameInput.cs
@@ -1,3 +1,4 @@
+using System;
 using UnityEngine;
 
 public class GameInput : MonoBehaviour {
@@ -5,10 +6,10 @@ public class GameInput : MonoBehaviour {
     public static GameInput instance;
 
     // Attributes
-    public KeyCode backButton = KeyCode.Escape;
-    public KeyCode attackButton = KeyCode.Z;
-    public KeyCode attackAlternateButton = KeyCode.X;
-    public KeyCode interactButton = KeyCode.C;
+    [NonSerialized] public KeyCode backButton = KeyCode.Escape;
+    [NonSerialized] public KeyCode attackButton = KeyCode.Z;
+    [NonSerialized] public KeyCode attackAlternateButton = KeyCode.X;
+    [NonSerialized] public KeyCode interactButton = KeyCode.C;
 
     // Constructor
     protected void Awake(){
diff --git a/Assets/Scripts/Core/Objects/Interactables.meta b/Assets/Scripts/Core/Objects/Interactables.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e71038f68061d8a22f30c62ef49b9d8c4034d106
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f6c1c6289ba0f0841bba1d13d1473858
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cbd1d37f8d6b6ff2113f2f22d134f8f1a0ea39d2
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs
@@ -0,0 +1,19 @@
+using System;
+using UnityEngine;
+
+public abstract class InteractableObject : MonoBehaviour, IInteractable{
+    // Attributes
+    public event Action OnInteractAreaExitEvent;
+    public event Action OnInteractAreaEnterEvent;
+
+    // Function
+    public abstract void Interact();
+
+    public void InvokeOnInteractAreaEnterEvent(){
+        OnInteractAreaEnterEvent?.Invoke();
+    }
+
+    public void InvokeOnInteractAreaExitEvent(){
+        OnInteractAreaExitEvent?.Invoke();
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs.meta b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c0f4bcafd8f900e717e6a3fd29475c80dc1fa8af
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 781ad64a453c24349bdd28bc5764d18d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable.meta b/Assets/Scripts/Core/Objects/Interactables/TestInteractable.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3bbaa042e745a0261d3afc013d32805ff533e79a
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0366eb0d236cb3344a509e8d4ac8decf
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fb7f9c47602f95ebdd541eff6638c0b493a8949e
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs
@@ -0,0 +1,17 @@
+using System;
+using UnityEngine;
+
+public class TestInteractable : InteractableObject {
+    // Attributes
+    private TestInteractableAnimationController animationController;
+    
+    // Constructor
+    protected void Start(){
+        animationController = new TestInteractableAnimationController(this);
+    }
+
+    // Function
+    public override void Interact(){
+        Debug.Log("Test Interactable interacted");
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs.meta b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9695c8edf1f5f5c70613026f5d5c419fd4834cb5
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: afc0fd7c16afe4a42a82353df9b3a73b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..be1a8021de3a9f8ea7be2b73dc3d1d3709cb058b
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs
@@ -0,0 +1,25 @@
+
+using UnityEngine;
+
+public class TestInteractableAnimationController : AnimationController{
+    // Attributes
+    private readonly TestInteractable testInteractable;
+
+    // Constructor
+    public TestInteractableAnimationController(TestInteractable testInteractable) : base(testInteractable) {
+        this.testInteractable = testInteractable;
+        testInteractable.OnInteractAreaEnterEvent += IndicateInteractable;
+        testInteractable.OnInteractAreaExitEvent += IndicateUninteractable;
+    }
+
+    // Functions
+    private void IndicateInteractable(){
+        Debug.Log("Test Interactable is interactable now");
+        meshRenderer.material.color = Color.yellow;
+    }
+
+    private void IndicateUninteractable(){
+        Debug.Log("Test Interactable is uninteractable now");
+        meshRenderer.material.color = Color.white;
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs.meta b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..22d02383cda1f902b2560f6292121b99c31e0f96
--- /dev/null
+++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bf936058791cb07489b259780ebf9c8f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Core/Player/Player.cs b/Assets/Scripts/Core/Player/Player.cs
index 36a2053474903119b531f746aa6b564d5cb4ace0..44c47ea373233f058fb038706f5b982da33ea963 100644
--- a/Assets/Scripts/Core/Player/Player.cs
+++ b/Assets/Scripts/Core/Player/Player.cs
@@ -30,17 +30,31 @@ public class Player : PlayerEntity {
     }
 
     // Functions
-    new void Update(){
+    protected new void Update(){
         base.Update();
 
         inputController.HandleInputs();
     }
 
-    new void FixedUpdate(){
+    protected new void FixedUpdate(){
         base.FixedUpdate();
 
         movementController.HandleMovement();
 
         stateController.UpdateState();
     }
+
+    protected void OnTriggerEnter(Collider otherCollider){
+        otherCollider.transform.TryGetComponent<IInteractable>(out var interactable);
+        if(interactable == null) return;
+        interactable.InvokeOnInteractAreaEnterEvent();
+        stateController.currentInteractables.Add(interactable);
+    }
+
+    protected void OnTriggerExit(Collider otherCollider){
+        otherCollider.transform.TryGetComponent<IInteractable>(out var interactable);
+        if(interactable == null) return;
+        interactable.InvokeOnInteractAreaExitEvent();
+        stateController.currentInteractables.Remove(interactable);
+    }
 }
diff --git a/Assets/Scripts/Core/Player/PlayerAnimationController.cs b/Assets/Scripts/Core/Player/PlayerAnimationController.cs
index aefafe9b004474ab9b321f9bec2778c22410a5e2..d1ff9f092fb2ba42b3f7b2a8b2f6e89a84c66329 100644
--- a/Assets/Scripts/Core/Player/PlayerAnimationController.cs
+++ b/Assets/Scripts/Core/Player/PlayerAnimationController.cs
@@ -11,12 +11,8 @@ public class PlayerAnimationController : AnimationController{
     private readonly PlayerStateController playerStateController;
 
     // Constructor
-    public PlayerAnimationController(Player player){
+    public PlayerAnimationController(Player player) : base(player) {
         this.player = player;
-        model = player.transform.Find("Model");
-        animator = model.GetComponent<Animator>();
-        meshRenderer = model.GetComponent<MeshRenderer>();
-
         player.stateController.OnStateChangeEvent += AnimateStates;
     }
 
diff --git a/Assets/Scripts/Core/Player/PlayerInputController.cs b/Assets/Scripts/Core/Player/PlayerInputController.cs
index 85e9ba176918365e5d7ace6a34204936acf9562b..4ebfcfcc8fe0c18ef574044eec67615eed409bf3 100644
--- a/Assets/Scripts/Core/Player/PlayerInputController.cs
+++ b/Assets/Scripts/Core/Player/PlayerInputController.cs
@@ -18,18 +18,21 @@ public class PlayerInputController{
         movementInputZ = Input.GetAxisRaw("Vertical");
 
         if(Input.GetKeyDown(GameInput.instance.attackButton)){
+            Debug.Log("Player is Attacking");
             if(player.Weapon == null) return;
 
             player.Weapon.Attack();
         }
         else if(Input.GetKeyDown(GameInput.instance.attackAlternateButton)){
+            Debug.Log("Player is Attacking (alternate)");
             if(player.Weapon == null) return;
 
             player.Weapon.AttackAlternate();
         }
         else if(Input.GetKeyDown(GameInput.instance.interactButton)){
-            ObjectManager.instance.LogObjects();
-            EntityManager.instance.LogObjects();
+            Debug.Log("Player is interacting");
+            IInteractable interactable = player.stateController.currentInteractables[player.stateController.currentInteractables.Count - 1];
+            interactable.Interact();
         }
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Core/Player/PlayerStateController.cs b/Assets/Scripts/Core/Player/PlayerStateController.cs
index c61b876498159c50e62afcce0f06ae4939875a37..60cec8c2be7d7aa0da5923622e4214b484441ae5 100644
--- a/Assets/Scripts/Core/Player/PlayerStateController.cs
+++ b/Assets/Scripts/Core/Player/PlayerStateController.cs
@@ -1,8 +1,10 @@
+using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerStateController : DamageableEntityStateController {
     // Attributes
     private readonly Player player;
+    public List<IInteractable> currentInteractables = new();
 
     // Contstructor
     public PlayerStateController(Player player) : base(player){
diff --git a/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs b/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs
index 78afaaf40fe2f2d97d94c6d3c511a300bc6d4952..cb89f776155f632cbecda63c81a644ac1f8834d0 100644
--- a/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs
+++ b/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs
@@ -5,4 +5,10 @@ public abstract class AnimationController {
     public Transform model;
     public MeshRenderer meshRenderer;
     public Animator animator;
+
+    public AnimationController(MonoBehaviour dummy){
+        model = dummy.transform.Find("Model");
+        animator = model.GetComponent<Animator>();
+        meshRenderer = model.GetComponent<MeshRenderer>();
+    }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Library/Interfaces/IInteractable.cs b/Assets/Scripts/Library/Interfaces/IInteractable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..60759163a6541e313e1936d517530912034370df
--- /dev/null
+++ b/Assets/Scripts/Library/Interfaces/IInteractable.cs
@@ -0,0 +1,9 @@
+using System;
+
+public interface IInteractable{
+    public void Interact();
+    public event Action OnInteractAreaExitEvent;
+    public event Action OnInteractAreaEnterEvent;
+    public void InvokeOnInteractAreaExitEvent();
+    public void InvokeOnInteractAreaEnterEvent();
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Library/Interfaces/IInteractable.cs.meta b/Assets/Scripts/Library/Interfaces/IInteractable.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a379d571989e901bb8e914f723c6fa1b79e0261c
--- /dev/null
+++ b/Assets/Scripts/Library/Interfaces/IInteractable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6dbba419075ee6045a2d4646d6865d36
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset
index 818c73dd4c8bed7e3227fc6014516f57769ca8ac..437784137bbfe478fd066e797eb10226a0983231 100644
--- a/ProjectSettings/DynamicsManager.asset
+++ b/ProjectSettings/DynamicsManager.asset
@@ -18,7 +18,7 @@ PhysicsManager:
   m_ClothInterCollisionDistance: 0
   m_ClothInterCollisionStiffness: 0
   m_ContactsGeneration: 1
-  m_LayerCollisionMatrix: fffffffffff0fffffff0fffffff8fffffff0fffffff0fffffffefffffff5ffff81f0ffff41f0ffffc1f0ffff49f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+  m_LayerCollisionMatrix: ffefffffffe0ffffffe0ffffffe0ffffffe0ffffffe0fffffffeffffffe5ffff81e0ffff41e0ffffc1e0ffff41e0ffff40e0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   m_SimulationMode: 0
   m_AutoSyncTransforms: 0
   m_ReuseCollisionCallbacks: 1
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index 6cd419fc84e3ae26d9bc9c118724de2bc2a58f0c..5033ce2f3782dc8c3b7218b7b2a8773658dd7a65 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -20,7 +20,7 @@ TagManager:
   - EnemyAttack
   - EnvironmentAttack
   - Collectible
-  - 
+  - Interactable
   - 
   - 
   -