Replace the connection-approval role selection with a server-authoritative match flow built on NGO additive scene management: - Scenes: Main is the persistent foundation (NetworkManager, GameModeManager, cameras, HUD); Lobby and Test Map load/unload additively. Add Lobby + Test Map to the build settings; remove the obsolete SampleScene. - MatchManager (plain MonoBehaviour singleton): loads Lobby on server start, StartMatchTrigger lets the host start the match, rolls one random Hunter (rest Hider), swaps Lobby -> Test Map (strictly serialized per NGO), respawns each player as its role variant. Forces additive client sync mode so clients keep Main instead of single-loading it (fixes "Destination scene is not valid"). - Server-driven spawning: null out NetworkConfig.PlayerPrefab at runtime to disable auto-spawn, then spawn players after the lobby floor exists (fixes falling through the floor) with double-spawn and transition guards. - StartMatchTrigger: server-gated OnTriggerEnter, only the host's own player starts the match. - NetworkBootstrap: drop role selection / connection approval; everyone spawns as the neutral Player prefab. Host/Client/Server/Shutdown buttons stay. - NetworkPlayerSetup.ScopedModes flag (baked on Hunter/Hider prefabs): lobby avatar gets the full mode set, match variants get the role-scoped set. - GameModeManager.BindLocalPlayer reads ScopedModes and rebinds the painter unconditionally (fixes stale painter binding on respawn -> brush painting in every mode). - MeshPainter.PaintingEnabled defaults to false (unbound/pre-spawn/remote never paints); PaintHud visibility now also gates on a bound painter (fixes the HUD showing at startup before any avatar exists). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
92 lines
3.8 KiB
Plaintext
92 lines
3.8 KiB
Plaintext
%YAML 1.1
|
|
%TAG !u! tag:unity3d.com,2011:
|
|
--- !u!1001 &8795081103086920006
|
|
PrefabInstance:
|
|
m_ObjectHideFlags: 0
|
|
serializedVersion: 2
|
|
m_Modification:
|
|
serializedVersion: 3
|
|
m_TransformParent: {fileID: 0}
|
|
m_Modifications:
|
|
- target: {fileID: 273411532115212066, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: scale
|
|
value: 2.4
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 1035623159758896108, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: sprintSpeedMultiplier
|
|
value: 2
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 1557561356852236266, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: GlobalObjectIdHash
|
|
value: 1884035523
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 5384024074013944205, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_Name
|
|
value: Hunter
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalScale.x
|
|
value: 2.4
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalScale.y
|
|
value: 2.4
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalScale.z
|
|
value: 2.4
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalPosition.x
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalPosition.y
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalPosition.z
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalRotation.w
|
|
value: 1
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalRotation.x
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalRotation.y
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalRotation.z
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalEulerAnglesHint.x
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalEulerAnglesHint.y
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 6997860362608943113, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: m_LocalEulerAnglesHint.z
|
|
value: 0
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 8574096554986372233, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: role
|
|
value: 1
|
|
objectReference: {fileID: 0}
|
|
- target: {fileID: 8574096554986372233, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|
|
propertyPath: scopedModes
|
|
value: 1
|
|
objectReference: {fileID: 0}
|
|
m_RemovedComponents: []
|
|
m_RemovedGameObjects: []
|
|
m_AddedGameObjects: []
|
|
m_AddedComponents: []
|
|
m_SourcePrefab: {fileID: 100100000, guid: 97017ed3bb40aff4e885440d9a7336ee, type: 3}
|