diff --git a/Experimental/DistributedAuthoritySample/Assets/Fonts/Grandstander-SemiBold.ttf b/Experimental/DistributedAuthoritySample/Assets/Fonts/Grandstander-SemiBold.ttf new file mode 100644 index 000000000..74aa47a77 Binary files /dev/null and b/Experimental/DistributedAuthoritySample/Assets/Fonts/Grandstander-SemiBold.ttf differ diff --git a/Experimental/DistributedAuthoritySample/Assets/Fonts/Grandstander-SemiBold.ttf.meta b/Experimental/DistributedAuthoritySample/Assets/Fonts/Grandstander-SemiBold.ttf.meta new file mode 100644 index 000000000..9cf83b737 --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Fonts/Grandstander-SemiBold.ttf.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: 01732851f19ed41ffa80b26ee3b16cf5 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontNames: + - Grandstander + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Experimental/DistributedAuthoritySample/Assets/InputSystem/AvatarActions.inputactions b/Experimental/DistributedAuthoritySample/Assets/InputSystem/AvatarActions.inputactions index 726f06119..ae7d3d51c 100644 --- a/Experimental/DistributedAuthoritySample/Assets/InputSystem/AvatarActions.inputactions +++ b/Experimental/DistributedAuthoritySample/Assets/InputSystem/AvatarActions.inputactions @@ -608,6 +608,15 @@ "processors": "", "interactions": "", "initialStateCheck": false + }, + { + "name": "ShowNetworkStats", + "type": "Button", + "id": "4b6bb4e4-7ecf-48df-be01-616de9cd0ff8", + "expectedControlType": "", + "processors": "", + "interactions": "", + "initialStateCheck": false } ], "bindings": [ @@ -1028,6 +1037,17 @@ "action": "TrackedDeviceOrientation", "isComposite": false, "isPartOfComposite": false + }, + { + "name": "", + "id": "249f3bcc-4eed-4959-bc3f-d719bc91d034", + "path": "/#(M)", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "ShowNetworkStats", + "isComposite": false, + "isPartOfComposite": false } ] } diff --git a/Experimental/DistributedAuthoritySample/Assets/Prefabs/RNSM/Runtime Network Stats Monitor.prefab b/Experimental/DistributedAuthoritySample/Assets/Prefabs/RNSM/Runtime Network Stats Monitor.prefab old mode 100755 new mode 100644 index 06bbcb717..950037db1 --- a/Experimental/DistributedAuthoritySample/Assets/Prefabs/RNSM/Runtime Network Stats Monitor.prefab +++ b/Experimental/DistributedAuthoritySample/Assets/Prefabs/RNSM/Runtime Network Stats Monitor.prefab @@ -10,6 +10,7 @@ GameObject: m_Component: - component: {fileID: 2560315501379389793} - component: {fileID: 3424233303973944120} + - component: {fileID: 6717113432061250836} m_Layer: 0 m_Name: Runtime Network Stats Monitor m_TagString: Untagged @@ -50,6 +51,19 @@ MonoBehaviour: k__BackingField: {fileID: 0} k__BackingField: k__BackingField: 1 - m_PositionLeftToRight: 0 + m_PositionLeftToRight: 1 m_PositionTopToBottom: 0 k__BackingField: {fileID: 11400000, guid: 08b51bc9665db584a94cac2fd1c7313d, type: 2} +--- !u!114 &6717113432061250836 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6290292887620514864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c70c2cf93e2f4f7e94a255fac4c480d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_InteractActionReference: {fileID: -6206414252132299102, guid: dcd1b4eb76b964f40afe6c0a3ca65c82, type: 3} diff --git a/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI.meta b/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI.meta new file mode 100644 index 000000000..70cc1a9d1 --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 146e8b4b37e2f4cc88ba11f70feb62e2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI/IngameUI.prefab b/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI/IngameUI.prefab new file mode 100644 index 000000000..07f1da6df --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI/IngameUI.prefab @@ -0,0 +1,380 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3209112381140291289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8260601768609746557} + - component: {fileID: 2624134516453966882} + - component: {fileID: 7977430163742817466} + m_Layer: 0 + m_Name: WorldspaceUIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8260601768609746557 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3209112381140291289} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8617889547341104717} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2624134516453966882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3209112381140291289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PanelSettings: {fileID: 11400000, guid: 0e4f51bac594c48f389b138036e2b43f, type: 2} + m_ParentUI: {fileID: 0} + sourceAsset: {fileID: 9197481963319205126, guid: 9200cd2c1c32a4640827d30cb42d1308, type: 3} + m_SortingOrder: 0 + m_WorldSpaceSizeMode: 1 + m_WorldSpaceWidth: 1920 + m_WorldSpaceHeight: 1080 +--- !u!1931382933 &7977430163742817466 +UIRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3209112381140291289} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3760817242580890973 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2256034313796960807} + - component: {fileID: 6819266640017766453} + m_Layer: 0 + m_Name: CarryBoxUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2256034313796960807 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3760817242580890973} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8617889547341104717} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6819266640017766453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3760817242580890973} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cab95fb48d30a4b788382f3e6de41d8f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CarryBoxIndicatorAsset: {fileID: 9197481963319205126, guid: 8fdf32eb7f5054f7c905e967bb97622a, type: 3} + m_Camera: {fileID: 0} + m_VerticalOffset: 0.2 + m_ScreenspaceUI: {fileID: 436460152536684898} + m_PanelMaxSize: 1.8 + m_PanelMinSize: 0.7 +--- !u!1 &3880690501373695684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8481058004063830698} + - component: {fileID: 1285283790433398916} + m_Layer: 0 + m_Name: Menu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8481058004063830698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3880690501373695684} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8617889547341104717} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1285283790433398916 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3880690501373695684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9db8191e011349b7a3866de665e9c85, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIDocument: {fileID: 436460152536684898} + m_IngameMenuAsset: {fileID: 9197481963319205126, guid: 2f4e12e43d45445fc821ef11fac71cbb, type: 3} +--- !u!1 &4442235778373555955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8617889547341104717} + m_Layer: 0 + m_Name: IngameUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8617889547341104717 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4442235778373555955} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 53.903156, y: -3.0556173, z: 5.721881} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8260601768609746557} + - {fileID: 3336661237540986728} + - {fileID: 1441329406051364446} + - {fileID: 2256034313796960807} + - {fileID: 7559383771208540613} + - {fileID: 8481058004063830698} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5231826839060252271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3336661237540986728} + - component: {fileID: 436460152536684898} + m_Layer: 0 + m_Name: ScreenspaceUIContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3336661237540986728 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5231826839060252271} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8617889547341104717} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &436460152536684898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5231826839060252271} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PanelSettings: {fileID: 11400000, guid: f87c14ce92c804cf2a078e05e3ee2019, type: 2} + m_ParentUI: {fileID: 0} + sourceAsset: {fileID: 9197481963319205126, guid: e289958644d344faca163735e9292679, type: 3} + m_SortingOrder: 0 + m_WorldSpaceSizeMode: 1 + m_WorldSpaceWidth: 1920 + m_WorldSpaceHeight: 1080 +--- !u!1 &6990578997068127384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1441329406051364446} + - component: {fileID: 2976577740237118850} + m_Layer: 0 + m_Name: PickupUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1441329406051364446 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6990578997068127384} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8617889547341104717} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2976577740237118850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6990578997068127384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f0f7b04d1430b4e5489e47c65f7cff27, type: 3} + m_Name: + m_EditorClassIdentifier: + m_PickupAsset: {fileID: 9197481963319205126, guid: 8fdf32eb7f5054f7c905e967bb97622a, type: 3} + m_Camera: {fileID: 0} + m_VerticalOffset: 0.9 + m_WorldspaceUI: {fileID: 2624134516453966882} +--- !u!1 &7898239706649082948 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7559383771208540613} + - component: {fileID: 2293873620935712837} + m_Layer: 0 + m_Name: PlayersTopDisplayUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7559383771208540613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7898239706649082948} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8617889547341104717} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2293873620935712837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7898239706649082948} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dbdf040e93bb04f3eb914539db5ed09e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIDocument: {fileID: 436460152536684898} + m_NameplateAsset: {fileID: 9197481963319205126, guid: 024b9614e5611458f99c56be0e3a02e2, type: 3} + m_PanelMinSize: 0.4 + m_PanelMaxSize: 1 + m_DisplayYOffset: 1.8 + m_Camera: {fileID: 0} diff --git a/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI/IngameUI.prefab.meta b/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI/IngameUI.prefab.meta new file mode 100644 index 000000000..61dc37080 --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Prefabs/UI/IngameUI.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 518a390d1a3b34df4810b14940708492 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Experimental/DistributedAuthoritySample/Assets/Resources.meta b/Experimental/DistributedAuthoritySample/Assets/Resources.meta new file mode 100644 index 000000000..eb752972c --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: caa742413e3944770aff0d7e1179707b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Experimental/DistributedAuthoritySample/Assets/Scenes/HubScene_TownMarket.unity b/Experimental/DistributedAuthoritySample/Assets/Scenes/HubScene_TownMarket.unity index 9dc5971c3..8c2ec832f 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scenes/HubScene_TownMarket.unity +++ b/Experimental/DistributedAuthoritySample/Assets/Scenes/HubScene_TownMarket.unity @@ -42,7 +42,8 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -464,6 +465,75 @@ MonoBehaviour: m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} m_SoftShadowQuality: 0 +--- !u!1001 &406782382 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2293873620935712837, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_Camera + value: + objectReference: {fileID: 1062256792} + - target: {fileID: 2976577740237118850, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_Camera + value: + objectReference: {fileID: 1062256792} + - target: {fileID: 4442235778373555955, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_Name + value: IngameUI + objectReference: {fileID: 0} + - target: {fileID: 6819266640017766453, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_Camera + value: + objectReference: {fileID: 1062256792} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalPosition.x + value: 53.903156 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalPosition.y + value: -3.0556173 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalPosition.z + value: 5.721881 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8617889547341104717, guid: 518a390d1a3b34df4810b14940708492, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 518a390d1a3b34df4810b14940708492, type: 3} --- !u!1 &528098440 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1250008963122337650, guid: 4353311a03fb2472fbb8f97f805bd1bd, type: 3} @@ -723,6 +793,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 3424233303973944120, guid: 6012ed8aa831c4adda345f473e72c4e3, type: 3} + propertyPath: k__BackingField + value: + objectReference: {fileID: 11400000, guid: f87c14ce92c804cf2a078e05e3ee2019, type: 2} - target: {fileID: 6290292887620514864, guid: 6012ed8aa831c4adda345f473e72c4e3, type: 3} propertyPath: m_Name value: Runtime Network Stats Monitor @@ -788,7 +862,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: New Lighting Settings - serializedVersion: 8 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_RealtimeEnvironmentLighting: 1 @@ -962,11 +1036,20 @@ PrefabInstance: propertyPath: m_FreeLookVCamera value: objectReference: {fileID: 636292039} + - target: {fileID: 5968812278624977493, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3} + propertyPath: BlendUpdateMethod + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3} +--- !u!20 &1062256792 stripped +Camera: + m_CorrespondingSourceObject: {fileID: 203267159508449519, guid: 36b3ee75677a1544191c0ddaaadd8140, type: 3} + m_PrefabInstance: {fileID: 1062256791} + m_PrefabAsset: {fileID: 0} --- !u!1 &1069305774 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1250008963122337650, guid: 4353311a03fb2472fbb8f97f805bd1bd, type: 3} @@ -305512,6 +305595,7 @@ SceneRoots: m_ObjectHideFlags: 0 m_Roots: - {fileID: 371548743} + - {fileID: 406782382} - {fileID: 1062256791} - {fileID: 636292038} - {fileID: 5998245310533533758} diff --git a/Experimental/DistributedAuthoritySample/Assets/Scenes/MainMenu.unity b/Experimental/DistributedAuthoritySample/Assets/Scenes/MainMenu.unity index 3f7f79d6d..40e91200a 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scenes/MainMenu.unity +++ b/Experimental/DistributedAuthoritySample/Assets/Scenes/MainMenu.unity @@ -42,7 +42,8 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -361,7 +362,7 @@ MonoBehaviour: m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0} m_Name: m_EditorClassIdentifier: - m_PanelSettings: {fileID: 11400000, guid: 9e8aac7fe47275b4789b9e27323b73ad, type: 2} + m_PanelSettings: {fileID: 11400000, guid: f87c14ce92c804cf2a078e05e3ee2019, type: 2} m_ParentUI: {fileID: 0} sourceAsset: {fileID: 9197481963319205126, guid: 26eb36c57053bf64c96359391e08d3cb, type: 3} m_SortingOrder: 0 @@ -528,13 +529,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1088131142} serializedVersion: 2 - m_LocalRotation: {x: 0.07625792, y: 0.24422783, z: -0.019269343, w: 0.96652275} + m_LocalRotation: {x: 0.05726458, y: 0.2444483, z: -0.013749749, w: 0.9678723} m_LocalPosition: {x: -226.32, y: 5.21, z: -421.8} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 6.752, y: 28.353, z: 0.08} --- !u!1001 &1479164695 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/Misc/RuntimeStatsMonitorController.cs b/Experimental/DistributedAuthoritySample/Assets/Scripts/Misc/RuntimeStatsMonitorController.cs new file mode 100644 index 000000000..8bd0b746b --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/Misc/RuntimeStatsMonitorController.cs @@ -0,0 +1,79 @@ +using Unity.Multiplayer.Tools.NetStatsMonitor; +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.UIElements; + +namespace Unity.Multiplayer.Samples.SocialHub.Misc +{ + /// + /// Adds a label to the RuntimeNetStatsMonitor UI to show how to toggle visibility. + /// In future this functionality could be moved to the RuntimeNetStatsMonitor itself. + /// + [RequireComponent(typeof(RuntimeNetStatsMonitor))] + class RuntimeStatsMonitorController : MonoBehaviour + { + [SerializeField] + InputActionReference m_InteractActionReference; + + RuntimeNetStatsMonitor m_RuntimeNetStatsMonitor; + + string m_VisibilityLabelName = "toggle-visibility-label"; + + void Start() + { + m_RuntimeNetStatsMonitor = GetComponent(); + var uiDocuments = FindObjectsOfType(true); + + if(m_RuntimeNetStatsMonitor.PanelSettingsOverride == null) + { + Debug.LogWarning("Assign PanelSettingsOverride to this MonoBehaviour!", this); + return; + } + + if(m_InteractActionReference == null) + { + Debug.LogWarning("Assign InputActionReference to this MonoBehaviour!", this); + return; + } + + foreach (var uiDoc in uiDocuments) + { + if (uiDoc.panelSettings == m_RuntimeNetStatsMonitor.PanelSettingsOverride) + { + var rsnm = uiDoc.runtimePanel.visualTree.Q(className: "rnsm-monitor"); + if (rsnm == null) + { + Debug.LogWarning("Could not find RuntimeNetworkStatsMonitor VisualElement, cannot attach UI.", this); + return; + } + + if(rsnm.Q(m_VisibilityLabelName) != null) + { + // Label already exists, do not add another + return; + } + + + var label = new Label("Toggle visibility with M") + { + name = m_VisibilityLabelName, + style = + { + backgroundColor = new StyleColor(Color.black), + unityTextAlign = TextAnchor.MiddleCenter + } + }; + rsnm.Add(label); + } + } + + m_InteractActionReference.action.performed += OnToggleVisibility; + m_InteractActionReference.action.Enable(); + } + + void OnToggleVisibility(InputAction.CallbackContext obj) + { + m_RuntimeNetStatsMonitor.Visible = !m_RuntimeNetStatsMonitor.Visible; + } + } +} diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/Misc/RuntimeStatsMonitorController.cs.meta b/Experimental/DistributedAuthoritySample/Assets/Scripts/Misc/RuntimeStatsMonitorController.cs.meta new file mode 100644 index 000000000..db2134d42 --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/Misc/RuntimeStatsMonitorController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7c70c2cf93e2f4f7e94a255fac4c480d \ No newline at end of file diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/AvatarInteractions.cs b/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/AvatarInteractions.cs index 5532f3ffe..faace745a 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/AvatarInteractions.cs +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/AvatarInteractions.cs @@ -2,6 +2,7 @@ using System.Collections; using Unity.Multiplayer.Samples.SocialHub.Gameplay; using Unity.Multiplayer.Samples.SocialHub.Input; +using Unity.Multiplayer.Samples.SocialHub.UI; using Unity.Netcode; using UnityEngine; @@ -47,6 +48,12 @@ class AvatarInteractions : NetworkBehaviour, INetworkUpdateSystem TransferableObject m_TransferableObject; + PickUpIndicator m_PickUpIndicator; + + CarryBoxIndicator m_CarryBoxIndicator; + + PlayersTopUIController m_TopUIController; + const float k_MinDurationHeld = 0f; const float k_MaxDurationHeld = 2f; @@ -60,6 +67,11 @@ void Awake() m_PickupableLayerMask = 1 << LayerMask.NameToLayer("Pickupable"); } + void Update() + { + CheckForPickupsInRange(); + } + public override void OnNetworkSpawn() { base.OnNetworkSpawn(); @@ -79,6 +91,12 @@ public override void OnNetworkSpawn() return; } + m_PickUpIndicator = FindFirstObjectByType(); + m_CarryBoxIndicator = FindFirstObjectByType(); + m_TopUIController = FindFirstObjectByType(); + + m_TopUIController.AddPlayer(gameObject); + m_AvatarInputs.TapInteractionPerformed += OnTapPerformed; m_AvatarInputs.HoldInteractionPerformed += OnHoldStarted; m_AvatarInputs.HoldInteractionCancelled += OnHoldReleased; @@ -107,6 +125,8 @@ public override void OnNetworkDespawn() m_AnimationEventRelayer.PickupActionAnimationEvent -= OnPickupActionAnimationEvent; } + m_TopUIController.RemovePlayer(gameObject); + this.UnregisterAllNetworkUpdates(); } @@ -184,6 +204,27 @@ void OnHoldReleased(double holdDuration) } } + void CheckForPickupsInRange() + { + if(m_TransferableObject != null) + { + m_PickUpIndicator.ClearPickup(); + return; + } + + m_CarryBoxIndicator.HideCarry(); + + if (UnityEngine.Physics.OverlapBoxNonAlloc(m_InteractCollider.transform.position, m_InteractCollider.bounds.extents, m_Results, Quaternion.identity, mask: m_PickupableLayerMask) > 0) + { + if(m_Results[0].TryGetComponent(out NetworkObject otherNetworkObject)) + { + m_PickUpIndicator.ShowPickup(otherNetworkObject.transform); + return; + } + } + m_PickUpIndicator.ClearPickup(); + } + void PickUp() { if (UnityEngine.Physics.OverlapBoxNonAlloc(m_InteractCollider.transform.position, m_InteractCollider.bounds.extents, m_Results, Quaternion.identity, mask: m_PickupableLayerMask) > 0) @@ -270,6 +311,9 @@ IEnumerator SmoothLookAt(Transform target) yield return null; } + // show indicator for carry + m_CarryBoxIndicator.ShowCarry(transform); + // Ensure the final rotation is exactly towards the target transform.rotation = Quaternion.Euler(0, targetRotation.eulerAngles.y, 0); // Keep only the y-axis rotation } diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/Unity.Multiplayer.Samples.SocialHub.Player.asmdef b/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/Unity.Multiplayer.Samples.SocialHub.Player.asmdef index 0b6eb0768..77cb81f65 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/Unity.Multiplayer.Samples.SocialHub.Player.asmdef +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/Player/Unity.Multiplayer.Samples.SocialHub.Player.asmdef @@ -7,7 +7,8 @@ "GUID:9ff2150ce7d7c415a8af1fbff3dc3e6c", "GUID:75469ad4d38634e559750d17036d5f7c", "GUID:ae1323dabfa6440b3956d4cc5239e361", - "GUID:4307f53044263cf4b835bd812fc161a4" + "GUID:4307f53044263cf4b835bd812fc161a4", + "GUID:86923d8926a1f4aca9fcdd3f0097bfd7" ], "includePlatforms": [], "excludePlatforms": [], @@ -18,4 +19,4 @@ "defineConstraints": [], "versionDefines": [], "noEngineReferences": false -} +} \ No newline at end of file diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/ServicesHelper.cs b/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/ServicesHelper.cs index 45f09a3dc..80ddbc019 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/ServicesHelper.cs +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/ServicesHelper.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Threading.Tasks; using Unity.Multiplayer.Samples.SocialHub.UI; +using Unity.Netcode; using Unity.Services.Authentication; using Unity.Services.Core; using Unity.Services.Multiplayer; @@ -47,6 +48,8 @@ async void Start() } HomeScreenView.StartButtonPressed += OnStartButtonPressed; + IngameMenu.OnQuitGamePressed += () => { Debug.Log("Not implemented");}; + IngameMenu.OnGoToMainScenePressed += () => { Debug.Log("Not implemented");}; } async void OnStartButtonPressed(string sessionName) @@ -149,5 +152,41 @@ async Task ConnectThroughLiveService(string sessionName) Debug.LogException(e); } } + + void OnGUI() + { + if (AuthenticationService.Instance == null || !AuthenticationService.Instance.IsSignedIn) + { + return; + } + + if (!NetworkManager.Singleton.IsClient && !NetworkManager.Singleton.IsServer) + { + GUI.enabled = m_SessionTask == null || m_SessionTask.IsCompleted; + + GUILayout.Label("Session Name", GUILayout.Width(100)); + + if (GUILayout.Button("Host")) + { + SceneManager.sceneLoaded += Host_SceneLoaded; + LoadHubScene(); + + //SceneManager.LoadScene("ObjectTesting"); + } + + if (GUILayout.Button("Client")) + { + NetworkManager.Singleton.StartClient(); + } + + GUI.enabled = true; + } + } + + void Host_SceneLoaded(Scene arg0, LoadSceneMode arg1) + { + SceneManager.sceneLoaded -= Host_SceneLoaded; + NetworkManager.Singleton.StartHost(); + } } } diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/Unity.Multiplayer.Samples.SocialHub.Services.asmdef b/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/Unity.Multiplayer.Samples.SocialHub.Services.asmdef index 4a20835a1..189c9f360 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/Unity.Multiplayer.Samples.SocialHub.Services.asmdef +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/Services/Unity.Multiplayer.Samples.SocialHub.Services.asmdef @@ -6,7 +6,8 @@ "GUID:5540e30183c82e84b954c033c388e06c", "GUID:37e17ffe38d86ae48bc3207e83ffef88", "GUID:6087a74f6015aae4daed9a2577a7596c", - "GUID:86923d8926a1f4aca9fcdd3f0097bfd7" + "GUID:86923d8926a1f4aca9fcdd3f0097bfd7", + "GUID:1491147abca9d7d4bb7105af628b223e" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/AssemblyInfo.cs b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/AssemblyInfo.cs index e01f1ae62..a08ae4433 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/AssemblyInfo.cs +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/AssemblyInfo.cs @@ -1,2 +1,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Unity.Multiplayer.Samples.SocialHub.Services")] +[assembly: InternalsVisibleTo("Unity.Multiplayer.Samples.SocialHub.Player")] + diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/HomeScreenView.cs b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/HomeScreenView.cs index f1c9d2b07..151c577c8 100644 --- a/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/HomeScreenView.cs +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/HomeScreenView.cs @@ -27,16 +27,16 @@ protected override void RegisterEvents() { m_PlayerNameField.RegisterValueChangedCallback(evt => OnFieldChanged()); m_SessionNameField.RegisterValueChangedCallback(evt => OnFieldChanged()); - m_StartButton.RegisterCallback(HandleStartButtonPressed); - m_QuitButton.RegisterCallback(HandleQuitButtonPressed); + m_StartButton.clicked += HandleStartButtonPressed; + m_QuitButton.clicked += HandleQuitButtonPressed; } protected override void UnregisterEvents() { m_PlayerNameField.UnregisterValueChangedCallback(evt => OnFieldChanged()); m_SessionNameField.UnregisterValueChangedCallback(evt => OnFieldChanged()); - m_StartButton.UnregisterCallback(HandleStartButtonPressed); - m_QuitButton.UnregisterCallback(HandleQuitButtonPressed); + m_StartButton.clicked -= HandleStartButtonPressed; + m_QuitButton.clicked -= HandleQuitButtonPressed; } void OnFieldChanged() @@ -46,13 +46,15 @@ void OnFieldChanged() m_StartButton.SetEnabled(!string.IsNullOrEmpty(playerName) && !string.IsNullOrEmpty(sessionName)); } - void HandleStartButtonPressed(ClickEvent evt) + void HandleStartButtonPressed() { string sessionName = m_SessionNameField.value; + //this should be reset if something goes wrong on connect + m_StartButton.enabledSelf = false; StartButtonPressed?.Invoke(sessionName); } - void HandleQuitButtonPressed(ClickEvent evt) + void HandleQuitButtonPressed() { Application.Quit(); } diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/IngameUI.meta b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/IngameUI.meta new file mode 100644 index 000000000..bd7c74be3 --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/IngameUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9bab18c22ac4418b935dc4ce3cf3a2a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/IngameUI/CarryBoxIndicator.cs b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/IngameUI/CarryBoxIndicator.cs new file mode 100644 index 000000000..aeb10db2f --- /dev/null +++ b/Experimental/DistributedAuthoritySample/Assets/Scripts/UI/IngameUI/CarryBoxIndicator.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections; +using UnityEngine; +using UnityEngine.UIElements; + +namespace Unity.Multiplayer.Samples.SocialHub.UI +{ + /// + /// Panel that shows interaction options when character carries something. + /// + class CarryBoxIndicator : MonoBehaviour + { + [SerializeField] + VisualTreeAsset m_CarryBoxIndicatorAsset; + + [SerializeField] + Camera m_Camera; + + [SerializeField] + float m_VerticalOffset = 1.5f; + + [SerializeField] + UIDocument m_ScreenspaceUI; + + [SerializeField] + float m_PanelMaxSize = 1.5f; + + [SerializeField] + float m_PanelMinSize = 0.7f; + + VisualElement m_CarryUI; + + Transform m_CarryTransform; + + bool m_IsShown; + + void OnEnable() + { + // Pick first child to avoid adding the root element + m_CarryUI = m_CarryBoxIndicatorAsset.CloneTree().GetFirstChild(); + m_CarryUI.AddToClassList(UIUtils.s_ActiveUSSClass); + m_ScreenspaceUI.rootVisualElement.Q("player-carry-container").Add(m_CarryUI); + m_CarryUI.Q