forked from cgvr/DeltaVR
deltavr multiplayer 2.0
This commit is contained in:
247
Assets/_PROJECT/Multiplayer/CustomNetworkManager.prefab
Normal file
247
Assets/_PROJECT/Multiplayer/CustomNetworkManager.prefab
Normal 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
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0e606bd969148744e9ebcac2f75b0970
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
3
Assets/_PROJECT/Multiplayer/InteractionManager.meta
Normal file
3
Assets/_PROJECT/Multiplayer/InteractionManager.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: db237180b4a44cb8b3c39c6123ff865b
|
||||
timeCreated: 1679225478
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a8ff406473ac40c988cd296f4d8c4f62
|
||||
timeCreated: 1679223018
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5ba3011b0b004a8089e25da0e59cf7e0
|
||||
timeCreated: 1679225525
|
||||
8
Assets/_PROJECT/Multiplayer/NetworkPrefabs.meta
Normal file
8
Assets/_PROJECT/Multiplayer/NetworkPrefabs.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b7dbbb6a25201b498d50abb0ebd8ab9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
301
Assets/_PROJECT/Multiplayer/NetworkPrefabs/KBMPlayer.prefab
Normal file
301
Assets/_PROJECT/Multiplayer/NetworkPrefabs/KBMPlayer.prefab
Normal 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}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b0c478e5f07e4ab47af03d6f29f1302a
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
85
Assets/_PROJECT/Multiplayer/NetworkPrefabs/Kyle Head.prefab
Normal file
85
Assets/_PROJECT/Multiplayer/NetworkPrefabs/Kyle Head.prefab
Normal 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}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 298653603c8a05d488a30d936543a6bc
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9cef054096f9cf447b78429150d5b323
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/_PROJECT/Multiplayer/NewBow.meta
Normal file
8
Assets/_PROJECT/Multiplayer/NewBow.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ef34d3373f5d9814d8d5f7c7ccb35846
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/_PROJECT/Multiplayer/Scripts.meta
Normal file
8
Assets/_PROJECT/Multiplayer/Scripts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e6c65c201c6766c44b27067f8043a6a1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
78
Assets/_PROJECT/Multiplayer/Scripts/KbmController.cs
Normal file
78
Assets/_PROJECT/Multiplayer/Scripts/KbmController.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/_PROJECT/Multiplayer/Scripts/KbmController.cs.meta
Normal file
11
Assets/_PROJECT/Multiplayer/Scripts/KbmController.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 76b8de0c2ec51b642b214671536aa2ad
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
107
Assets/_PROJECT/Multiplayer/Scripts/NetworkPlayerMirror.cs
Normal file
107
Assets/_PROJECT/Multiplayer/Scripts/NetworkPlayerMirror.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 016f337148e6e5148b434053763df71e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
58
Assets/_PROJECT/Multiplayer/Scripts/ParentSync.cs
Normal file
58
Assets/_PROJECT/Multiplayer/Scripts/ParentSync.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/_PROJECT/Multiplayer/Scripts/ParentSync.cs.meta
Normal file
3
Assets/_PROJECT/Multiplayer/Scripts/ParentSync.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe144f19e23143e885041e3a6641d9ec
|
||||
timeCreated: 1679227773
|
||||
51
Assets/_PROJECT/Multiplayer/Scripts/XROwnershipRequester.cs
Normal file
51
Assets/_PROJECT/Multiplayer/Scripts/XROwnershipRequester.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a5555c72cc19384a94e85b9088a95aa
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
111
Assets/_PROJECT/Multiplayer/Scripts/XRPlayerMirror.cs
Normal file
111
Assets/_PROJECT/Multiplayer/Scripts/XRPlayerMirror.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
11
Assets/_PROJECT/Multiplayer/Scripts/XRPlayerMirror.cs.meta
Normal file
11
Assets/_PROJECT/Multiplayer/Scripts/XRPlayerMirror.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f52b740734c79804a9b2a9c6e9ecf2ac
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user