1
0
forked from cgvr/DeltaVR

deltavr multiplayer 2.0

This commit is contained in:
Toomas Tamm
2023-05-08 15:56:10 +03:00
parent 978809a002
commit 07b9b9e2f4
10937 changed files with 2968397 additions and 1521012 deletions

View File

@@ -0,0 +1,247 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &876842842715561968
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2802147078981842080}
- component: {fileID: 6988039503374284247}
- component: {fileID: 4784684551416650039}
- component: {fileID: 3580593382982171501}
- component: {fileID: 3642215892935434233}
- component: {fileID: 831144622652180275}
m_Layer: 0
m_Name: CustomNetworkManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2802147078981842080
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 876842842715561968}
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: 8780997007293976557}
m_Father: {fileID: 0}
m_RootOrder: 29
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6988039503374284247
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 876842842715561968}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d2c95dfde7d73b54dbbdc23155d35d36, type: 3}
m_Name:
m_EditorClassIdentifier:
_refreshDefaultPrefabs: 1
_runInBackground: 1
_dontDestroyOnLoad: 1
_objectPool: {fileID: 0}
_persistence: 0
_logging: {fileID: 0}
_spawnablePrefabs: {fileID: 11400000, guid: 3d9bdb6046f8fd44c9d9a030de25e326, type: 2}
--- !u!114 &4784684551416650039
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 876842842715561968}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7caebc6860ea5ac48881f8aaa4148d9b, type: 3}
m_Name:
m_EditorClassIdentifier:
secret: deltavrsecret
port: 8989
discoveryInterval: 1
automatic: 1
--- !u!114 &3580593382982171501
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 876842842715561968}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 472203ab25d71a0458e5e0d0a477438e, type: 3}
m_Name:
m_EditorClassIdentifier:
networkDiscovery: {fileID: 4784684551416650039}
--- !u!114 &3642215892935434233
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 876842842715561968}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7d331f979d46e8e4a9fc90070c596d44, type: 3}
m_Name:
m_EditorClassIdentifier:
_useNetworkLod: 0
_levelOfDetailDistances: []
_updateHostVisibility: 1
_defaultConditions: []
--- !u!114 &831144622652180275
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 876842842715561968}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 211a9f6ec51ddc14f908f5acc0cd0423, type: 3}
m_Name:
m_EditorClassIdentifier:
_playerPrefab: {fileID: 8350280794124178279, guid: 9cef054096f9cf447b78429150d5b323,
type: 3}
_addToDefaultScene: 1
Spawns:
- {fileID: 0}
--- !u!1 &2679631814444077726
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8780997007293976557}
- component: {fileID: 2333871227056568492}
- component: {fileID: 5396463344363376651}
m_Layer: 0
m_Name: Background camera
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8780997007293976557
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2679631814444077726}
m_LocalRotation: {x: 0.14099358, y: -0.4285813, z: 0.06396106, w: 0.8901393}
m_LocalPosition: {x: 46.37564, y: 36.39309, z: -66.39122}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2802147078981842080}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!20 &2333871227056568492
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2679631814444077726}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!114 &5396463344363376651
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2679631814444077726}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
m_TaaSettings:
quality: 3
frameInfluence: 0.1
jitterScale: 1
mipBias: 0
varianceClampScale: 0.9
contrastAdaptiveSharpening: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0e606bd969148744e9ebcac2f75b0970
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: db237180b4a44cb8b3c39c6123ff865b
timeCreated: 1679225478

View File

@@ -0,0 +1,85 @@
using FishNet.Object;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
namespace _PROJECT.Multiplayer
{
public class XRMultiplayerInteractionManager : XRInteractionManager
{
private XRMultiplayerInteractionManagerBehavior _networkBehavior;
private new void Awake()
{
base.Awake();
_networkBehavior = GetComponentInChildren<XRMultiplayerInteractionManagerBehavior>();
}
public override void SelectEnter(IXRSelectInteractor interactor, IXRSelectInteractable interactable)
{
Debug.Log(interactor);
Debug.Log(interactable);
Debug.Log("SelectEnter called on " + interactable.transform.name + " by " + interactor.transform.name);
NetworkObject nInteractable = GetNetworkObject(interactable);
if (nInteractable == null)
{
// Interactable is not a network object, so we can just select it.
base.SelectEnter(interactor, interactable);
return;
}
NetworkObject nInteractor = GetNetworkObject(interactor);
if (nInteractor == null)
{
// Interactable is a network object, but interactor is not.
base.SelectEnter(interactor, interactable);
return;
}
// Both interactable and interactor are network objects, so we should broadcast selectEnter to all clients.
_networkBehavior.RequestSelectEnterBroadcastRPC(nInteractor, nInteractable);
}
public override void SelectExit(IXRSelectInteractor interactor, IXRSelectInteractable interactable)
{
Debug.Log("SelectExit called on " + interactable.transform.name + " by " + interactor.transform.name);
NetworkObject nInteractable = GetNetworkObject(interactable);
if (nInteractable == null)
{
// Interactable is not a network object, so we can just unselect it.
base.SelectExit(interactor, interactable);
return;
}
NetworkObject nInteractor = GetNetworkObject(interactor);
if (nInteractor == null)
{
// Interactable is a network object, but interactor is not.
base.SelectExit(interactor, interactable);
return;
}
// Both interactable and interactor are network objects, so we should broadcast selectExit to all clients.
_networkBehavior.RequestSelectExitBroadcastRPC(nInteractor, nInteractable);
}
private static NetworkObject GetNetworkObject(IXRInteractable interactable)
{
return interactable.transform.GetComponent<NetworkObject>();
}
private static NetworkObject GetNetworkObject(IXRInteractor interactor)
{
return interactor.transform.GetComponent<NetworkObject>();
}
public void BaseSelectEnter(IXRSelectInteractor iInteractor, IXRSelectInteractable iInteractable)
{
base.SelectEnter(iInteractor, iInteractable);
}
public void BaseSelectExit(IXRSelectInteractor iInteractor, IXRSelectInteractable iInteractable)
{
base.SelectExit(iInteractor, iInteractable);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a8ff406473ac40c988cd296f4d8c4f62
timeCreated: 1679223018

View File

@@ -0,0 +1,97 @@
using FishNet.Connection;
using FishNet.Object;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
namespace _PROJECT.Multiplayer
{
public class XRMultiplayerInteractionManagerBehavior : NetworkBehaviour
{
private XRMultiplayerInteractionManager _manager;
private void Awake()
{
_manager = GetComponentInParent<XRMultiplayerInteractionManager>();
}
[ServerRpc(RequireOwnership = false)]
public void RequestSelectEnterBroadcastRPC(NetworkObject interactor, NetworkObject interactable, NetworkConnection conn = null)
{
Debug.Log("[SERVER] Received SelectEnter for " + interactable.name + " to " + interactor.name);
// Get interactable and interactor.
IXRSelectInteractable iInteractable = interactable.transform.GetComponent<IXRSelectInteractable>();
IXRSelectInteractor iInteractor = interactor.transform.GetComponent<IXRSelectInteractor>();
// If interactable or interactor is null, return.
if (iInteractable == null || iInteractor == null)
{
Debug.LogWarning("[SERVER] Unexpected null interactable or interactor in RequestSelectEnterBroadcastRPC.");
return;
};
// Broadcast select enter to all clients.
_manager.BaseSelectEnter(iInteractor, iInteractable);
SelectEnterBroadcastRPC(interactor, interactable);
}
[ObserversRpc]
public void SelectEnterBroadcastRPC(NetworkObject interactor, NetworkObject interactable)
{
Debug.Log("[CLIENT] Recieved SelectEnter from server for " + interactable.name + " to " + interactor.name);
// Get interactable and interactor.
IXRSelectInteractable iInteractable = interactable.transform.GetComponent<IXRSelectInteractable>();
IXRSelectInteractor iInteractor = interactor.transform.GetComponent<IXRSelectInteractor>();
// If interactable or interactor is null, return.
if (iInteractable == null || iInteractor == null)
{
Debug.LogWarning("[CLIENT] Unexpected null interactable or interactor in SelectEnterBroadcastRPC.");
return;
};
_manager.BaseSelectEnter(iInteractor, iInteractable);
}
[ServerRpc(RequireOwnership = false)]
public void RequestSelectExitBroadcastRPC(NetworkObject nInteractor, NetworkObject nInteractable)
{
Debug.Log("[SERVER] Received SelectExit for " + nInteractable.name + " to " + nInteractor.name);
// Get interactable and interactor.
IXRSelectInteractable iInteractable = nInteractable.transform.GetComponent<IXRSelectInteractable>();
IXRSelectInteractor iInteractor = nInteractor.transform.GetComponent<IXRSelectInteractor>();
// If interactable or interactor is null, return.
if (iInteractable == null || iInteractor == null)
{
Debug.LogWarning("[SERVER] Unexpected null interactable or interactor in RequestSelectExitBroadcastRPC.");
return;
};
// Broadcast select exit to all clients.
_manager.BaseSelectExit(iInteractor, iInteractable);
}
[ObserversRpc]
public void SelectExitBroadcastRPC(NetworkObject nInteractor, NetworkObject nInteractable)
{
Debug.Log("[CLIENT] Recieved SelectExit from server for " + nInteractable.name + " to " + nInteractor.name);
// Get interactable and interactor.
IXRSelectInteractable iInteractable = nInteractable.transform.GetComponent<IXRSelectInteractable>();
IXRSelectInteractor iInteractor = nInteractor.transform.GetComponent<IXRSelectInteractor>();
// If interactable or interactor is null, return.
if (iInteractable == null || iInteractor == null)
{
Debug.LogWarning("[CLIENT] Unexpected null interactable or interactor in SelectExitBroadcastRPC.");
return;
};
_manager.BaseSelectExit(iInteractor, iInteractable);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5ba3011b0b004a8089e25da0e59cf7e0
timeCreated: 1679225525

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8b7dbbb6a25201b498d50abb0ebd8ab9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,301 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1135870841938864998
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2179908692689602772}
- component: {fileID: 1377620620750533915}
- component: {fileID: 1970713256952188388}
- component: {fileID: 5044934254662751385}
m_Layer: 0
m_Name: Camera
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2179908692689602772
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1135870841938864998}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.8, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 7372783121920605696}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!20 &1377620620750533915
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1135870841938864998}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!81 &1970713256952188388
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1135870841938864998}
m_Enabled: 1
--- !u!114 &5044934254662751385
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1135870841938864998}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 0
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
m_TaaSettings:
quality: 3
frameInfluence: 0.1
jitterScale: 1
mipBias: 0
varianceClampScale: 0.9
contrastAdaptiveSharpening: 0
--- !u!1 &8146527781413792986
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7372783121920605696}
- component: {fileID: 971708392060947849}
- component: {fileID: 4603965951028219567}
m_Layer: 0
m_Name: KBMPlayer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7372783121920605696
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8146527781413792986}
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: 6660582358010217897}
- {fileID: 2179908692689602772}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &971708392060947849
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8146527781413792986}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76b8de0c2ec51b642b214671536aa2ad, type: 3}
m_Name:
m_EditorClassIdentifier:
walkingSpeed: 1000
jumpSpeed: 8
gravity: 20
playerCamera: {fileID: 1377620620750533915}
lookSpeed: 100
lookXLimit: 45
canMove: 1
--- !u!143 &4603965951028219567
CharacterController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8146527781413792986}
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_Height: 2
m_Radius: 0.5
m_SlopeLimit: 45
m_StepOffset: 0.3
m_SkinWidth: 0.08
m_MinMoveDistance: 0.001
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &8431754478051068731
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6660582358010217897}
- component: {fileID: 4606726911248254465}
- component: {fileID: 5514715047119596940}
m_Layer: 0
m_Name: Capsule
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6660582358010217897
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8431754478051068731}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 0.8, z: 0.5}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 7372783121920605696}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4606726911248254465
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8431754478051068731}
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &5514715047119596940
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8431754478051068731}
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: 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_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b0c478e5f07e4ab47af03d6f29f1302a
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,85 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &5706508759349694606
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4543634915546932302}
- component: {fileID: 5893868613512797762}
- component: {fileID: 2641940034920470259}
m_Layer: 0
m_Name: Kyle Head
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4543634915546932302
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5706508759349694606}
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: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &5893868613512797762
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5706508759349694606}
m_Mesh: {fileID: -3248716571764886803, guid: 0f6a9ca50b7cc814b97069156050165a, type: 3}
--- !u!23 &2641940034920470259
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5706508759349694606}
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: 5536123062436096700, guid: 0f6a9ca50b7cc814b97069156050165a, type: 3}
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}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 298653603c8a05d488a30d936543a6bc
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,730 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4160250918721472899
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8975136031702801746}
- component: {fileID: 4305919780319221993}
- component: {fileID: 8027403443839644204}
m_Layer: 0
m_Name: MirroredPlayer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8975136031702801746
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4160250918721472899}
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: 4363356982159728252}
m_Father: {fileID: 3900747910437507352}
m_RootOrder: -1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4305919780319221993
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4160250918721472899}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f52b740734c79804a9b2a9c6e9ecf2ac, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 3
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
head: {fileID: 5526601275666655932}
leftHand: {fileID: 533145793580237482}
rightHand: {fileID: 5223364709386596019}
useVR: 0
headTransform: {fileID: 0}
leftHandTransform: {fileID: 0}
rightHandTransform: {fileID: 0}
kbmPlayerTransform: {fileID: 0}
leftHandPositionOffset: {x: 0, y: 0, z: 0}
rightHandPositionOffset: {x: 0, y: 0, z: 0}
leftHandRotationOffset: {x: 0, y: 0, z: 90}
rightHandRotationOffset: {x: 0, y: 0, z: -90}
--- !u!114 &8027403443839644204
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4160250918721472899}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 4
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!1 &6783332708127979891
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3900747910437507352}
- component: {fileID: 3668503947877358051}
- component: {fileID: 1042712483550856211}
- component: {fileID: 2501154329887155958}
- component: {fileID: 5520302260206655787}
- component: {fileID: 3406792509315431662}
m_Layer: 0
m_Name: NetworkPlayerMirror
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3900747910437507352
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6783332708127979891}
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: 8975136031702801746}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3668503947877358051
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6783332708127979891}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 016f337148e6e5148b434053763df71e, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 0
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
vrPlayerPrefab: {fileID: 916340287994646858, guid: a82c8ed92875c7d4185d79d68468bfab,
type: 3}
kbmPlayerPrefab: {fileID: 8146527781413792986, guid: b0c478e5f07e4ab47af03d6f29f1302a,
type: 3}
--- !u!114 &1042712483550856211
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6783332708127979891}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3}
m_Name:
m_EditorClassIdentifier:
<IsNested>k__BackingField: 0
<ComponentIndex>k__BackingField: 0
<PredictedSpawn>k__BackingField: {fileID: 0}
_networkBehaviours:
- {fileID: 3668503947877358051}
- {fileID: 2501154329887155958}
- {fileID: 3406792509315431662}
- {fileID: 4305919780319221993}
- {fileID: 8027403443839644204}
- {fileID: 4117754095397104517}
- {fileID: 3146950596341920849}
- {fileID: 5373128205739675893}
- {fileID: 2407513708090597784}
- {fileID: 8139863130632611686}
<ParentNetworkObject>k__BackingField: {fileID: 0}
<ChildNetworkObjects>k__BackingField: []
_isNetworked: 1
_isGlobal: 0
_initializeOrder: 0
_defaultDespawnType: 0
NetworkObserver: {fileID: 0}
<PrefabId>k__BackingField: 8
<SpawnableCollectionId>k__BackingField: 0
_scenePathHash: 0
<SceneId>k__BackingField: 0
<AssetPathHash>k__BackingField: 14127022433331946267
_sceneNetworkObjects: []
--- !u!114 &2501154329887155958
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6783332708127979891}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 1
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 10
_extrapolation: 10
_enableTeleport: 1
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!114 &5520302260206655787
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6783332708127979891}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c71fd7f855ec523429999fc4e14a1928, type: 3}
m_Name:
m_EditorClassIdentifier:
_overrideType: 3
_updateHostVisibility: 1
_observerConditions: []
--- !u!114 &3406792509315431662
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6783332708127979891}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5a5555c72cc19384a94e85b9088a95aa, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 2
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
--- !u!1001 &253320810295818802
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8975136031702801746}
m_Modifications:
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalPosition.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5706508759349694606, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
propertyPath: m_Name
value: Kyle Head
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
insertIndex: -1
addedObject: {fileID: 533145793580736202}
- targetCorrespondingSourceObject: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
insertIndex: -1
addedObject: {fileID: 5223364709386498771}
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 5706508759349694606, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
insertIndex: -1
addedObject: {fileID: 4117754095397104517}
m_SourcePrefab: {fileID: 100100000, guid: 298653603c8a05d488a30d936543a6bc, type: 3}
--- !u!4 &4363356982159728252 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4543634915546932302, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
m_PrefabInstance: {fileID: 253320810295818802}
m_PrefabAsset: {fileID: 0}
--- !u!1 &5526601275666655932 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5706508759349694606, guid: 298653603c8a05d488a30d936543a6bc,
type: 3}
m_PrefabInstance: {fileID: 253320810295818802}
m_PrefabAsset: {fileID: 0}
--- !u!114 &4117754095397104517
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5526601275666655932}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 5
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!1001 &391588587621263759
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 4363356982159728252}
m_Modifications:
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_RootOrder
value: -1
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalPosition.x
value: 0.25
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalPosition.y
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalPosition.z
value: 0.25
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5553551016358545212, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
propertyPath: m_Name
value: Right Hand Prefab
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 5553551016358545212, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
insertIndex: -1
addedObject: {fileID: 2407513708090597784}
- targetCorrespondingSourceObject: {fileID: 5553551016358545212, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
insertIndex: -1
addedObject: {fileID: 8139863130632611686}
m_SourcePrefab: {fileID: 100100000, guid: 06b91e141d98e5346aee689f8994fa5d, type: 3}
--- !u!4 &5223364709386498771 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5553551016358058844, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
m_PrefabInstance: {fileID: 391588587621263759}
m_PrefabAsset: {fileID: 0}
--- !u!1 &5223364709386596019 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5553551016358545212, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
m_PrefabInstance: {fileID: 391588587621263759}
m_PrefabAsset: {fileID: 0}
--- !u!114 &2407513708090597784
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5223364709386596019}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 8
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!114 &8139863130632611686
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5223364709386596019}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e8cac635f24954048aad3a6ff9110beb, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 9
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
IgnoredParameters: []
_animator: {fileID: 5223364709396110597}
_smoothFloats: 1
_interpolation: 2
_clientAuthoritative: 1
_sendToOwner: 0
--- !u!95 &5223364709396110597 stripped
Animator:
m_CorrespondingSourceObject: {fileID: 5553551016367944842, guid: 06b91e141d98e5346aee689f8994fa5d,
type: 3}
m_PrefabInstance: {fileID: 391588587621263759}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6525434875106850349
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 4363356982159728252}
m_Modifications:
- target: {fileID: 6766972025625408647, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_Name
value: Left Hand Prefab
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_RootOrder
value: -1
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalPosition.x
value: -0.25
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalPosition.y
value: -0.5
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalPosition.z
value: 0.25
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 6766972025625408647, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
insertIndex: -1
addedObject: {fileID: 3146950596341920849}
- targetCorrespondingSourceObject: {fileID: 6766972025625408647, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
insertIndex: -1
addedObject: {fileID: 5373128205739675893}
m_SourcePrefab: {fileID: 100100000, guid: bb6211941b6864e4695e422ddc077417, type: 3}
--- !u!95 &533145793570894108 stripped
Animator:
m_CorrespondingSourceObject: {fileID: 6766972025634883377, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
m_PrefabInstance: {fileID: 6525434875106850349}
m_PrefabAsset: {fileID: 0}
--- !u!1 &533145793580237482 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6766972025625408647, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
m_PrefabInstance: {fileID: 6525434875106850349}
m_PrefabAsset: {fileID: 0}
--- !u!114 &3146950596341920849
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 533145793580237482}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a2836e36774ca1c4bbbee976e17b649c, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 6
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
_synchronizeParent: 0
_packing:
Position: 1
Rotation: 1
Scale: 0
_interpolation: 2
_extrapolation: 2
_enableTeleport: 0
_teleportThreshold: 1
_clientAuthoritative: 1
_sendToOwner: 1
_synchronizePosition: 1
_positionSnapping:
X: 0
Y: 0
Z: 0
_synchronizeRotation: 1
_rotationSnapping:
X: 0
Y: 0
Z: 0
_synchronizeScale: 1
_scaleSnapping:
X: 0
Y: 0
Z: 0
--- !u!114 &5373128205739675893
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 533145793580237482}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e8cac635f24954048aad3a6ff9110beb, type: 3}
m_Name:
m_EditorClassIdentifier:
_componentIndexCache: 7
_addedNetworkObject: {fileID: 1042712483550856211}
_networkObjectCache: {fileID: 1042712483550856211}
IgnoredParameters: []
_animator: {fileID: 533145793570894108}
_smoothFloats: 1
_interpolation: 2
_clientAuthoritative: 1
_sendToOwner: 0
--- !u!4 &533145793580736202 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6766972025625897191, guid: bb6211941b6864e4695e422ddc077417,
type: 3}
m_PrefabInstance: {fileID: 6525434875106850349}
m_PrefabAsset: {fileID: 0}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9cef054096f9cf447b78429150d5b323
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ef34d3373f5d9814d8d5f7c7ccb35846
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e6c65c201c6766c44b27067f8043a6a1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,78 @@
using UnityEngine;
using UnityEngine.InputSystem;
[RequireComponent(typeof(CharacterController))]
public class KbmController : MonoBehaviour
{
private PlayerActions _playerActions;
public float walkingSpeed = 7.5f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
public Camera playerCamera;
public float lookSpeed = 2.0f;
public float lookXLimit = 45.0f;
CharacterController _characterController;
Vector3 _moveDirection = Vector3.zero;
float _rotationX = 0;
[HideInInspector] public bool canMove = true;
void Start()
{
_characterController = GetComponent<CharacterController>();
// Lock cursor
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
private void OnEnable()
{
_playerActions = new PlayerActions();
_playerActions.Enable();
}
void Update()
{
// We are grounded, so recalculate move direction based on axes
Vector3 forward = transform.TransformDirection(Vector3.forward);
Vector3 right = transform.TransformDirection(Vector3.right);
Vector2 input = _playerActions.KBM.Move.ReadValue<Vector2>() * Time.deltaTime;
float curSpeedX = canMove ? walkingSpeed * input.y : 0;
float curSpeedY = canMove ? walkingSpeed * input.x : 0;
float movementDirectionY = _moveDirection.y;
_moveDirection = (forward * curSpeedX) + (right * curSpeedY);
if (_playerActions.KBM.Jump.IsPressed() && canMove && _characterController.isGrounded)
{
_moveDirection.y = jumpSpeed;
}
else
{
_moveDirection.y = movementDirectionY;
}
// Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below
// when the moveDirection is multiplied by deltaTime). This is because gravity should be applied
// as an acceleration (ms^-2)
if (!_characterController.isGrounded)
{
_moveDirection.y -= gravity * Time.deltaTime;
}
// Move the controller
_characterController.Move(_moveDirection * Time.deltaTime);
// Player and Camera rotation
if (canMove)
{
_rotationX += -_playerActions.KBM.Look.ReadValue<Vector2>().y * Time.deltaTime * lookSpeed;
_rotationX = Mathf.Clamp(_rotationX, -lookXLimit, lookXLimit);
playerCamera.transform.localRotation = Quaternion.Euler(_rotationX, 0, 0);
transform.rotation *= Quaternion.Euler(0, _playerActions.KBM.Look.ReadValue<Vector2>().x * Time.deltaTime * lookSpeed, 0);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 76b8de0c2ec51b642b214671536aa2ad
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,107 @@
using System;
using System.Collections;
using System.Collections.Generic;
using _PROJECT;
using _PROJECT.Multiplayer;
using FishNet.Object;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
using UnityEngine.XR.Management;
public class NetworkPlayerMirror : NetworkBehaviour
{
public GameObject vrPlayerPrefab;
public GameObject kbmPlayerPrefab;
private XRPlayerMirror _networkMirror;
private XROwnershipRequester _ownershipRequester;
public override void OnStartClient()
{
base.OnStartClient();
_networkMirror = GetComponentInChildren<XRPlayerMirror>();
_ownershipRequester = GetComponent<XROwnershipRequester>();
if (!IsOwner)
{
_networkMirror.enabled = false;
return;
}
bool useVR = PlayerPrefs.GetInt("UseVR", 0) == 1;
if (useVR)
{
StartCoroutine(StartXR());
}
else
{
GameObject kbmPlayer = Instantiate(kbmPlayerPrefab, transform.position, transform.rotation);
_networkMirror.kbmPlayerTransform = kbmPlayer.GetComponentInChildren<Camera>().transform;
}
}
public IEnumerator StartXR()
{
StopVR();
Debug.Log("Initializing XR...");
yield return XRGeneralSettings.Instance.Manager.InitializeLoader();
while (!XRGeneralSettings.Instance.Manager.isInitializationComplete)
{
yield return new WaitForSeconds(0.1f);
}
if (XRGeneralSettings.Instance.Manager.activeLoader == null)
{
Debug.LogError("Initializing XR Failed. Check Editor or Player log for details.");
}
else
{
Debug.Log("Starting XR...");
XRGeneralSettings.Instance.Manager.StartSubsystems();
}
GameObject vrPlayer = Instantiate(vrPlayerPrefab, transform.position, transform.rotation);
_networkMirror.headTransform = vrPlayer.transform.FindRecursive("Main Camera");
GameObject leftHand = vrPlayer.transform.FindRecursive("Left Hand").gameObject;
GameObject rightHand = vrPlayer.transform.FindRecursive("Right Hand").gameObject;
_networkMirror.leftHandTransform = leftHand.transform;
_networkMirror.rightHandTransform = rightHand.transform;
XRDirectInteractor leftInteractor = leftHand.GetComponent<XRDirectInteractor>();
XRDirectInteractor rightInteractor = rightHand.GetComponent<XRDirectInteractor>();
leftInteractor.selectEntered.AddListener(_ownershipRequester.OnSelectEnter);
leftInteractor.selectExited.AddListener(_ownershipRequester.OnSelectExit);
rightInteractor.selectEntered.AddListener(_ownershipRequester.OnSelectEnter);
rightInteractor.selectExited.AddListener(_ownershipRequester.OnSelectExit);
Debug.Log("XR mirror init done.");
}
public void OnDestroy()
{
if (!IsOwner) return;
StopVR();
}
private void StopVR()
{
if (!IsOwner) return;
Debug.Log("Stopping XR...");
XRGeneralSettings.Instance.Manager.StopSubsystems();
XRGeneralSettings.Instance.Manager.DeinitializeLoader();
Debug.Log("XR stopped completely.");
}
public void OnApplicationQuit()
{
if (!IsOwner) return;
StopVR();
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 016f337148e6e5148b434053763df71e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,58 @@
using System;
using FishNet.Object;
using FishNet.Object.Synchronizing;
using UnityEngine;
namespace _PROJECT.Multiplayer
{
public class ParentSync : NetworkBehaviour
{
[SyncVar] public NetworkObject parentNetworkObject;
public override void OnStartClient()
{
base.OnStartClient();
transform.parent = parentNetworkObject == null ? null : parentNetworkObject.transform;
}
private void Awake()
{
// Throw error if parent does not have a network object
if (transform.parent != null && transform.parent.GetComponent<NetworkObject>() == null)
{
throw new Exception("ParentSync must be on a child of a network object.");
}
parentNetworkObject = transform.parent == null ? null : transform.parent.GetComponent<NetworkObject>();
}
private void OnTransformParentChanged()
{
if (!IsOwner || !IsServer) return;
// Get new parent's network object.
NetworkObject newParent = transform.parent == null ? null : transform.parent.GetComponent<NetworkObject>();
if (newParent == null)
{
Debug.LogWarning("ParentSync: New parent is not a network object.");
return;
}
SetParentRPC(GetComponent<NetworkObject>(),
newParent);
}
[ServerRpc(RequireOwnership = false)]
private void SetParentRPC(NetworkObject obj, NetworkObject newParent)
{
transform.parent = newParent == null ? null : newParent.transform;
parentNetworkObject = newParent;
SetParentBroadcastRPC(obj, newParent);
}
[ObserversRpc]
private void SetParentBroadcastRPC(NetworkObject obj, NetworkObject newParent)
{
transform.parent = newParent == null ? null : newParent.transform;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: fe144f19e23143e885041e3a6641d9ec
timeCreated: 1679227773

View File

@@ -0,0 +1,51 @@
using System.Collections.Generic;
using FishNet.Component.Transforming;
using FishNet.Connection;
using FishNet.Managing;
using FishNet.Object;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
namespace _PROJECT.Multiplayer
{
public class XROwnershipRequester : NetworkBehaviour
{
[ServerRpc(RequireOwnership = false)]
private void SendOwnershipRequest(NetworkObject networkObject, NetworkConnection conn = null)
{
NetworkTransform networkTransform = networkObject.GetComponent<NetworkTransform>();
if (conn == null) return;
if (networkTransform != null) networkTransform.GiveOwnership(conn);
networkObject.GiveOwnership(conn);
}
[ServerRpc(RequireOwnership = false)]
private void RemoveOwnership(NetworkObject networkObject, NetworkConnection conn = null)
{
NetworkTransform networkTransform = networkObject.GetComponent<NetworkTransform>();
if (conn == null) return;
if (networkTransform != null) networkTransform.RemoveOwnership();
networkObject.RemoveOwnership();
}
public void OnSelectEnter(SelectEnterEventArgs eventArgs)
{
Debug.Log("Requesting ownership of " + eventArgs.interactableObject.transform.name);
NetworkObject networkObject = eventArgs.interactableObject.transform.GetComponent<NetworkObject>();
if (networkObject != null)
SendOwnershipRequest(networkObject);
}
public void OnSelectExit(SelectExitEventArgs eventArgs)
{
// If the object is still selected, don't remove ownership. This is for multiselect support.
if (eventArgs.interactableObject.isSelected) return;
Debug.Log("Unrequesting ownership of " + eventArgs.interactableObject.transform.name);
NetworkObject networkObject = eventArgs.interactableObject.transform.GetComponent<NetworkObject>();
if (networkObject != null)
RemoveOwnership(networkObject);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5a5555c72cc19384a94e85b9088a95aa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,111 @@
using System.Collections;
using System.Collections.Generic;
using FishNet.Object;
using UnityEngine;
using UnityEngine.XR;
public class XRPlayerMirror : NetworkBehaviour
{
public GameObject head;
public GameObject leftHand;
public GameObject rightHand;
public bool useVR;
public Transform headTransform;
public Transform leftHandTransform;
public Transform rightHandTransform;
public Transform kbmPlayerTransform;
public Vector3 leftHandPositionOffset;
public Vector3 rightHandPositionOffset;
public Vector3 leftHandRotationOffset;
public Vector3 rightHandRotationOffset;
private Animator _leftHandAnimator;
private Animator _rightHandAnimator;
private static readonly int Trigger = Animator.StringToHash("Trigger");
private static readonly int Grip = Animator.StringToHash("Grip");
public override void OnStartClient()
{
base.OnStartClient();
if (!IsOwner) return;
// Disable head and hand meshrenderers
useVR = PlayerPrefs.GetInt("UseVR", 0) == 1;
var meshRenderers = GetComponentsInChildren<MeshRenderer>();
foreach (var mRenderer in meshRenderers)
{
mRenderer.enabled = false;
}
var skinnedMeshRenderers = GetComponentsInChildren<SkinnedMeshRenderer>();
foreach (var mRenderer in skinnedMeshRenderers)
{
mRenderer.enabled = false;
}
_leftHandAnimator = leftHand.GetComponent<Animator>();
_rightHandAnimator = rightHand.GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (!IsOwner) return;
if (useVR)
{
UpdateXR();
}
else
{
head.transform.position = kbmPlayerTransform.position;
head.transform.rotation = kbmPlayerTransform.rotation;
}
}
private void UpdateXR()
{
if (headTransform != null)
{
head.transform.position = headTransform.position;
head.transform.rotation = headTransform.rotation;
}
if (leftHandTransform != null)
{
leftHand.transform.position = leftHandTransform.position + leftHandPositionOffset;
leftHand.transform.rotation = leftHandTransform.rotation * Quaternion.Euler(leftHandRotationOffset) ;
}
if (rightHandTransform != null)
{
rightHand.transform.position = rightHandTransform.position + rightHandPositionOffset;
rightHand.transform.rotation = rightHandTransform.rotation * Quaternion.Euler(rightHandRotationOffset);
}
UpdateHandAnimation();
}
private void UpdateHandAnimation()
{
InputDevice leftHandDevice = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand);
InputDevice rightHandDevice = InputDevices.GetDeviceAtXRNode(XRNode.RightHand);
_leftHandAnimator.SetFloat(Trigger, GetFeatureValueOrZero(CommonUsages.trigger, leftHandDevice));
_leftHandAnimator.SetFloat(Grip, GetFeatureValueOrZero(CommonUsages.grip, leftHandDevice));
_rightHandAnimator.SetFloat(Trigger, GetFeatureValueOrZero(CommonUsages.trigger, rightHandDevice));
_rightHandAnimator.SetFloat(Grip, GetFeatureValueOrZero(CommonUsages.grip, rightHandDevice));
}
private float GetFeatureValueOrZero(InputFeatureUsage<float> feature, InputDevice targetDevice)
{
return targetDevice.TryGetFeatureValue(feature, out float value) ? value : 0;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f52b740734c79804a9b2a9c6e9ecf2ac
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: