The game now starts from Bootstrap.unity, which additively loads Systems (the dialogue runner, skills, UI layer, camera rig and the player) and then a level (geometry, light, navmesh, reveal cameras). The level becomes the active scene so new objects and lighting land there. The player moved into Systems. It had been parented under Room_101 — under level geometry — and it is persistent content, not level content. Moving it also removes most of the cross-scene breakage on its own. Unity nulls any serialized reference that crosses a scene boundary. Measured rather than guessed: the pre-split scene was pulled from git and its null references diffed against the split result. Exactly seven were lost — both NPCs' dialogueRunner, dialogueUI and player, plus the reveal camera's tracking target. A first naive audit reported 210, which turned out to be pre-existing Unity defaults like Image.m_Material; the baseline diff is what separated the two. Each of the seven now resolves at runtime. SceneServices.Resolve fills in a null Inspector reference by searching the loaded scenes, keeping an assigned value if there is one; CinemachineFollowsPlayer binds the reveal camera once the player exists. Both follow the pattern already used by CameraFramingVolume and by NPCStandIn's player lookup, rather than introducing a new one. Assets/Tests/PlayMode is new, and it immediately paid for itself. BootstrapTests loads Bootstrap and asserts the whole game comes up; on its first run it caught a real bug the split had introduced. The player's NavMeshAgent lives in Systems while the NavMesh is baked into the level, so during load the agent exists off-mesh and ResetPath logs an error. ClickToMoveController now guards on agent.isOnNavMesh rather than a bare null check. No EditMode test could have seen that, because none of it has run yet. Two of those checks reach their types by name through reflection: NPCStandIn and the Cinematics namespace live in Assembly-CSharp, and an asmdef test assembly cannot reference the predefined assemblies. Per-area asmdefs remove the need. Build settings list all three scenes with Bootstrap at index 0, which LoadSceneAsync by name requires. EditMode 42/42, PlayMode 5/5, YarnCheck 9 files / 35 nodes. Co-Authored-By: Claude Opus 5 <[email protected]>
173 lines
4.8 KiB
Plaintext
173 lines
4.8 KiB
Plaintext
%YAML 1.1
|
|
%TAG !u! tag:unity3d.com,2011:
|
|
--- !u!29 &1
|
|
OcclusionCullingSettings:
|
|
m_ObjectHideFlags: 0
|
|
serializedVersion: 2
|
|
m_OcclusionBakeSettings:
|
|
smallestOccluder: 5
|
|
smallestHole: 0.25
|
|
backfaceThreshold: 100
|
|
m_SceneGUID: 00000000000000000000000000000000
|
|
m_OcclusionCullingData: {fileID: 0}
|
|
--- !u!104 &2
|
|
RenderSettings:
|
|
m_ObjectHideFlags: 0
|
|
serializedVersion: 10
|
|
m_Fog: 0
|
|
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
|
m_FogMode: 3
|
|
m_FogDensity: 0.01
|
|
m_LinearFogStart: 0
|
|
m_LinearFogEnd: 300
|
|
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
|
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
|
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
|
m_AmbientIntensity: 1
|
|
m_AmbientMode: 0
|
|
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
|
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
|
|
m_HaloStrength: 0.5
|
|
m_FlareStrength: 1
|
|
m_FlareFadeSpeed: 3
|
|
m_HaloTexture: {fileID: 0}
|
|
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
|
m_DefaultReflectionMode: 0
|
|
m_DefaultReflectionResolution: 128
|
|
m_ReflectionBounces: 1
|
|
m_ReflectionIntensity: 1
|
|
m_CustomReflection: {fileID: 0}
|
|
m_Sun: {fileID: 0}
|
|
m_UseRadianceAmbientProbe: 0
|
|
--- !u!157 &3
|
|
LightmapSettings:
|
|
m_ObjectHideFlags: 0
|
|
serializedVersion: 13
|
|
m_BakeOnSceneLoad: 0
|
|
m_GISettings:
|
|
serializedVersion: 2
|
|
m_BounceScale: 1
|
|
m_IndirectOutputScale: 1
|
|
m_AlbedoBoost: 1
|
|
m_EnvironmentLightingMode: 0
|
|
m_EnableBakedLightmaps: 1
|
|
m_EnableRealtimeLightmaps: 0
|
|
m_LightmapEditorSettings:
|
|
serializedVersion: 12
|
|
m_Resolution: 2
|
|
m_BakeResolution: 40
|
|
m_AtlasSize: 1024
|
|
m_AO: 0
|
|
m_AOMaxDistance: 1
|
|
m_CompAOExponent: 1
|
|
m_CompAOExponentDirect: 0
|
|
m_ExtractAmbientOcclusion: 0
|
|
m_Padding: 2
|
|
m_LightmapParameters: {fileID: 0}
|
|
m_LightmapsBakeMode: 1
|
|
m_TextureCompression: 1
|
|
m_ReflectionCompression: 2
|
|
m_MixedBakeMode: 2
|
|
m_BakeBackend: 2
|
|
m_PVRSampling: 1
|
|
m_PVRDirectSampleCount: 32
|
|
m_PVRSampleCount: 512
|
|
m_PVRBounces: 2
|
|
m_PVREnvironmentSampleCount: 256
|
|
m_PVREnvironmentReferencePointCount: 2048
|
|
m_PVRFilteringMode: 1
|
|
m_PVRDenoiserTypeDirect: 1
|
|
m_PVRDenoiserTypeIndirect: 1
|
|
m_PVRDenoiserTypeAO: 1
|
|
m_PVRFilterTypeDirect: 0
|
|
m_PVRFilterTypeIndirect: 0
|
|
m_PVRFilterTypeAO: 0
|
|
m_PVREnvironmentMIS: 1
|
|
m_PVRCulling: 1
|
|
m_PVRFilteringGaussRadiusDirect: 1
|
|
m_PVRFilteringGaussRadiusIndirect: 1
|
|
m_PVRFilteringGaussRadiusAO: 1
|
|
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
|
|
m_PVRFilteringAtrousPositionSigmaIndirect: 2
|
|
m_PVRFilteringAtrousPositionSigmaAO: 1
|
|
m_ExportTrainingData: 0
|
|
m_TrainingDataDestination: TrainingData
|
|
m_LightProbeSampleCountMultiplier: 4
|
|
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
|
|
m_LightingSettings: {fileID: 0}
|
|
--- !u!196 &4
|
|
NavMeshSettings:
|
|
serializedVersion: 2
|
|
m_ObjectHideFlags: 0
|
|
m_BuildSettings:
|
|
serializedVersion: 3
|
|
agentTypeID: 0
|
|
agentRadius: 0.5
|
|
agentHeight: 2
|
|
agentSlope: 45
|
|
agentClimb: 0.4
|
|
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_NavMeshData: {fileID: 0}
|
|
--- !u!1 &1325409732
|
|
GameObject:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
serializedVersion: 6
|
|
m_Component:
|
|
- component: {fileID: 1325409734}
|
|
- component: {fileID: 1325409733}
|
|
m_Layer: 0
|
|
m_Name: Bootstrap
|
|
m_TagString: Untagged
|
|
m_Icon: {fileID: 0}
|
|
m_NavMeshLayer: 0
|
|
m_StaticEditorFlags: 0
|
|
m_IsActive: 1
|
|
--- !u!114 &1325409733
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_GameObject: {fileID: 1325409732}
|
|
m_Enabled: 1
|
|
m_EditorHideFlags: 0
|
|
m_Script: {fileID: 11500000, guid: 612d8b8b7afa48d68f187e4d51bae0cd, type: 3}
|
|
m_Name:
|
|
m_EditorClassIdentifier: Assembly-CSharp::NightclubArcadia.Core.GameBootstrap
|
|
systemsScene: Systems
|
|
startLevel: SC101_ConferenceHall
|
|
--- !u!4 &1325409734
|
|
Transform:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_GameObject: {fileID: 1325409732}
|
|
serializedVersion: 2
|
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
m_ConstrainProportionsScale: 0
|
|
m_Children: []
|
|
m_Father: {fileID: 0}
|
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
--- !u!1660057539 &9223372036854775807
|
|
SceneRoots:
|
|
m_ObjectHideFlags: 0
|
|
m_Roots:
|
|
- {fileID: 1325409734}
|