diff --git a/.yamato/project-builders/builder.metafile b/.yamato/project-builders/builder.metafile
index 16a865ba8c..cb73f69ef4 100644
--- a/.yamato/project-builders/builder.metafile
+++ b/.yamato/project-builders/builder.metafile
@@ -4,6 +4,7 @@ NetcodeProjects:
# Note that we are using internal Unity repo. This means that we may test with newest changes that are not yet released to our users (there are also public versions)
# Note that for BossRoom 'main' branch supports NGOv1.X and 'develop' branch supports NGOv2.X
# TODO: For BossRoom correct branch to develop when PR-3736 is merged in their repo
+ # TODO: For CharacterControllerMovingBodies correct the branch to use 'main' when this branch gets merged
BossRoom:
GithubRepo: "https://github.com/Unity-Technologies/com.unity.multiplayer.samples.coop.git"
branch: ngo-playtest-update
@@ -19,3 +20,8 @@ NetcodeProjects:
branch: main
manifestPath: Basic/DistributedAuthoritySocialHub/Packages/manifest.json
projectPath: 'Basic/DistributedAuthoritySocialHub'
+ CharacterControllerMovingBodies:
+ GithubRepo: "https://github.com/Unity-Technologies/com.unity.netcode.gameobjects.git"
+ branch: chore/update-charactercontroller-example-to-use-relay
+ manifestPath: Examples/CharacterControllerMovingBodies/Packages/manifest.json
+ projectPath: 'Examples/CharacterControllerMovingBodies'
diff --git a/Examples/CharacterControllerMovingBodies/Assets/DefaultNetworkPrefabs.asset b/Examples/CharacterControllerMovingBodies/Assets/DefaultNetworkPrefabs.asset
index 073f4484e8..b506110b82 100644
--- a/Examples/CharacterControllerMovingBodies/Assets/DefaultNetworkPrefabs.asset
+++ b/Examples/CharacterControllerMovingBodies/Assets/DefaultNetworkPrefabs.asset
@@ -15,17 +15,12 @@ MonoBehaviour:
IsDefault: 1
List:
- Override: 0
- Prefab: {fileID: 2522762726852386808, guid: 380c984d34fc8664c8f53fc1d8733a25, type: 3}
+ Prefab: {fileID: 8921789205124766477, guid: 8ae02ac62e2067144b8ff06d48aeb47a, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
- Prefab: {fileID: 8921789205124766477, guid: 89b57e576a8d47643b2dbd45b1f8cab1, type: 3}
- SourcePrefabToOverride: {fileID: 0}
- SourceHashToOverride: 0
- OverridingTargetPrefab: {fileID: 0}
- - Override: 0
- Prefab: {fileID: 3439633038736912633, guid: 398aad09d8b2a47eba664a076763cdcc, type: 3}
+ Prefab: {fileID: 5415449980466536476, guid: 0123d7125346c274da00b38e950a266b, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
diff --git a/Examples/CharacterControllerMovingBodies/Assets/Prefabs/PlayerNoRigidbody.prefab b/Examples/CharacterControllerMovingBodies/Assets/Prefabs/PlayerNoRigidbody.prefab
index ca1d2b414e..c770aebb7f 100644
--- a/Examples/CharacterControllerMovingBodies/Assets/Prefabs/PlayerNoRigidbody.prefab
+++ b/Examples/CharacterControllerMovingBodies/Assets/Prefabs/PlayerNoRigidbody.prefab
@@ -62,6 +62,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -83,6 +85,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -99,6 +102,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 792d7ce524eb358469373fe12babef88, type: 3}
m_Name:
m_EditorClassIdentifier:
+ ShowTopMostFoldoutHeaderGroup: 1
+ NetworkTransformExpanded: 0
+ AutoOwnerAuthorityTickOffset: 1
+ PositionInterpolationType: 0
+ RotationInterpolationType: 0
+ ScaleInterpolationType: 0
+ PositionLerpSmoothing: 1
+ PositionMaxInterpolationTime: 0.1
+ RotationLerpSmoothing: 1
+ RotationMaxInterpolationTime: 0.1
+ ScaleLerpSmoothing: 1
+ ScaleMaxInterpolationTime: 0.1
AuthorityMode: 1
TickSyncChildren: 0
UseUnreliableDeltas: 0
@@ -190,6 +205,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -211,6 +228,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -227,6 +245,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 792d7ce524eb358469373fe12babef88, type: 3}
m_Name:
m_EditorClassIdentifier:
+ ShowTopMostFoldoutHeaderGroup: 1
+ NetworkTransformExpanded: 0
+ AutoOwnerAuthorityTickOffset: 1
+ PositionInterpolationType: 0
+ RotationInterpolationType: 0
+ ScaleInterpolationType: 0
+ PositionLerpSmoothing: 1
+ PositionMaxInterpolationTime: 0.1
+ RotationLerpSmoothing: 1
+ RotationMaxInterpolationTime: 0.1
+ ScaleLerpSmoothing: 1
+ ScaleMaxInterpolationTime: 0.1
AuthorityMode: 1
TickSyncChildren: 0
UseUnreliableDeltas: 0
@@ -306,6 +336,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -327,6 +359,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -415,6 +448,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -436,6 +471,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -452,6 +488,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 792d7ce524eb358469373fe12babef88, type: 3}
m_Name:
m_EditorClassIdentifier:
+ ShowTopMostFoldoutHeaderGroup: 1
+ NetworkTransformExpanded: 0
+ AutoOwnerAuthorityTickOffset: 1
+ PositionInterpolationType: 0
+ RotationInterpolationType: 0
+ ScaleInterpolationType: 0
+ PositionLerpSmoothing: 1
+ PositionMaxInterpolationTime: 0.1
+ RotationLerpSmoothing: 1
+ RotationMaxInterpolationTime: 0.1
+ ScaleLerpSmoothing: 1
+ ScaleMaxInterpolationTime: 0.1
AuthorityMode: 1
TickSyncChildren: 0
UseUnreliableDeltas: 0
@@ -540,6 +588,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -561,6 +611,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -577,6 +628,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 792d7ce524eb358469373fe12babef88, type: 3}
m_Name:
m_EditorClassIdentifier:
+ ShowTopMostFoldoutHeaderGroup: 1
+ NetworkTransformExpanded: 0
+ AutoOwnerAuthorityTickOffset: 1
+ PositionInterpolationType: 0
+ RotationInterpolationType: 0
+ ScaleInterpolationType: 0
+ PositionLerpSmoothing: 1
+ PositionMaxInterpolationTime: 0.1
+ RotationLerpSmoothing: 1
+ RotationMaxInterpolationTime: 0.1
+ ScaleLerpSmoothing: 1
+ ScaleMaxInterpolationTime: 0.1
AuthorityMode: 1
TickSyncChildren: 0
UseUnreliableDeltas: 0
@@ -665,6 +728,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -686,6 +751,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -781,6 +847,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -802,6 +870,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -891,6 +960,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8e5128237997be649af0cc87dd0eb563, type: 3}
m_Name:
m_EditorClassIdentifier:
+ ShowTopMostFoldoutHeaderGroup: 1
ApplyColorToChildren: 1
IgnoreChildren:
- {fileID: 8837707216906300506}
@@ -906,6 +976,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 5ce25b0b3f15e6446a88a85787c2f94a, type: 3}
m_Name:
m_EditorClassIdentifier:
+ ShowTopMostFoldoutHeaderGroup: 1
+ NetworkTransformExpanded: 1
+ AutoOwnerAuthorityTickOffset: 1
+ PositionInterpolationType: 1
+ RotationInterpolationType: 1
+ ScaleInterpolationType: 0
+ PositionLerpSmoothing: 1
+ PositionMaxInterpolationTime: 0.6
+ RotationLerpSmoothing: 1
+ RotationMaxInterpolationTime: 0.6
+ ScaleLerpSmoothing: 1
+ ScaleMaxInterpolationTime: 0.1
AuthorityMode: 1
TickSyncChildren: 1
UseUnreliableDeltas: 0
@@ -918,7 +1000,7 @@ MonoBehaviour:
SyncScaleX: 1
SyncScaleY: 1
SyncScaleZ: 1
- PositionThreshold: 0.01
+ PositionThreshold: 0.001
RotAngleThreshold: 0.01
ScaleThreshold: 0.1
UseQuaternionSynchronization: 1
@@ -928,8 +1010,7 @@ MonoBehaviour:
SwitchTransformSpaceWhenParented: 1
Interpolate: 1
SlerpPosition: 0
- ExpandMoverScriptNoRigidbody: 0
- ExpandNetworkTransform: 1
+ MoverScriptNoRigidbodyExpanded: 0
SpawnRadius: 10
Increment: 1
RotationSpeed: 1.26
@@ -937,6 +1018,7 @@ MonoBehaviour:
JumpSpeed: 10
AirSpeedFactor: 0.35
Gravity: -9.8
+ ContinualChildMotion: 1
--- !u!65 &2509722539211228765
BoxCollider:
m_ObjectHideFlags: 0
diff --git a/Examples/CharacterControllerMovingBodies/Assets/Prefabs/RotatingBody.prefab b/Examples/CharacterControllerMovingBodies/Assets/Prefabs/RotatingBody.prefab
index 73c04c02fa..6fe843b30d 100644
--- a/Examples/CharacterControllerMovingBodies/Assets/Prefabs/RotatingBody.prefab
+++ b/Examples/CharacterControllerMovingBodies/Assets/Prefabs/RotatingBody.prefab
@@ -67,9 +67,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
PushDirection: 1
- ToCenterDirOrig: {x: 0, y: 0, z: 0}
- ToCenterDirCalc: {x: 0, y: 0, z: 0}
- ToCenterDirTrans: {x: 0, y: 0, z: 0}
--- !u!1 &1070469363212057228
GameObject:
m_ObjectHideFlags: 0
@@ -134,6 +131,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -155,6 +154,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -285,6 +285,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -306,6 +308,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -451,6 +454,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -472,6 +477,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -661,9 +667,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
PushDirection: 0
- ToCenterDirOrig: {x: 0, y: 0, z: 0}
- ToCenterDirCalc: {x: 0, y: 0, z: 0}
- ToCenterDirTrans: {x: 0, y: 0, z: 0}
--- !u!1 &4405129256840456534
GameObject:
m_ObjectHideFlags: 0
@@ -731,9 +734,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
PushDirection: 0
- ToCenterDirOrig: {x: 0, y: 0, z: 0}
- ToCenterDirCalc: {x: 0, y: 0, z: 0}
- ToCenterDirTrans: {x: 0, y: 0, z: 0}
--- !u!1 &5415449980466536476
GameObject:
m_ObjectHideFlags: 0
@@ -810,7 +810,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier:
- GlobalObjectIdHash: 1921503253
+ GlobalObjectIdHash: 1084435762
InScenePlacedSourceGlobalObjectIdHash: 0
DeferredDespawnTick: 0
Ownership: 2
@@ -822,6 +822,7 @@ MonoBehaviour:
DontDestroyWithOwner: 1
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
+ AllowOwnerToParent: 0
--- !u!114 &850162744905636139
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -834,6 +835,18 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 374ac199eb18f0f468bc018a722775c2, type: 3}
m_Name:
m_EditorClassIdentifier:
+ ShowTopMostFoldoutHeaderGroup: 1
+ NetworkTransformExpanded: 1
+ AutoOwnerAuthorityTickOffset: 1
+ PositionInterpolationType: 1
+ RotationInterpolationType: 1
+ ScaleInterpolationType: 0
+ PositionLerpSmoothing: 1
+ PositionMaxInterpolationTime: 0.7
+ RotationLerpSmoothing: 1
+ RotationMaxInterpolationTime: 0.7
+ ScaleLerpSmoothing: 1
+ ScaleMaxInterpolationTime: 0.1
AuthorityMode: 1
TickSyncChildren: 1
UseUnreliableDeltas: 0
@@ -846,19 +859,21 @@ MonoBehaviour:
SyncScaleX: 1
SyncScaleY: 1
SyncScaleZ: 1
- PositionThreshold: 0.1
+ PositionThreshold: 0.01
RotAngleThreshold: 0.01
ScaleThreshold: 0.1
UseQuaternionSynchronization: 1
- UseQuaternionCompression: 0
- UseHalfFloatPrecision: 0
+ UseQuaternionCompression: 1
+ UseHalfFloatPrecision: 1
InLocalSpace: 0
SwitchTransformSpaceWhenParented: 0
Interpolate: 1
SlerpPosition: 0
+ RotatingBodyLogicExpanded: 0
RotationSpeed: 0.25
RotateDirection: 0
- ZAxisMove: 0
+ OnExitTransferParentOnStay: {fileID: 0}
+ PathMovement: []
--- !u!1 &5463907175177238004
GameObject:
m_ObjectHideFlags: 0
@@ -1019,6 +1034,8 @@ MeshRenderer:
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -1040,6 +1057,7 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
@@ -1133,6 +1151,3 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
PushDirection: 1
- ToCenterDirOrig: {x: 0, y: 0, z: 0}
- ToCenterDirCalc: {x: 0, y: 0, z: 0}
- ToCenterDirTrans: {x: 0, y: 0, z: 0}
diff --git a/Examples/CharacterControllerMovingBodies/Assets/Scenes/CharacterController.unity b/Examples/CharacterControllerMovingBodies/Assets/Scenes/CharacterController.unity
index cca8cabbeb..1ac2fbdd18 100644
--- a/Examples/CharacterControllerMovingBodies/Assets/Scenes/CharacterController.unity
+++ b/Examples/CharacterControllerMovingBodies/Assets/Scenes/CharacterController.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
@@ -218,7 +219,7 @@ MonoBehaviour:
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
- SceneMigrationSynchronization: 1
+ SceneMigrationSynchronization: 0
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
@@ -261,6 +262,10 @@ PrefabInstance:
propertyPath: GlobalObjectIdHash
value: 3246499739
objectReference: {fileID: 0}
+ - target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
+ propertyPath: SceneMigrationSynchronization
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
propertyPath: InScenePlacedSourceGlobalObjectIdHash
value: 1084435762
@@ -350,6 +355,10 @@ PrefabInstance:
propertyPath: GlobalObjectIdHash
value: 4013775021
objectReference: {fileID: 0}
+ - target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
+ propertyPath: SceneMigrationSynchronization
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
propertyPath: InScenePlacedSourceGlobalObjectIdHash
value: 1084435762
@@ -489,7 +498,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: e4d8d44c602b97b47ba488a40c66267c, type: 3}
m_Name:
m_EditorClassIdentifier:
- NetworkManagerExpanded: 0
+ NetworkManagerExpanded: 1
NetworkConfig:
ProtocolVersion: 0
NetworkTransport: {fileID: 455857871}
@@ -520,10 +529,13 @@ MonoBehaviour:
RunInBackground: 1
LogLevel: 1
ExtendedNetworkManagerExpanded: 1
- ConnectionType: 1
TargetFrameRate: 100
EnableVSync: 0
- m_OriginalVSyncCount: 1
+ UseDAHost: 0
+ AuthenticateWithServices: 1
+ UseRelayConnection: 1
+ m_OriginalVSyncCount: 0
+ m_ServicesRegistered: 1
--- !u!1 &479361661
GameObject:
m_ObjectHideFlags: 0
@@ -861,6 +873,10 @@ PrefabInstance:
propertyPath: GlobalObjectIdHash
value: 1449196534
objectReference: {fileID: 0}
+ - target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
+ propertyPath: SceneMigrationSynchronization
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
propertyPath: InScenePlacedSourceGlobalObjectIdHash
value: 1084435762
@@ -1238,6 +1254,10 @@ PrefabInstance:
propertyPath: GlobalObjectIdHash
value: 4258258070
objectReference: {fileID: 0}
+ - target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
+ propertyPath: SceneMigrationSynchronization
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
propertyPath: InScenePlacedSourceGlobalObjectIdHash
value: 1084435762
@@ -1358,6 +1378,10 @@ PrefabInstance:
propertyPath: GlobalObjectIdHash
value: 1259759422
objectReference: {fileID: 0}
+ - target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
+ propertyPath: SceneMigrationSynchronization
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 3307166493715739449, guid: 0123d7125346c274da00b38e950a266b, type: 3}
propertyPath: InScenePlacedSourceGlobalObjectIdHash
value: 1084435762
diff --git a/Examples/CharacterControllerMovingBodies/Assets/Scripts/ExtendedNetworkManager.cs b/Examples/CharacterControllerMovingBodies/Assets/Scripts/ExtendedNetworkManager.cs
index 2c291bbe89..c1e78af55e 100644
--- a/Examples/CharacterControllerMovingBodies/Assets/Scripts/ExtendedNetworkManager.cs
+++ b/Examples/CharacterControllerMovingBodies/Assets/Scripts/ExtendedNetworkManager.cs
@@ -3,113 +3,116 @@
using System.Linq;
using System.Threading.Tasks;
using Unity.Netcode;
+using Unity.Netcode.Transports.UTP;
using Unity.Services.Authentication;
using Unity.Services.Core;
using Unity.Services.Multiplayer;
using UnityEngine;
+using Unity.Services.Relay.Models;
+using Unity.Services.Relay;
using SessionState = Unity.Services.Multiplayer.SessionState;
+
+#region ExtendedNetworkManagerEditor
#if UNITY_EDITOR
using Unity.Netcode.Editor;
using UnityEditor;
///
-/// The custom editor for the component.
+/// The custom editor for the component.
///
[CustomEditor(typeof(ExtendedNetworkManager), true)]
[CanEditMultipleObjects]
public class ExtendedNetworkManagerEditor : NetworkManagerEditor
{
- private SerializedProperty m_ConnectionType;
private SerializedProperty m_TargetFrameRate;
private SerializedProperty m_EnableVSync;
+ private SerializedProperty m_UseDAHost;
+ private SerializedProperty m_AuthenticateWithServices;
+ private SerializedProperty m_UseRelayConnection;
public override void OnEnable()
{
- m_ConnectionType = serializedObject.FindProperty(nameof(ExtendedNetworkManager.ConnectionType));
m_TargetFrameRate = serializedObject.FindProperty(nameof(ExtendedNetworkManager.TargetFrameRate));
m_EnableVSync = serializedObject.FindProperty(nameof(ExtendedNetworkManager.EnableVSync));
+ m_UseDAHost = serializedObject.FindProperty(nameof(ExtendedNetworkManager.UseDAHost));
+ m_AuthenticateWithServices = serializedObject.FindProperty(nameof(ExtendedNetworkManager.AuthenticateWithServices));
+ m_UseRelayConnection = serializedObject.FindProperty(nameof(ExtendedNetworkManager.UseRelayConnection));
base.OnEnable();
}
private void DisplayExtendedNetworkManagerProperties()
{
- EditorGUILayout.PropertyField(m_ConnectionType);
EditorGUILayout.PropertyField(m_TargetFrameRate);
EditorGUILayout.PropertyField(m_EnableVSync);
+ EditorGUILayout.PropertyField(m_UseDAHost);
+ EditorGUILayout.PropertyField(m_AuthenticateWithServices);
+ var extendedNetworkManager = target as ExtendedNetworkManager;
+ if (extendedNetworkManager.AuthenticateWithServices)
+ {
+ EditorGUILayout.PropertyField(m_UseRelayConnection);
+ }
+ else
+ {
+
+ extendedNetworkManager.UseRelayConnection = false;
+ }
}
public override void OnInspectorGUI()
{
var extendedNetworkManager = target as ExtendedNetworkManager;
- // Handle switching the appropriate connection type based on the network topology
- // Host connectio type can be set for client-server and distributed authority
- // Live Service can only be used with distributed authority
- // Client-server can only be used with a host connection type
- var connectionTypes = Enum.GetValues(typeof(ExtendedNetworkManager.ConnectionTypes));
- var connectionType = ExtendedNetworkManager.ConnectionTypes.LiveService;
- if (m_ConnectionType.enumValueIndex > 0 && m_ConnectionType.enumValueIndex < connectionTypes.Length)
- {
- connectionType = (ExtendedNetworkManager.ConnectionTypes)connectionTypes.GetValue(m_ConnectionType.enumValueIndex);
- }
- void SetExpanded(bool expanded) { extendedNetworkManager.ExtendedNetworkManagerExpanded = expanded; };
+ void SetExpanded(bool expanded) { extendedNetworkManager.ExtendedNetworkManagerExpanded = expanded; }
+ ;
DrawFoldOutGroup(extendedNetworkManager.GetType(), DisplayExtendedNetworkManagerProperties, extendedNetworkManager.ExtendedNetworkManagerExpanded, SetExpanded);
-
- var updatedConnectedType = (ExtendedNetworkManager.ConnectionTypes)connectionTypes.GetValue(m_ConnectionType.enumValueIndex);
- if (connectionType == updatedConnectedType && updatedConnectedType == ExtendedNetworkManager.ConnectionTypes.LiveService && extendedNetworkManager.NetworkConfig.NetworkTopology == NetworkTopologyTypes.ClientServer)
- {
- extendedNetworkManager.ConnectionType = ExtendedNetworkManager.ConnectionTypes.Host;
- }
- else if (connectionType == ExtendedNetworkManager.ConnectionTypes.Host && updatedConnectedType == ExtendedNetworkManager.ConnectionTypes.LiveService && extendedNetworkManager.NetworkConfig.NetworkTopology == NetworkTopologyTypes.ClientServer)
- {
- extendedNetworkManager.NetworkConfig.NetworkTopology = NetworkTopologyTypes.DistributedAuthority;
- }
base.OnInspectorGUI();
}
}
#endif
+#endregion
-
-
+///
+/// An extended NetworkManager to handle the bootstrap loading process specific to a client-server
+/// topology where one might want to have local server-side scenes, local client-side scenes, and shared (synchronized) scenes.
+///
+///
public class ExtendedNetworkManager : NetworkManager
{
+ #region Validation
#if UNITY_EDITOR
// Inspector view expand/collapse settings for this derived child class
[HideInInspector]
public bool ExtendedNetworkManagerExpanded;
-#endif
-
- public static ExtendedNetworkManager Instance;
+ protected override void OnValidateComponent()
+ {
+ m_OriginalVSyncCount = QualitySettings.vSyncCount;
+ CheckServiceStatus();
+ base.OnValidateComponent();
+ }
- public enum ConnectionTypes
+ private void CheckServiceStatus()
{
- LiveService,
- Host,
+ m_ServicesRegistered = CloudProjectSettings.organizationName != string.Empty && CloudProjectSettings.organizationId != string.Empty;
}
- public ConnectionTypes ConnectionType;
+#endif
+ #endregion
+
+ #region Properties
+ public static ExtendedNetworkManager Instance;
public int TargetFrameRate = 100;
public bool EnableVSync = false;
+ public bool UseDAHost = true;
+ public bool AuthenticateWithServices = true;
+ public bool UseRelayConnection = true;
+
+ private Allocation m_Allocation;
+ private string m_RelayJoinCode;
[HideInInspector]
[SerializeField]
private int m_OriginalVSyncCount;
-#if UNITY_EDITOR
-
- protected override void OnValidateComponent()
- {
- m_OriginalVSyncCount = QualitySettings.vSyncCount;
- base.OnValidateComponent();
- }
-#endif
-
- private ISession m_CurrentSession;
-
- private string m_SessionName;
- private string m_ProfileName;
- private Task m_SessionTask;
-
private enum ConnectionStates
{
None,
@@ -119,6 +122,17 @@ private enum ConnectionStates
private ConnectionStates m_ConnectionState;
+ [SerializeField]
+ private bool m_ServicesRegistered;
+ private ISession m_CurrentSession;
+ private string m_SessionName;
+ private string m_ProfileName;
+ private Task m_SessionTask;
+ private SceneLoader m_SceneLoader;
+
+ #endregion
+
+ #region Initialization and Destroy
public static string GetRandomString(int length)
{
var r = new System.Random();
@@ -133,9 +147,18 @@ public void SetFrameRate(int targetFrameRate, bool enableVsync)
private void Awake()
{
+#if UNITY_EDITOR
+
+ if (!EditorApplication.isPlaying)
+ {
+ CheckServiceStatus();
+ }
+#endif
+
Screen.SetResolution((int)(Screen.currentResolution.width * 0.40f), (int)(Screen.currentResolution.height * 0.40f), FullScreenMode.Windowed);
SetFrameRate(TargetFrameRate, EnableVSync);
SetSingleton();
+ m_SceneLoader = GetComponent();
}
private async void Start()
@@ -143,20 +166,34 @@ private async void Start()
OnClientConnectedCallback += OnClientConnected;
OnClientDisconnectCallback += OnClientDisconnect;
OnConnectionEvent += OnClientConnectionEvent;
- if (UnityServices.Instance != null && UnityServices.Instance.State != ServicesInitializationState.Initialized)
- {
- await UnityServices.InitializeAsync();
- }
- if (!AuthenticationService.Instance.IsSignedIn)
+
+ // Check to see if the project has been registered with an organization before trying to sign in
+ if (m_ServicesRegistered && AuthenticateWithServices)
{
- AuthenticationService.Instance.SignInFailed += SignInFailed;
- AuthenticationService.Instance.SignedIn += SignedIn;
- if (string.IsNullOrEmpty(m_ProfileName))
+ if (UnityServices.Instance != null && UnityServices.Instance.State != ServicesInitializationState.Initialized)
{
- m_ProfileName = GetRandomString(5);
+ await UnityServices.InitializeAsync();
+ }
+ if (!AuthenticationService.Instance.IsSignedIn)
+ {
+ AuthenticationService.Instance.SignInFailed += SignInFailed;
+ AuthenticationService.Instance.SignedIn += SignedIn;
+ if (string.IsNullOrEmpty(m_ProfileName))
+ {
+ m_ProfileName = GetRandomString(5);
+ }
+ AuthenticationService.Instance.SwitchProfile(m_ProfileName);
+ await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
- AuthenticationService.Instance.SwitchProfile(m_ProfileName);
- await AuthenticationService.Instance.SignInAnonymouslyAsync();
+ }
+
+ // Handle bootstrap loading the main menu into main menu
+ // NOTE: A common issue is when you place the NetworkManager within the same "primary" scene to
+ // load. Using the bootstrap approach, the 1st scene loaded is the bootstrap scene that
+ // contains the NetworkManager and it is never reloaded for that application instance lifespan.
+ if (m_SceneLoader)
+ {
+ m_SceneLoader.LoadMainMenu();
}
}
@@ -166,6 +203,44 @@ private void OnDestroy()
OnClientDisconnectCallback -= OnClientDisconnect;
OnConnectionEvent -= OnClientConnectionEvent;
}
+ #endregion
+
+ #region Session and Connection Event Handling
+ ///
+ /// Server and Clients all invoke this method
+ ///
+ private void OnClientConnectionEvent(NetworkManager networkManager, ConnectionEventData eventData)
+ {
+ LogMessage($"Connection event {eventData.EventType} for Client-{eventData.ClientId}.");
+ if (eventData.ClientId != LocalClientId)
+ {
+ return;
+ }
+
+ switch (eventData.EventType)
+ {
+ case ConnectionEvent.ClientConnected:
+ {
+ m_ConnectionState = ConnectionStates.Connected;
+ break;
+ }
+ case ConnectionEvent.ClientDisconnected:
+ {
+ m_ConnectionState = ConnectionStates.None;
+ break;
+ }
+ }
+ }
+
+ private void OnClientConnected(ulong clientId)
+ {
+ LogMessage($"Connected event invoked for Client-{clientId}.");
+ }
+
+ private void OnClientDisconnect(ulong clientId)
+ {
+ LogMessage($"Disconnected event invoked for Client-{clientId}.");
+ }
private void SignedIn()
{
@@ -179,104 +254,230 @@ private void SignInFailed(RequestFailedException error)
Debug.LogError($"Failed to sign in {m_ProfileName} anonymously: {error}");
}
- private void OnDrawLiveServiceGUI()
+ private void SessionStarted()
{
- m_SessionName = GUILayout.TextField(m_SessionName);
-
- if (GUILayout.Button("Create or Connect To Session"))
+ OnClientStarted -= SessionStarted;
+ m_ConnectionState = IsServer && !IsHost ? ConnectionStates.Connected : ConnectionStates.Connecting;
+ if (IsServer)
+ {
+ LogMessage($"Server started session.");
+ }
+ else
+ {
+ LogMessage($"Client connecting to session.");
+ }
+ if (DistributedAuthorityMode && CMBServiceConnection)
{
- NetworkConfig.UseCMBService = true;
- OnClientStopped += ClientStopped;
- OnClientStarted += ClientStarted;
- m_SessionTask = ConnectThroughLiveService();
- m_ConnectionState = ConnectionStates.Connecting;
- LogMessage($"Connecting to session {m_SessionName}...");
+ m_SceneLoader.DAClientStarted();
}
}
- private void OnDrawDAHostGUI()
+ private void SessionStopped(bool isHost)
{
- if (GUILayout.Button("Start Host"))
+ LogMessage($"NetworkManager has stopped.");
+ OnClientStopped -= SessionStopped;
+ m_ConnectionState = ConnectionStates.None;
+ }
+
+ private async Task ConnectThroughLiveService()
+ {
+ try
{
- OnClientStopped += ClientStopped;
- OnClientStarted += ClientStarted;
- StartHost();
- }
+ var options = new SessionOptions()
+ {
+ Name = m_SessionName,
+ MaxPlayers = 32
+ }.WithDistributedAuthorityNetwork();
- if (GUILayout.Button("Start Client"))
+ m_CurrentSession = await MultiplayerService.Instance.CreateOrJoinSessionAsync(m_SessionName, options);
+ return m_CurrentSession;
+ }
+ catch (Exception e)
{
- OnClientStopped += ClientStopped;
- OnClientStarted += ClientStarted;
- StartClient();
+ LogMessage($"{e.Message}");
+ Debug.LogException(e);
}
+ return null;
+ }
+ #endregion
+
+ #region GUI Menu
+ public void StartOrConnectToDistributedAuthoritySession()
+ {
+ m_SessionTask = ConnectThroughLiveService();
+ m_ConnectionState = ConnectionStates.Connecting;
+ LogMessage($"Connecting to session {m_SessionName}...");
}
private void OnUpdateGUIDisconnected()
{
GUILayout.BeginArea(new Rect(10, 10, 300, 800));
- GUILayout.Label("Session Name", GUILayout.Width(100));
-
- var connectionType = ConnectionType;
- if (NetworkConfig.NetworkTopology == NetworkTopologyTypes.ClientServer && connectionType != ConnectionTypes.Host)
+ if (NetworkConfig.NetworkTopology == NetworkTopologyTypes.DistributedAuthority)
{
- connectionType = ConnectionTypes.Host;
+ if (!m_ServicesRegistered)
+ {
+ GUILayout.Label("Project-Settings:Services-General-Settings is not configured.");
+ GUILayout.Label("Distributed authority requires project to be registered with your organization's services account for authentication purposes.");
+ }
+ else
+ {
+ if (UseDAHost)
+ {
+ if (GUILayout.Button("Start DAHost"))
+ {
+ OnServerStopped += SessionStopped;
+ OnServerStarted += SessionStarted;
+ StartHost();
+ }
+ else
+ if (GUILayout.Button("Start DAClient"))
+ {
+ OnClientStopped += SessionStopped;
+ OnClientStarted += SessionStarted;
+ StartClient();
+ }
+ }
+ else
+ {
+ m_SessionName = GUILayout.TextField(m_SessionName);
+ if (GUILayout.Button("Create or Connect To Session"))
+ {
+ NetworkConfig.UseCMBService = true;
+ OnClientStopped += SessionStopped;
+ OnClientStarted += SessionStarted;
+ StartOrConnectToDistributedAuthoritySession();
+ }
+ }
+ }
}
-
- switch (connectionType)
+ else
{
- case ConnectionTypes.LiveService:
+ var startText = "Start";
+ if (UseRelayConnection)
+ {
+ startText += " Relay";
+ GUILayout.Label("Join Code:", GUILayout.Width(100));
+ m_RelayJoinCode = GUILayout.TextField(m_RelayJoinCode);
+ }
+ if (!UseRelayConnection && GUILayout.Button($"{startText} Server"))
+ {
+ OnServerStopped += SessionStopped;
+ OnServerStarted += SessionStarted;
+ StartServer();
+ }
+ else
+ if (GUILayout.Button($"{startText} Host"))
+ {
+ OnServerStopped += SessionStopped;
+ OnServerStarted += SessionStarted;
+ if (UseRelayConnection)
{
- OnDrawLiveServiceGUI();
- break;
+ StartHostWithRelay();
}
- case ConnectionTypes.Host:
+ else
{
- OnDrawDAHostGUI();
- break;
+ StartHost();
}
+ }
+ else
+ if (GUILayout.Button($"{startText} Client"))
+ {
+ OnClientStopped += SessionStopped;
+ OnClientStarted += SessionStarted;
+ if (UseRelayConnection)
+ {
+ StartClientWithRelay();
+ }
+ else
+ {
+ StartClient();
+ }
+ }
}
-
GUILayout.EndArea();
+ }
- GUILayout.BeginArea(new Rect(10, Display.main.renderingHeight - 40, Display.main.renderingWidth - 10, 30));
- var scenesPreloaded = new System.Text.StringBuilder();
- scenesPreloaded.Append("Scenes Preloaded: ");
- for (int i = 0; i < UnityEngine.SceneManagement.SceneManager.sceneCount; i++)
+ private async void StartHostWithRelay(int maxConnections = 15)
+ {
+ m_ConnectionState = ConnectionStates.Connecting;
+ await UnityServices.InitializeAsync();
+ if (!AuthenticationService.Instance.IsSignedIn)
{
- var scene = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i);
- scenesPreloaded.Append($"[{scene.name}]");
+ await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
- GUILayout.Label(scenesPreloaded.ToString());
- GUILayout.EndArea();
+ m_Allocation = await RelayService.Instance.CreateAllocationAsync(maxConnections);
+ var unityTransport = NetworkConfig.NetworkTransport as UnityTransport;
+ unityTransport.UseEncryption = true;
+ var defaultEndPoint = (RelayServerEndpoint)null;
+ foreach (var endPoint in m_Allocation.ServerEndpoints)
+ {
+ if (endPoint.Secure && endPoint.Network == RelayServerEndpoint.NetworkOptions.Udp)
+ {
+ defaultEndPoint = endPoint;
+ break;
+ }
+ }
+ m_RelayJoinCode = await RelayService.Instance.GetJoinCodeAsync(m_Allocation.AllocationId);
+ unityTransport.SetRelayServerData(defaultEndPoint.Host, (ushort)defaultEndPoint.Port, m_Allocation.AllocationIdBytes, m_Allocation.Key, m_Allocation.ConnectionData, null, defaultEndPoint.Secure);
+ StartHost();
+
}
- private void OnUpdateGUIConnected()
+ private async void StartClientWithRelay()
{
- if (CMBServiceConnection)
+ m_ConnectionState = ConnectionStates.Connecting;
+ await UnityServices.InitializeAsync();
+ if (!AuthenticationService.Instance.IsSignedIn)
{
- GUILayout.BeginArea(new Rect(10, 10, 800, 800));
- GUILayout.Label($"Session: {m_SessionName}");
- GUILayout.EndArea();
+ await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
- else
+ var joinAllocation = await RelayService.Instance.JoinAllocationAsync(m_RelayJoinCode);
+ var defaultEndPoint = (RelayServerEndpoint)null;
+ foreach (var endPoint in joinAllocation.ServerEndpoints)
{
- GUILayout.BeginArea(new Rect(10, 10, 800, 800));
- if (DistributedAuthorityMode)
+ if (endPoint.Secure && endPoint.Network == RelayServerEndpoint.NetworkOptions.Udp)
{
- GUILayout.Label($"DAHosted Session");
+ defaultEndPoint = endPoint;
+ break;
}
- else
+ }
+ //Populate the joining data
+ var unityTransport = NetworkConfig.NetworkTransport as UnityTransport;
+ unityTransport.UseEncryption = true;
+ unityTransport.SetClientRelayData(defaultEndPoint.Host, (ushort)defaultEndPoint.Port, joinAllocation.AllocationIdBytes, joinAllocation.Key, joinAllocation.ConnectionData, joinAllocation.HostConnectionData, defaultEndPoint.Secure);
+ StartClient();
+ }
+
+ private int OnUpdateGUIConnected(int yAxisOffset)
+ {
+ GUILayout.BeginArea(new Rect(10, 10, 800, 800));
+ if (CMBServiceConnection)
+ {
+ GUILayout.Label($"Distributed Authority Session: {m_SessionName}");
+ if (LocalClient.IsSessionOwner)
{
- GUILayout.Label($"Client-Server Session");
+ GUILayout.Label("[Session Owner]");
+ yAxisOffset += 20;
}
-
- GUILayout.EndArea();
}
+ else
+ {
+ GUILayout.Label($"Client-Server Session");
+ if (UseRelayConnection && IsHost)
+ {
+ GUILayout.Label($"Join Code: {m_RelayJoinCode} (CTRL-C Copy)");
+ if (!string.IsNullOrEmpty(m_RelayJoinCode) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) && Input.GetKeyDown(KeyCode.C))
+ {
+ GUIUtility.systemCopyBuffer = m_RelayJoinCode;
+ }
+ }
+ }
+ GUILayout.EndArea();
- GUILayout.BeginArea(new Rect(Display.main.renderingWidth - 160, 10, 150, 80));
-
- if (GUILayout.Button("Disconnect"))
+ GUILayout.BeginArea(new Rect(Display.main.renderingWidth - 230, 10, 220, 300));
+ var endSessionText = IsServer && !DistributedAuthorityMode ? "Shutdown" : "Disconnect";
+ if (GUILayout.Button(endSessionText))
{
if (m_CurrentSession != null && m_CurrentSession.State == SessionState.Connected)
{
@@ -289,7 +490,22 @@ private void OnUpdateGUIConnected()
}
}
+ if (m_SceneLoader && !m_SceneLoader.SceneLoadingInProgress)
+ {
+ GUILayout.Label($"Current Scene: {UnityEngine.SceneManagement.SceneManager.GetActiveScene().name}");
+ if (IsSessionAuthority())
+ {
+ var buttonText = $"Load {m_SceneLoader.GetNextSceneNameToLoad()}";
+ if (GUILayout.Button(buttonText))
+ {
+ m_SceneLoader.LoadNextScene();
+ }
+ }
+ }
+
GUILayout.EndArea();
+
+ return yAxisOffset;
}
private void OnGUI()
@@ -305,13 +521,19 @@ private void OnGUI()
}
case ConnectionStates.Connected:
{
- yAxisOffset = 40;
- OnUpdateGUIConnected();
+ if (UseRelayConnection && IsHost)
+ {
+ yAxisOffset = OnUpdateGUIConnected(64);
+ }
+ else
+ {
+ yAxisOffset = OnUpdateGUIConnected(40);
+ }
break;
}
}
- GUILayout.BeginArea(new Rect(10, yAxisOffset, 600, 800));
+ GUILayout.BeginArea(new Rect(10, yAxisOffset, 800, 800));
if (m_MessageLogs.Count > 0)
{
GUILayout.Label("-----------(Log)-----------");
@@ -324,44 +546,16 @@ private void OnGUI()
}
GUILayout.EndArea();
}
+ #endregion
- private void ClientStarted()
- {
- OnClientStarted -= ClientStarted;
- m_ConnectionState = ConnectionStates.Connected;
- LogMessage($"Connected to session {m_SessionName}.");
- }
-
- private void ClientStopped(bool isHost)
- {
- OnClientStopped -= ClientStopped;
- m_ConnectionState = ConnectionStates.None;
- m_SessionTask = null;
- m_CurrentSession = null;
- }
+ #region Update and Status Methods
- private async Task ConnectThroughLiveService()
+ public bool IsSceneEventInProgress()
{
- try
- {
- var options = new SessionOptions()
- {
- Name = m_SessionName,
- MaxPlayers = 32
- }.WithDistributedAuthorityNetwork();
-
- m_CurrentSession = await MultiplayerService.Instance.CreateOrJoinSessionAsync(m_SessionName, options);
- return m_CurrentSession;
- }
- catch (Exception e)
- {
- LogMessage($"{e.Message}");
- Debug.LogException(e);
- }
- return null;
+ return m_SceneLoader != null ? m_SceneLoader.SceneLoadingInProgress : false;
}
- private void Update()
+ private void UpdateRuntimeMessageConsole()
{
if (m_MessageLogs.Count == 0)
{
@@ -377,20 +571,25 @@ private void Update()
}
}
- private void OnClientConnectionEvent(NetworkManager networkManager, ConnectionEventData eventData)
+ public bool IsSessionAuthority()
{
- LogMessage($"[{Time.realtimeSinceStartup}] Connection event {eventData.EventType} for Client-{eventData.ClientId}.");
+ if (!DistributedAuthorityMode)
+ {
+ return IsServer;
+ }
+ else
+ {
+ return LocalClientId == CurrentSessionOwner;
+ }
}
- private void OnClientConnected(ulong clientId)
+ private void Update()
{
- LogMessage($"[{Time.realtimeSinceStartup}] Connected event invoked for Client-{clientId}.");
+ UpdateRuntimeMessageConsole();
}
+ #endregion
- private void OnClientDisconnect(ulong clientId)
- {
- LogMessage($"[{Time.realtimeSinceStartup}] Disconnected event invoked for Client-{clientId}.");
- }
+ #region Message Logging
private List m_MessageLogs = new List();
@@ -408,6 +607,7 @@ public MessageLog(string msg, float timeToLive)
public void LogMessage(string msg, float timeToLive = 10.0f)
{
+ msg = $"[{Time.realtimeSinceStartup}] {msg}";
if (m_MessageLogs.Count > 0)
{
m_MessageLogs.Insert(0, new MessageLog(msg, timeToLive));
@@ -419,6 +619,7 @@ public void LogMessage(string msg, float timeToLive = 10.0f)
Debug.Log(msg);
}
+ #endregion
public ExtendedNetworkManager()
{
diff --git a/Examples/CharacterControllerMovingBodies/Assets/Scripts/MoverScriptNoRigidbody.cs b/Examples/CharacterControllerMovingBodies/Assets/Scripts/MoverScriptNoRigidbody.cs
index 13423f4629..7017966258 100644
--- a/Examples/CharacterControllerMovingBodies/Assets/Scripts/MoverScriptNoRigidbody.cs
+++ b/Examples/CharacterControllerMovingBodies/Assets/Scripts/MoverScriptNoRigidbody.cs
@@ -48,7 +48,8 @@ private void DisplayerMoverScriptNoRigidbodyProperties()
public override void OnInspectorGUI()
{
var moverScriptNoRigidbody = target as MoverScriptNoRigidbody;
- void SetExpanded(bool expanded) { moverScriptNoRigidbody.MoverScriptNoRigidbodyExpanded = expanded; };
+ void SetExpanded(bool expanded) { moverScriptNoRigidbody.MoverScriptNoRigidbodyExpanded = expanded; }
+ ;
DrawFoldOutGroup(moverScriptNoRigidbody.GetType(), DisplayerMoverScriptNoRigidbodyProperties, moverScriptNoRigidbody.MoverScriptNoRigidbodyExpanded, SetExpanded);
base.OnInspectorGUI();
}
diff --git a/Examples/CharacterControllerMovingBodies/Assets/Scripts/SceneLoader.cs b/Examples/CharacterControllerMovingBodies/Assets/Scripts/SceneLoader.cs
new file mode 100644
index 0000000000..7f4135ef8d
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/Assets/Scripts/SceneLoader.cs
@@ -0,0 +1,195 @@
+using System.Collections.Generic;
+using Unity.Netcode;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+public class SceneLoader : MonoBehaviour
+{
+#if UNITY_EDITOR
+ public SceneAsset MainMenu;
+ public List NetworkScenesToLoad;
+ private void OnValidate()
+ {
+ if (NetworkScenesToLoad != null)
+ {
+ foreach (SceneAsset sceneAsset in NetworkScenesToLoad)
+ {
+ if (sceneAsset == null) continue;
+ m_SceneNamesToLoad.Add(sceneAsset.name);
+ }
+ }
+ if (MainMenu)
+ {
+ m_MainMenuScene = MainMenu.name;
+ }
+ }
+#endif
+ public bool SceneLoadingInProgress { get; private set; }
+
+ [HideInInspector]
+ [SerializeField]
+ private string m_MainMenuScene;
+ [HideInInspector]
+ [SerializeField]
+ private List m_SceneNamesToLoad = new List();
+
+ private ExtendedNetworkManager m_NetworkManager;
+ private Scene m_CurrentLoadedScene;
+ private int m_NextSceneNameIndex = 0;
+
+ private void Awake()
+ {
+ m_NetworkManager = GetComponent();
+ }
+
+ private void SetCurrentScene()
+ {
+ m_CurrentLoadedScene = SceneManager.GetActiveScene();
+ if (m_SceneNamesToLoad.Contains(m_CurrentLoadedScene.name))
+ {
+ m_NextSceneNameIndex = (m_SceneNamesToLoad.IndexOf(m_CurrentLoadedScene.name) + 1) % m_SceneNamesToLoad.Count;
+ }
+ else
+ {
+ m_NextSceneNameIndex = 0;
+ }
+ }
+
+ private void OnStarted()
+ {
+ m_NetworkManager.OnClientStarted -= ClientStarted;
+ m_NetworkManager.OnServerStarted -= ServerStarted;
+ m_NetworkManager.OnServerStopped += OnServerStopped;
+ m_NetworkManager.OnClientStopped += OnClientStopped;
+ m_NetworkManager.SceneManager.OnLoadEventCompleted += OnLoadEventCompleted;
+ m_NetworkManager.SceneManager.OnSynchronizeComplete += OnSynchronizeComplete;
+ if (m_NetworkManager.IsServer)
+ {
+ LoadNextScene();
+ }
+ }
+
+ private void OnLoadEventCompleted(string sceneName, LoadSceneMode loadSceneMode, List clientsCompleted, List clientsTimedOut)
+ {
+ SceneLoadingInProgress = false;
+ SetCurrentScene();
+ var completed = string.Join(",", clientsCompleted);
+ var timedOut = string.Join(",", clientsTimedOut);
+ m_NetworkManager.LogMessage($"Scene loading event for {sceneName} completed!\n Client ids that completed event ({completed}) \n Client ids that timed out ({timedOut})");
+ }
+
+
+ private void OnSynchronizeComplete(ulong clientId)
+ {
+ m_NetworkManager.LogMessage($"Client-{clientId} synchronization completed.");
+ }
+
+ public void DAClientStarted()
+ {
+ // Use additive client synchronization.
+ m_NetworkManager.SceneManager.SetClientSynchronizationMode(LoadSceneMode.Additive);
+ // Unload any scenes not used once the client has finished synchronizing.
+ m_NetworkManager.SceneManager.PostSynchronizationSceneUnloading = true;
+ LoadNextScene(true);
+ }
+
+ private void ClientStarted()
+ {
+ OnStarted();
+ }
+
+ private void ServerStarted()
+ {
+ if (m_NetworkManager.IsHost)
+ {
+ return;
+ }
+ OnStarted();
+ }
+
+ public void LoadMainMenu()
+ {
+ if (m_MainMenuScene != string.Empty)
+ {
+ SceneManager.sceneLoaded += OnSceneLoaded;
+ SceneManager.LoadScene(m_MainMenuScene, LoadSceneMode.Single);
+ }
+ }
+ private void OnSceneLoaded(Scene sceneLoaded, LoadSceneMode loadSceneMode)
+ {
+ if (sceneLoaded.name == m_MainMenuScene)
+ {
+ SceneManager.sceneLoaded -= OnSceneLoaded;
+ m_NetworkManager.OnServerStopped -= OnServerStopped;
+ m_NetworkManager.OnClientStopped -= OnClientStopped;
+ m_NetworkManager.OnClientStarted += ClientStarted;
+ m_NetworkManager.OnServerStarted += ServerStarted;
+ SetCurrentScene();
+ }
+ }
+
+ private void OnStopped()
+ {
+ LoadMainMenu();
+ }
+
+ private void OnServerStopped(bool wasHost)
+ {
+ if (!wasHost)
+ {
+ OnStopped();
+ }
+ }
+
+ private void OnClientStopped(bool wasHost)
+ {
+ OnStopped();
+ }
+
+ private string m_NextSceneLoading;
+ public void LoadNextScene(bool isPreload = false)
+ {
+ if ((!m_NetworkManager.DistributedAuthorityMode && !m_NetworkManager.IsServer) || !m_NetworkManager.IsListening)
+ {
+ return;
+ }
+
+ m_NextSceneLoading = GetNextSceneNameToLoad();
+ if (isPreload)
+ {
+ SceneManager.sceneLoaded += OnPreSceneLoaded;
+ SceneManager.LoadScene(m_NextSceneLoading, LoadSceneMode.Single);
+ SceneLoadingInProgress = true;
+ }
+ else
+ {
+ var loadStatus = m_NetworkManager.SceneManager.LoadScene(m_NextSceneLoading, LoadSceneMode.Single);
+ if (loadStatus != SceneEventProgressStatus.Started)
+ {
+ m_NetworkManager.LogMessage($"Failed to start scene loading event for {m_NextSceneLoading}! [Status: {loadStatus}]");
+ }
+ else
+ {
+ SceneLoadingInProgress = true;
+ }
+ }
+ }
+
+ private void OnPreSceneLoaded(Scene scene, LoadSceneMode loadSceneMode)
+ {
+ if (scene.name == m_NextSceneLoading)
+ {
+ SceneManager.sceneLoaded -= OnPreSceneLoaded;
+ SceneLoadingInProgress = false;
+ SetCurrentScene();
+ }
+ }
+
+ public string GetNextSceneNameToLoad()
+ {
+ return m_SceneNamesToLoad[m_NextSceneNameIndex];
+ }
+}
diff --git a/Examples/CharacterControllerMovingBodies/Assets/Scripts/SceneLoader.cs.meta b/Examples/CharacterControllerMovingBodies/Assets/Scripts/SceneLoader.cs.meta
new file mode 100644
index 0000000000..5e1651b407
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/Assets/Scripts/SceneLoader.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: e8d0b216f41de3547b6a51cd68641751
\ No newline at end of file
diff --git a/Examples/CharacterControllerMovingBodies/Packages/manifest.json b/Examples/CharacterControllerMovingBodies/Packages/manifest.json
index 78d06b2065..c2084a19ed 100644
--- a/Examples/CharacterControllerMovingBodies/Packages/manifest.json
+++ b/Examples/CharacterControllerMovingBodies/Packages/manifest.json
@@ -3,22 +3,24 @@
"com.unity.2d.sprite": "1.0.0",
"com.unity.2d.tilemap": "1.0.0",
"com.unity.ads": "4.4.2",
- "com.unity.ai.navigation": "2.0.3",
+ "com.unity.ai.navigation": "2.0.9",
"com.unity.analytics": "3.8.1",
- "com.unity.collab-proxy": "2.4.4",
+ "com.unity.collab-proxy": "2.9.3",
"com.unity.feature.development": "1.0.2",
- "com.unity.ide.rider": "3.0.31",
- "com.unity.ide.visualstudio": "2.0.22",
- "com.unity.netcode.gameobjects": "https://github.com/Unity-Technologies/com.unity.netcode.gameobjects.git?path=com.unity.netcode.gameobjects#develop-2.0.0",
+ "com.unity.ide.rider": "3.0.37",
+ "com.unity.ide.visualstudio": "2.0.23",
+ "com.unity.multiplayer.center": "1.0.0",
+ "com.unity.multiplayer.playmode": "1.6.1",
+ "com.unity.netcode.gameobjects": "https://github.com/Unity-Technologies/com.unity.netcode.gameobjects.git?path=com.unity.netcode.gameobjects#release/2.7.0",
"com.unity.purchasing": "4.12.2",
"com.unity.services.multiplayer": "1.2.0",
- "com.unity.test-framework": "1.4.5",
- "com.unity.timeline": "1.8.7",
- "com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.9",
- "com.unity.transport": "2.3.0",
+ "com.unity.test-framework": "1.6.0",
+ "com.unity.timeline": "1.8.9",
+ "com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.10",
+ "com.unity.transport": "2.5.3",
"com.unity.ugui": "2.0.0",
- "com.unity.visualscripting": "1.9.4",
- "com.unity.xr.legacyinputhelpers": "2.1.10",
+ "com.unity.visualscripting": "1.9.7",
+ "com.unity.xr.legacyinputhelpers": "2.1.12",
"com.unity.modules.accessibility": "1.0.0",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
diff --git a/Examples/CharacterControllerMovingBodies/Packages/packages-lock.json b/Examples/CharacterControllerMovingBodies/Packages/packages-lock.json
new file mode 100644
index 0000000000..f3b153e320
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/Packages/packages-lock.json
@@ -0,0 +1,653 @@
+{
+ "dependencies": {
+ "com.unity.2d.sprite": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.2d.tilemap": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.tilemap": "1.0.0",
+ "com.unity.modules.uielements": "1.0.0"
+ }
+ },
+ "com.unity.ads": {
+ "version": "4.4.2",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ai.navigation": {
+ "version": "2.0.9",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.modules.ai": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.analytics": {
+ "version": "3.8.1",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0",
+ "com.unity.services.analytics": "1.0.4"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.burst": {
+ "version": "1.8.24",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.mathematics": "1.2.1",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.collab-proxy": {
+ "version": "2.9.3",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.collections": {
+ "version": "2.5.7",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.burst": "1.8.19",
+ "com.unity.mathematics": "1.3.2",
+ "com.unity.test-framework": "1.4.6",
+ "com.unity.nuget.mono-cecil": "1.11.5",
+ "com.unity.test-framework.performance": "3.0.3"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.editorcoroutines": {
+ "version": "1.0.1",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ext.nunit": {
+ "version": "2.0.5",
+ "depth": 1,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.feature.development": {
+ "version": "1.0.2",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.ide.visualstudio": "2.0.25",
+ "com.unity.ide.rider": "3.0.38",
+ "com.unity.editorcoroutines": "1.0.1",
+ "com.unity.performance.profile-analyzer": "1.2.4",
+ "com.unity.test-framework": "1.6.0",
+ "com.unity.testtools.codecoverage": "1.2.7"
+ }
+ },
+ "com.unity.ide.rider": {
+ "version": "3.0.38",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ext.nunit": "1.0.6"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ide.visualstudio": {
+ "version": "2.0.25",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.test-framework": "1.1.31"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.mathematics": {
+ "version": "1.3.2",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.multiplayer.center": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.uielements": "1.0.0"
+ }
+ },
+ "com.unity.multiplayer.playmode": {
+ "version": "1.6.1",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.nuget.newtonsoft-json": "2.0.2"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.netcode.gameobjects": {
+ "version": "https://github.com/Unity-Technologies/com.unity.netcode.gameobjects.git?path=com.unity.netcode.gameobjects#release/2.7.0",
+ "depth": 0,
+ "source": "git",
+ "dependencies": {
+ "com.unity.nuget.mono-cecil": "1.11.4",
+ "com.unity.transport": "2.6.0"
+ },
+ "hash": "420639652d81d56a7251f1a5fc69846d1872c33c"
+ },
+ "com.unity.nuget.mono-cecil": {
+ "version": "1.11.5",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.nuget.newtonsoft-json": {
+ "version": "3.2.1",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.performance.profile-analyzer": {
+ "version": "1.2.4",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.purchasing": {
+ "version": "4.12.2",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0",
+ "com.unity.services.core": "1.12.5",
+ "com.unity.modules.androidjni": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.unitywebrequest": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.analytics": {
+ "version": "6.1.0",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0",
+ "com.unity.services.core": "1.12.4",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.authentication": {
+ "version": "3.4.1",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0",
+ "com.unity.services.core": "1.14.0",
+ "com.unity.nuget.newtonsoft-json": "3.2.1",
+ "com.unity.modules.unitywebrequest": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.core": {
+ "version": "1.14.0",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.modules.androidjni": "1.0.0",
+ "com.unity.nuget.newtonsoft-json": "3.2.1",
+ "com.unity.modules.unitywebrequest": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.deployment": {
+ "version": "1.4.1",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.services.core": "1.12.0",
+ "com.unity.services.deployment.api": "1.1.2"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.deployment.api": {
+ "version": "1.1.2",
+ "depth": 2,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.multiplayer": {
+ "version": "1.1.8",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.transport": "2.5.0",
+ "com.unity.collections": "2.2.1",
+ "com.unity.services.qos": "1.3.0",
+ "com.unity.services.core": "1.13.0",
+ "com.unity.services.wire": "1.4.0",
+ "com.unity.services.deployment": "1.3.0",
+ "com.unity.nuget.newtonsoft-json": "3.2.1",
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.services.authentication": "3.3.3"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.qos": {
+ "version": "1.3.0",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.collections": "1.2.4",
+ "com.unity.services.core": "1.12.4",
+ "com.unity.nuget.newtonsoft-json": "3.0.2",
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.services.authentication": "2.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.services.wire": {
+ "version": "1.4.0",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.services.core": "1.12.5",
+ "com.unity.nuget.newtonsoft-json": "3.2.1",
+ "com.unity.services.authentication": "2.7.4"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.settings-manager": {
+ "version": "2.1.0",
+ "depth": 2,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.sysroot": {
+ "version": "2.0.10",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.sysroot.linux-x86_64": {
+ "version": "2.0.9",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.sysroot": "2.0.10"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.test-framework": {
+ "version": "1.6.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.ext.nunit": "2.0.3",
+ "com.unity.modules.imgui": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ }
+ },
+ "com.unity.test-framework.performance": {
+ "version": "3.1.0",
+ "depth": 2,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.test-framework": "1.1.33",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.testtools.codecoverage": {
+ "version": "1.2.7",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.test-framework": "1.0.16",
+ "com.unity.settings-manager": "1.0.1"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.timeline": {
+ "version": "1.8.9",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.director": "1.0.0",
+ "com.unity.modules.animation": "1.0.0",
+ "com.unity.modules.particlesystem": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.toolchain.win-x86_64-linux-x86_64": {
+ "version": "2.0.10",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.sysroot": "2.0.10",
+ "com.unity.sysroot.linux-x86_64": "2.0.9"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.transport": {
+ "version": "2.6.0",
+ "depth": 1,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.burst": "1.8.24",
+ "com.unity.collections": "2.2.1",
+ "com.unity.mathematics": "1.3.2"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.ugui": {
+ "version": "2.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.ui": "1.0.0",
+ "com.unity.modules.imgui": "1.0.0"
+ }
+ },
+ "com.unity.visualscripting": {
+ "version": "1.9.7",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.ugui": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.xr.legacyinputhelpers": {
+ "version": "2.1.12",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {
+ "com.unity.modules.vr": "1.0.0",
+ "com.unity.modules.xr": "1.0.0"
+ },
+ "url": "https://packages.unity.com"
+ },
+ "com.unity.modules.accessibility": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.ai": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.androidjni": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.animation": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.assetbundle": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.audio": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.cloth": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0"
+ }
+ },
+ "com.unity.modules.director": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.animation": "1.0.0"
+ }
+ },
+ "com.unity.modules.hierarchycore": {
+ "version": "1.0.0",
+ "depth": 1,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.imageconversion": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.imgui": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.jsonserialize": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.particlesystem": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.physics": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.physics2d": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.screencapture": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.imageconversion": "1.0.0"
+ }
+ },
+ "com.unity.modules.subsystems": {
+ "version": "1.0.0",
+ "depth": 1,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.jsonserialize": "1.0.0"
+ }
+ },
+ "com.unity.modules.terrain": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.terrainphysics": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0",
+ "com.unity.modules.terrain": "1.0.0"
+ }
+ },
+ "com.unity.modules.tilemap": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics2d": "1.0.0"
+ }
+ },
+ "com.unity.modules.ui": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.uielements": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.ui": "1.0.0",
+ "com.unity.modules.imgui": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.hierarchycore": "1.0.0",
+ "com.unity.modules.physics": "1.0.0"
+ }
+ },
+ "com.unity.modules.umbra": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.unityanalytics": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequest": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.unitywebrequestassetbundle": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.assetbundle": "1.0.0",
+ "com.unity.modules.unitywebrequest": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequestaudio": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.audio": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequesttexture": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.imageconversion": "1.0.0"
+ }
+ },
+ "com.unity.modules.unitywebrequestwww": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.unitywebrequest": "1.0.0",
+ "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
+ "com.unity.modules.unitywebrequestaudio": "1.0.0",
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.assetbundle": "1.0.0",
+ "com.unity.modules.imageconversion": "1.0.0"
+ }
+ },
+ "com.unity.modules.vehicles": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0"
+ }
+ },
+ "com.unity.modules.video": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.audio": "1.0.0",
+ "com.unity.modules.ui": "1.0.0",
+ "com.unity.modules.unitywebrequest": "1.0.0"
+ }
+ },
+ "com.unity.modules.vr": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.physics": "1.0.0",
+ "com.unity.modules.xr": "1.0.0"
+ }
+ },
+ "com.unity.modules.wind": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
+ "com.unity.modules.xr": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.physics": "1.0.0",
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.subsystems": "1.0.0"
+ }
+ }
+ }
+}
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/AudioManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/AudioManager.asset
new file mode 100644
index 0000000000..df1e8090a2
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/AudioManager.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!11 &1
+AudioManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Volume: 1
+ Rolloff Scale: 1
+ Doppler Factor: 1
+ Default Speaker Mode: 2
+ m_SampleRate: 0
+ m_DSPBufferSize: 1024
+ m_VirtualVoiceCount: 512
+ m_RealVoiceCount: 32
+ m_EnableOutputSuspension: 1
+ m_SpatializerPlugin:
+ m_AmbisonicDecoderPlugin:
+ m_DisableAudio: 0
+ m_VirtualizeEffects: 1
+ m_RequestedDSPBufferSize: 0
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/ClusterInputManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/ClusterInputManager.asset
new file mode 100644
index 0000000000..e7886b266a
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/ClusterInputManager.asset
@@ -0,0 +1,6 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!236 &1
+ClusterInputManager:
+ m_ObjectHideFlags: 0
+ m_Inputs: []
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/DynamicsManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/DynamicsManager.asset
new file mode 100644
index 0000000000..118ec1920f
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/DynamicsManager.asset
@@ -0,0 +1,41 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!55 &1
+PhysicsManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 20
+ m_Gravity: {x: 0, y: -9.81, z: 0}
+ m_DefaultMaterial: {fileID: 0}
+ m_BounceThreshold: 2
+ m_DefaultMaxDepenetrationVelocity: 10
+ m_SleepThreshold: 0.005
+ m_DefaultContactOffset: 0.01
+ m_DefaultSolverIterations: 6
+ m_DefaultSolverVelocityIterations: 1
+ m_QueriesHitBackfaces: 0
+ m_QueriesHitTriggers: 1
+ m_EnableAdaptiveForce: 0
+ m_ClothInterCollisionDistance: 0.1
+ m_ClothInterCollisionStiffness: 0.2
+ m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ m_SimulationMode: 0
+ m_AutoSyncTransforms: 0
+ m_ReuseCollisionCallbacks: 0
+ m_InvokeCollisionCallbacks: 1
+ m_ClothInterCollisionSettingsToggle: 0
+ m_ClothGravity: {x: 0, y: -9.81, z: 0}
+ m_ContactPairsMode: 0
+ m_BroadphaseType: 0
+ m_WorldBounds:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 256, y: 256, z: 256}
+ m_WorldSubdivisions: 8
+ m_FrictionType: 0
+ m_EnableEnhancedDeterminism: 0
+ m_ImprovedPatchFriction: 0
+ m_GenerateOnTriggerStayEvents: 1
+ m_SolverType: 0
+ m_DefaultMaxAngularSpeed: 50
+ m_ScratchBufferChunkCount: 4
+ m_CurrentBackendId: 4072204805
+ m_FastMotionThreshold: 3.4028235e+38
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/EditorSettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/EditorSettings.asset
new file mode 100644
index 0000000000..c3aef21146
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/EditorSettings.asset
@@ -0,0 +1,50 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!159 &1
+EditorSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 15
+ m_SerializationMode: 2
+ m_LineEndingsForNewScripts: 2
+ m_DefaultBehaviorMode: 0
+ m_PrefabRegularEnvironment: {fileID: 0}
+ m_PrefabUIEnvironment: {fileID: 0}
+ m_SpritePackerMode: 0
+ m_SpritePackerCacheSize: 10
+ m_SpritePackerPaddingPower: 1
+ m_Bc7TextureCompressor: 0
+ m_EtcTextureCompressorBehavior: 1
+ m_EtcTextureFastCompressor: 1
+ m_EtcTextureNormalCompressor: 2
+ m_EtcTextureBestCompressor: 4
+ m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp;java;cpp;c;mm;m;h
+ m_ProjectGenerationRootNamespace:
+ m_EnableTextureStreamingInEditMode: 1
+ m_EnableTextureStreamingInPlayMode: 1
+ m_EnableEditorAsyncCPUTextureLoading: 0
+ m_AsyncShaderCompilation: 1
+ m_PrefabModeAllowAutoSave: 1
+ m_EnterPlayModeOptionsEnabled: 1
+ m_EnterPlayModeOptions: 0
+ m_GameObjectNamingDigits: 1
+ m_GameObjectNamingScheme: 0
+ m_AssetNamingUsesSpace: 1
+ m_InspectorUseIMGUIDefaultInspector: 0
+ m_UseLegacyProbeSampleCount: 0
+ m_SerializeInlineMappingsOnOneLine: 1
+ m_DisableCookiesInLightmapper: 0
+ m_ShadowmaskStitching: 1
+ m_AssetPipelineMode: 1
+ m_RefreshImportMode: 0
+ m_CacheServerMode: 0
+ m_CacheServerEndpoint:
+ m_CacheServerNamespacePrefix: default
+ m_CacheServerEnableDownload: 1
+ m_CacheServerEnableUpload: 1
+ m_CacheServerEnableAuth: 0
+ m_CacheServerEnableTls: 0
+ m_CacheServerValidationMode: 2
+ m_CacheServerDownloadBatchSize: 128
+ m_EnableEnlightenBakedGI: 0
+ m_ReferencedClipsExactNaming: 1
+ m_ForceAssetUnloadAndGCOnSceneLoad: 1
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/GraphicsSettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/GraphicsSettings.asset
new file mode 100644
index 0000000000..7c0ea0b5c3
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/GraphicsSettings.asset
@@ -0,0 +1,66 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!30 &1
+GraphicsSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 16
+ m_Deferred:
+ m_Mode: 1
+ m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
+ m_DeferredReflections:
+ m_Mode: 1
+ m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
+ m_ScreenSpaceShadows:
+ m_Mode: 1
+ m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
+ m_DepthNormals:
+ m_Mode: 1
+ m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
+ m_MotionVectors:
+ m_Mode: 1
+ m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightHalo:
+ m_Mode: 1
+ m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
+ m_LensFlare:
+ m_Mode: 1
+ m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
+ m_VideoShadersIncludeMode: 2
+ m_AlwaysIncludedShaders:
+ - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
+ m_PreloadedShaders: []
+ m_PreloadShadersBatchTimeLimit: -1
+ m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_CustomRenderPipeline: {fileID: 0}
+ m_TransparencySortMode: 0
+ m_TransparencySortAxis: {x: 0, y: 0, z: 1}
+ m_DefaultRenderingPath: 1
+ m_DefaultMobileRenderingPath: 1
+ m_TierSettings: []
+ m_LightmapStripping: 0
+ m_FogStripping: 0
+ m_InstancingStripping: 0
+ m_BrgStripping: 0
+ m_LightmapKeepPlain: 1
+ m_LightmapKeepDirCombined: 1
+ m_LightmapKeepDynamicPlain: 1
+ m_LightmapKeepDynamicDirCombined: 1
+ m_LightmapKeepShadowMask: 1
+ m_LightmapKeepSubtractive: 1
+ m_FogKeepLinear: 1
+ m_FogKeepExp: 1
+ m_FogKeepExp2: 1
+ m_AlbedoSwatchInfos: []
+ m_RenderPipelineGlobalSettingsMap: {}
+ m_LightsUseLinearIntensity: 0
+ m_LightsUseColorTemperature: 0
+ m_LogWhenShaderIsCompiled: 0
+ m_LightProbeOutsideHullStrategy: 1
+ m_CameraRelativeLightCulling: 0
+ m_CameraRelativeShadowCulling: 0
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/InputManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/InputManager.asset
new file mode 100644
index 0000000000..8068b2058b
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/InputManager.asset
@@ -0,0 +1,296 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!13 &1
+InputManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Axes:
+ - serializedVersion: 3
+ m_Name: Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: left
+ positiveButton: right
+ altNegativeButton: a
+ altPositiveButton: d
+ gravity: 3
+ dead: 0.001
+ sensitivity: 3
+ snap: 1
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: down
+ positiveButton: up
+ altNegativeButton: s
+ altPositiveButton: w
+ gravity: 3
+ dead: 0.001
+ sensitivity: 3
+ snap: 1
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire1
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left ctrl
+ altNegativeButton:
+ altPositiveButton: mouse 0
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire2
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left alt
+ altNegativeButton:
+ altPositiveButton: mouse 1
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire3
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left shift
+ altNegativeButton:
+ altPositiveButton: mouse 2
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Jump
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: space
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse X
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: 0.1
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse Y
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: 0.1
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 1
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse ScrollWheel
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: 0.1
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 2
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0.19
+ sensitivity: 1
+ snap: 0
+ invert: 0
+ type: 2
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0.19
+ sensitivity: 1
+ snap: 0
+ invert: 1
+ type: 2
+ axis: 1
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire1
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 0
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire2
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 1
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire3
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 2
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Jump
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 3
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Submit
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: return
+ altNegativeButton:
+ altPositiveButton: joystick button 0
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Submit
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: enter
+ altNegativeButton:
+ altPositiveButton: space
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Cancel
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: escape
+ altNegativeButton:
+ altPositiveButton: joystick button 1
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ m_UsePhysicalKeys: 1
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/MemorySettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/MemorySettings.asset
new file mode 100644
index 0000000000..5b5facecac
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/MemorySettings.asset
@@ -0,0 +1,35 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!387306366 &1
+MemorySettings:
+ m_ObjectHideFlags: 0
+ m_EditorMemorySettings:
+ m_MainAllocatorBlockSize: -1
+ m_ThreadAllocatorBlockSize: -1
+ m_MainGfxBlockSize: -1
+ m_ThreadGfxBlockSize: -1
+ m_CacheBlockSize: -1
+ m_TypetreeBlockSize: -1
+ m_ProfilerBlockSize: -1
+ m_ProfilerEditorBlockSize: -1
+ m_BucketAllocatorGranularity: -1
+ m_BucketAllocatorBucketsCount: -1
+ m_BucketAllocatorBlockSize: -1
+ m_BucketAllocatorBlockCount: -1
+ m_ProfilerBucketAllocatorGranularity: -1
+ m_ProfilerBucketAllocatorBucketsCount: -1
+ m_ProfilerBucketAllocatorBlockSize: -1
+ m_ProfilerBucketAllocatorBlockCount: -1
+ m_TempAllocatorSizeMain: -1
+ m_JobTempAllocatorBlockSize: -1
+ m_BackgroundJobTempAllocatorBlockSize: -1
+ m_JobTempAllocatorReducedBlockSize: -1
+ m_TempAllocatorSizeGIBakingWorker: -1
+ m_TempAllocatorSizeNavMeshWorker: -1
+ m_TempAllocatorSizeAudioWorker: -1
+ m_TempAllocatorSizeCloudWorker: -1
+ m_TempAllocatorSizeGfx: -1
+ m_TempAllocatorSizeJobWorker: -1
+ m_TempAllocatorSizeBackgroundWorker: -1
+ m_TempAllocatorSizePreloadManager: -1
+ m_PlatformMemorySettings: {}
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/MultiplayerManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/MultiplayerManager.asset
new file mode 100644
index 0000000000..2a936644e0
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/MultiplayerManager.asset
@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!655991488 &1
+MultiplayerManager:
+ m_ObjectHideFlags: 0
+ m_EnableMultiplayerRoles: 0
+ m_StrippingTypes: {}
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/NavMeshAreas.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/NavMeshAreas.asset
new file mode 100644
index 0000000000..2e2e36968e
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/NavMeshAreas.asset
@@ -0,0 +1,93 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!126 &1
+NavMeshProjectSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ areas:
+ - name: Walkable
+ cost: 1
+ - name: Not Walkable
+ cost: 1
+ - name: Jump
+ cost: 2
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ m_LastAgentTypeID: -887442657
+ m_Settings:
+ - serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.75
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_SettingNames:
+ - Humanoid
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/PackageManagerSettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/PackageManagerSettings.asset
new file mode 100644
index 0000000000..60e15cb44d
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/PackageManagerSettings.asset
@@ -0,0 +1,40 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 53
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier: UnityEditor.dll::UnityEditor.PackageManager.UI.Internal.PackageManagerProjectSettings
+ m_EnablePreReleasePackages: 0
+ m_AdvancedSettingsExpanded: 1
+ m_ScopedRegistriesSettingsExpanded: 1
+ m_SeeAllPackageVersions: 0
+ m_DismissPreviewPackagesInUse: 0
+ oneTimeWarningShown: 0
+ oneTimeDeprecatedPopUpShown: 0
+ m_Registries:
+ - m_Id: main
+ m_Name:
+ m_Url: https://packages.unity.com
+ m_Scopes: []
+ m_IsDefault: 1
+ m_Capabilities: 7
+ m_ConfigSource: 0
+ m_Compliance:
+ m_Status: 0
+ m_Violations: []
+ m_UserSelectedRegistryName:
+ m_UserAddingNewScopedRegistry: 0
+ m_RegistryInfoDraft:
+ m_Modified: 0
+ m_ErrorMessage:
+ m_UserModificationsInstanceId: -906
+ m_OriginalInstanceId: -908
+ m_LoadAssets: 0
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/Physics2DSettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/Physics2DSettings.asset
new file mode 100644
index 0000000000..c00eeb46fd
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/Physics2DSettings.asset
@@ -0,0 +1,56 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!19 &1
+Physics2DSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 6
+ m_Gravity: {x: 0, y: -9.81}
+ m_DefaultMaterial: {fileID: 0}
+ m_VelocityIterations: 8
+ m_PositionIterations: 3
+ m_BounceThreshold: 1
+ m_MaxLinearCorrection: 0.2
+ m_MaxAngularCorrection: 8
+ m_MaxTranslationSpeed: 100
+ m_MaxRotationSpeed: 360
+ m_BaumgarteScale: 0.2
+ m_BaumgarteTimeOfImpactScale: 0.75
+ m_TimeToSleep: 0.5
+ m_LinearSleepTolerance: 0.01
+ m_AngularSleepTolerance: 2
+ m_DefaultContactOffset: 0.01
+ m_ContactThreshold: 0
+ m_JobOptions:
+ serializedVersion: 2
+ useMultithreading: 0
+ useConsistencySorting: 0
+ m_InterpolationPosesPerJob: 100
+ m_NewContactsPerJob: 30
+ m_CollideContactsPerJob: 100
+ m_ClearFlagsPerJob: 200
+ m_ClearBodyForcesPerJob: 200
+ m_SyncDiscreteFixturesPerJob: 50
+ m_SyncContinuousFixturesPerJob: 50
+ m_FindNearestContactsPerJob: 100
+ m_UpdateTriggerContactsPerJob: 100
+ m_IslandSolverCostThreshold: 100
+ m_IslandSolverBodyCostScale: 1
+ m_IslandSolverContactCostScale: 10
+ m_IslandSolverJointCostScale: 10
+ m_IslandSolverBodiesPerJob: 50
+ m_IslandSolverContactsPerJob: 50
+ m_SimulationMode: 0
+ m_SimulationLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_MaxSubStepCount: 4
+ m_MinSubStepFPS: 30
+ m_UseSubStepping: 0
+ m_UseSubStepContacts: 0
+ m_QueriesHitTriggers: 1
+ m_QueriesStartInColliders: 1
+ m_CallbacksOnDisable: 1
+ m_ReuseCollisionCallbacks: 1
+ m_AutoSyncTransforms: 0
+ m_GizmoOptions: 10
+ m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/PresetManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/PresetManager.asset
new file mode 100644
index 0000000000..67a94daefe
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/PresetManager.asset
@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1386491679 &1
+PresetManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_DefaultPresets: {}
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/ProjectSettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/ProjectSettings.asset
index b12ab6ff29..19c6746a4d 100644
--- a/Examples/CharacterControllerMovingBodies/ProjectSettings/ProjectSettings.asset
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/ProjectSettings.asset
@@ -49,6 +49,7 @@ PlayerSettings:
m_StereoRenderingPath: 0
m_ActiveColorSpace: 0
unsupportedMSAAFallback: 0
+ m_SpriteBatchMaxVertexCount: 65535
m_SpriteBatchVertexThreshold: 300
m_MTRendering: 1
mipStripping: 0
@@ -81,11 +82,11 @@ PlayerSettings:
androidApplicationEntry: 2
defaultIsNativeResolution: 1
macRetinaSupport: 1
- runInBackground: 0
- captureSingleScreen: 0
+ runInBackground: 1
muteOtherAudioSources: 0
Prepare IOS For Recording: 0
Force IOS Speakers When Recording: 0
+ audioSpatialExperience: 0
deferSystemGesturesMode: 0
hideHomeButton: 0
submitAnalytics: 1
@@ -132,6 +133,7 @@ PlayerSettings:
switchNVNMaxPublicSamplerIDCount: 0
switchMaxWorkerMultiple: 8
switchNVNGraphicsFirmwareMemory: 32
+ switchGraphicsJobsSyncAfterKick: 1
vulkanNumSwapchainBuffers: 3
vulkanEnableSetSRGBWrite: 0
vulkanEnablePreTransform: 0
@@ -271,6 +273,9 @@ PlayerSettings:
AndroidBuildApkPerCpuArchitecture: 0
AndroidTVCompatibility: 0
AndroidIsGame: 1
+ androidAppCategory: 3
+ useAndroidAppCategory: 1
+ androidAppCategoryOther:
AndroidEnableTango: 0
androidEnableBanner: 1
androidUseLowAccuracyLocation: 0
@@ -306,6 +311,7 @@ PlayerSettings:
iPhone: 1
tvOS: 1
m_BuildTargetGroupLightmapEncodingQuality: []
+ m_BuildTargetGroupHDRCubemapEncodingQuality: []
m_BuildTargetGroupLightmapSettings: []
m_BuildTargetGroupLoadStoreDebugModeSettings: []
m_BuildTargetNormalMapEncoding: []
@@ -313,6 +319,7 @@ PlayerSettings:
playModeTestRunnerEnabled: 0
runPlayModeTestAsEditModeTest: 0
actionOnDotNetUnhandledException: 1
+ editorGfxJobOverride: 1
enableInternalProfiler: 0
logObjCUncaughtExceptions: 1
enableCrashReportAPI: 0
@@ -568,12 +575,12 @@ PlayerSettings:
webGLMemoryLinearGrowthStep: 16
webGLMemoryGeometricGrowthStep: 0.2
webGLMemoryGeometricGrowthCap: 96
- webGLEnableWebGPU: 0
webGLPowerPreference: 2
webGLWebAssemblyTable: 0
webGLWebAssemblyBigInt: 0
webGLCloseOnQuit: 0
webWasm2023: 0
+ webEnableSubmoduleStrippingCompatibility: 0
scriptingDefineSymbols: {}
additionalCompilerArguments: {}
platformArchitecture: {}
@@ -650,7 +657,9 @@ PlayerSettings:
XboxOneOverrideIdentityName:
XboxOneOverrideIdentityPublisher:
vrEditorSettings: {}
- cloudServicesEnabled: {}
+ cloudServicesEnabled:
+ Purchasing: 0
+ Unity Ads: 0
luminIcon:
m_Name:
m_ModelFolderPath:
@@ -685,3 +694,4 @@ PlayerSettings:
insecureHttpOption: 0
androidVulkanDenyFilterList: []
androidVulkanAllowFilterList: []
+ androidVulkanDeviceFilterListAsset: {fileID: 0}
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/ProjectVersion.txt b/Examples/CharacterControllerMovingBodies/ProjectSettings/ProjectVersion.txt
new file mode 100644
index 0000000000..b5c96e15d6
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/ProjectVersion.txt
@@ -0,0 +1,2 @@
+m_EditorVersion: 6000.2.6f2
+m_EditorVersionWithRevision: 6000.2.6f2 (4a4dcaec6541)
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/QualitySettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/QualitySettings.asset
new file mode 100644
index 0000000000..9b92984d72
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/QualitySettings.asset
@@ -0,0 +1,347 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!47 &1
+QualitySettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 5
+ m_CurrentQuality: 5
+ m_QualitySettings:
+ - serializedVersion: 5
+ name: Very Low
+ pixelLightCount: 0
+ shadows: 0
+ shadowResolution: 0
+ shadowProjection: 1
+ shadowCascades: 1
+ shadowDistance: 15
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 0
+ skinWeights: 1
+ globalTextureMipmapLimit: 1
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 0
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 0
+ realtimeReflectionProbes: 0
+ billboardsFaceCameraPosition: 0
+ useLegacyDetailDistribution: 0
+ adaptiveVsync: 0
+ vSyncCount: 0
+ realtimeGICPUUsage: 25
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 0.3
+ meshLodThreshold: 1
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 4
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 0}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms: []
+ - serializedVersion: 5
+ name: Low
+ pixelLightCount: 0
+ shadows: 0
+ shadowResolution: 0
+ shadowProjection: 1
+ shadowCascades: 1
+ shadowDistance: 20
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 0
+ skinWeights: 2
+ globalTextureMipmapLimit: 0
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 0
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 0
+ realtimeReflectionProbes: 0
+ billboardsFaceCameraPosition: 0
+ useLegacyDetailDistribution: 0
+ adaptiveVsync: 0
+ vSyncCount: 0
+ realtimeGICPUUsage: 25
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 0.4
+ meshLodThreshold: 1
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 16
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 0}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms: []
+ - serializedVersion: 5
+ name: Medium
+ pixelLightCount: 1
+ shadows: 1
+ shadowResolution: 0
+ shadowProjection: 1
+ shadowCascades: 1
+ shadowDistance: 20
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 0
+ skinWeights: 2
+ globalTextureMipmapLimit: 0
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 1
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 0
+ realtimeReflectionProbes: 0
+ billboardsFaceCameraPosition: 0
+ useLegacyDetailDistribution: 0
+ adaptiveVsync: 0
+ vSyncCount: 1
+ realtimeGICPUUsage: 25
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 0.7
+ meshLodThreshold: 1
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 64
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 0}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms: []
+ - serializedVersion: 5
+ name: High
+ pixelLightCount: 2
+ shadows: 2
+ shadowResolution: 1
+ shadowProjection: 1
+ shadowCascades: 2
+ shadowDistance: 40
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 1
+ skinWeights: 2
+ globalTextureMipmapLimit: 0
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 1
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 1
+ realtimeReflectionProbes: 1
+ billboardsFaceCameraPosition: 1
+ useLegacyDetailDistribution: 0
+ adaptiveVsync: 0
+ vSyncCount: 1
+ realtimeGICPUUsage: 50
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 1
+ meshLodThreshold: 1
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 256
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 0}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms: []
+ - serializedVersion: 5
+ name: Very High
+ pixelLightCount: 3
+ shadows: 2
+ shadowResolution: 2
+ shadowProjection: 1
+ shadowCascades: 2
+ shadowDistance: 70
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 1
+ skinWeights: 4
+ globalTextureMipmapLimit: 0
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 2
+ antiAliasing: 2
+ softParticles: 1
+ softVegetation: 1
+ realtimeReflectionProbes: 1
+ billboardsFaceCameraPosition: 1
+ useLegacyDetailDistribution: 0
+ adaptiveVsync: 0
+ vSyncCount: 1
+ realtimeGICPUUsage: 50
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 1.5
+ meshLodThreshold: 1
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 1024
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 0}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms: []
+ - serializedVersion: 5
+ name: Ultra
+ pixelLightCount: 4
+ shadows: 2
+ shadowResolution: 2
+ shadowProjection: 1
+ shadowCascades: 4
+ shadowDistance: 150
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 1
+ skinWeights: 255
+ globalTextureMipmapLimit: 0
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 2
+ antiAliasing: 2
+ softParticles: 1
+ softVegetation: 1
+ realtimeReflectionProbes: 1
+ billboardsFaceCameraPosition: 1
+ useLegacyDetailDistribution: 0
+ adaptiveVsync: 0
+ vSyncCount: 1
+ realtimeGICPUUsage: 100
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 2
+ meshLodThreshold: 1
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 4096
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 0}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms: []
+ m_TextureMipmapLimitGroupNames: []
+ m_PerPlatformDefaultQuality:
+ Android: 2
+ EmbeddedLinux: 5
+ GameCoreScarlett: 5
+ GameCoreXboxOne: 5
+ Kepler: 5
+ LinuxHeadlessSimulation: 5
+ Nintendo Switch: 5
+ PS4: 5
+ PS5: 5
+ QNX: 5
+ ReservedCFE: 5
+ Server: 5
+ Standalone: 5
+ VisionOS: 5
+ WebGL: 3
+ Windows Store Apps: 5
+ XboxOne: 5
+ iPhone: 2
+ tvOS: 2
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/TagManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/TagManager.asset
new file mode 100644
index 0000000000..eb5d9aedd6
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/TagManager.asset
@@ -0,0 +1,45 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!78 &1
+TagManager:
+ serializedVersion: 3
+ tags: []
+ layers:
+ - Default
+ - TransparentFX
+ - Ignore Raycast
+ -
+ - Water
+ - UI
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ m_SortingLayers:
+ - name: Default
+ uniqueID: 0
+ locked: 0
+ m_RenderingLayers:
+ - Default
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/TimeManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/TimeManager.asset
new file mode 100644
index 0000000000..2e23a1f421
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/TimeManager.asset
@@ -0,0 +1,14 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!5 &1
+TimeManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ Fixed Timestep:
+ m_Count: 2822399
+ m_Rate:
+ m_Denominator: 1
+ m_Numerator: 141120000
+ Maximum Allowed Timestep: 0.33333334
+ m_TimeScale: 1
+ Maximum Particle Timestep: 0.03
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/UnityConnectSettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/UnityConnectSettings.asset
new file mode 100644
index 0000000000..d4cafe7fc5
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/UnityConnectSettings.asset
@@ -0,0 +1,40 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!310 &1
+UnityConnectSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 1
+ m_Enabled: 1
+ m_TestMode: 0
+ m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
+ m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
+ m_ConfigUrl: https://config.uca.cloud.unity3d.com
+ m_DashboardUrl: https://dashboard.unity3d.com
+ m_TestInitMode: 0
+ InsightsSettings:
+ m_EngineDiagnosticsEnabled: 0
+ m_Enabled: 0
+ CrashReportingSettings:
+ serializedVersion: 2
+ m_EventUrl: https://perf-events.cloud.unity3d.com
+ m_EnableCloudDiagnosticsReporting: 0
+ m_LogBufferSize: 10
+ m_CaptureEditorExceptions: 1
+ UnityPurchasingSettings:
+ m_Enabled: 0
+ m_TestMode: 0
+ UnityAnalyticsSettings:
+ m_Enabled: 0
+ m_TestMode: 0
+ m_InitializeOnStartup: 1
+ m_PackageRequiringCoreStatsPresent: 1
+ UnityAdsSettings:
+ m_Enabled: 0
+ m_InitializeOnStartup: 1
+ m_TestMode: 0
+ m_IosGameId:
+ m_AndroidGameId:
+ m_GameIds: {}
+ m_GameId:
+ PerformanceReportingSettings:
+ m_Enabled: 0
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/VFXManager.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/VFXManager.asset
new file mode 100644
index 0000000000..56783bbf18
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/VFXManager.asset
@@ -0,0 +1,20 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!937362698 &1
+VFXManager:
+ m_ObjectHideFlags: 0
+ m_IndirectShader: {fileID: 0}
+ m_CopyBufferShader: {fileID: 0}
+ m_PrefixSumShader: {fileID: 0}
+ m_SortShader: {fileID: 0}
+ m_StripUpdateShader: {fileID: 0}
+ m_EmptyShader: {fileID: 0}
+ m_RenderPipeSettingsPath:
+ m_FixedTimeStep: 0.016666668
+ m_MaxDeltaTime: 0.05
+ m_MaxScrubTime: 30
+ m_MaxCapacity: 100000000
+ m_CompiledVersion: 0
+ m_RuntimeVersion: 0
+ m_RuntimeResources: {fileID: 0}
+ m_BatchEmptyLifetime: 300
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/VersionControlSettings.asset b/Examples/CharacterControllerMovingBodies/ProjectSettings/VersionControlSettings.asset
new file mode 100644
index 0000000000..979fd8eca8
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/VersionControlSettings.asset
@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!890905787 &1
+VersionControlSettings:
+ m_ObjectHideFlags: 0
+ m_Mode: Visible Meta Files
+ m_TrackPackagesOutsideProject: 0
diff --git a/Examples/CharacterControllerMovingBodies/ProjectSettings/VirtualProjectsConfig.json b/Examples/CharacterControllerMovingBodies/ProjectSettings/VirtualProjectsConfig.json
new file mode 100644
index 0000000000..4ea16eb5a7
--- /dev/null
+++ b/Examples/CharacterControllerMovingBodies/ProjectSettings/VirtualProjectsConfig.json
@@ -0,0 +1,4 @@
+{
+ "PlayerTags": [],
+ "version": "1.6.1"
+}
\ No newline at end of file