Backend (ArenaRoom.js):
- Strip race state machine (lobby/countdown/playing/round/qualify). Persistent
"playing" phase, no rounds, no checkpoints. Free-roam multi.
- Spawn lowered to y=1.5 (was 5) + MIN_DIST raised to 5 (was 3) to avoid
ejecting overlapping players at connect.
- Schema kept intact (handshake-safe); deprecated fields default-valued.
- npm run schema:gen wired (anti-drift codegen).
Unity client:
- C# schema generated by schema-codegen into RolldSchema namespace
(Generated/GameState.cs, Generated/Player.cs). NetworkSchema.cs removed —
handshake no longer scans global namespace.
- NetworkManager: typed Room<GameState>, callbacks rebound, seeds players
already in room on join.
- RemotePlayerController:
* Post-spawn 1.5s grace window (BumpReady) — local PlayerController.HandleBump
ignores remotes during grace.
* Solid SphereCollider disabled during grace, re-enabled afterwards — fixes
the kinematic-vs-dynamic eject when a new client spawns inside someone.
* NPCBall prefab material switched from invisible-in-URP Default-Material to
BallShader.shadergraph.
* TrailRenderer added, tinted with player's chosen color.
* Name label distance-scales (1x-8x) so pseudos remain readable far away.
- GameHUD: OnGUI emptied — race UI (rounds, mode, timer, playersAlive) gone.
- GameCanvas.jsx: BUILD_PREFIX/VERSION bumped for cache-bust.
Frontend WebGL build (pretty_build): final build with all the above.
143 lines
3.8 KiB
Plaintext
143 lines
3.8 KiB
Plaintext
%YAML 1.1
|
|
%TAG !u! tag:unity3d.com,2011:
|
|
--- !u!1 &1924030532290729092
|
|
GameObject:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
serializedVersion: 6
|
|
m_Component:
|
|
- component: {fileID: 1899090404946461022}
|
|
- component: {fileID: 5883490258770931827}
|
|
- component: {fileID: 3238571154939426495}
|
|
- component: {fileID: 7413271144341016275}
|
|
- component: {fileID: 4571999804817866886}
|
|
m_Layer: 0
|
|
m_Name: NPCBall
|
|
m_TagString: Untagged
|
|
m_Icon: {fileID: 0}
|
|
m_NavMeshLayer: 0
|
|
m_StaticEditorFlags: 0
|
|
m_IsActive: 1
|
|
--- !u!4 &1899090404946461022
|
|
Transform:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_GameObject: {fileID: 1924030532290729092}
|
|
serializedVersion: 2
|
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
m_LocalPosition: {x: 0, y: 2.6, 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!33 &5883490258770931827
|
|
MeshFilter:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_GameObject: {fileID: 1924030532290729092}
|
|
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
|
--- !u!135 &3238571154939426495
|
|
SphereCollider:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_GameObject: {fileID: 1924030532290729092}
|
|
m_Material: {fileID: 0}
|
|
m_IncludeLayers:
|
|
serializedVersion: 2
|
|
m_Bits: 0
|
|
m_ExcludeLayers:
|
|
serializedVersion: 2
|
|
m_Bits: 0
|
|
m_LayerOverridePriority: 0
|
|
m_IsTrigger: 0
|
|
m_ProvidesContacts: 0
|
|
m_Enabled: 1
|
|
serializedVersion: 3
|
|
m_Radius: 0.5
|
|
m_Center: {x: 0, y: 0, z: 0}
|
|
--- !u!23 &7413271144341016275
|
|
MeshRenderer:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_GameObject: {fileID: 1924030532290729092}
|
|
m_Enabled: 1
|
|
m_CastShadows: 1
|
|
m_ReceiveShadows: 1
|
|
m_DynamicOccludee: 1
|
|
m_StaticShadowCaster: 0
|
|
m_MotionVectors: 1
|
|
m_LightProbeUsage: 1
|
|
m_ReflectionProbeUsage: 1
|
|
m_RayTracingMode: 2
|
|
m_RayTraceProcedural: 0
|
|
m_RayTracingAccelStructBuildFlagsOverride: 0
|
|
m_RayTracingAccelStructBuildFlags: 1
|
|
m_SmallMeshCulling: 1
|
|
m_ForceMeshLod: -1
|
|
m_MeshLodSelectionBias: 0
|
|
m_RenderingLayerMask: 1
|
|
m_RendererPriority: 0
|
|
m_Materials:
|
|
- {fileID: -876546973899608171, guid: 9535ecd79e34e1341bfe13a806935455, type: 3}
|
|
m_StaticBatchInfo:
|
|
firstSubMesh: 0
|
|
subMeshCount: 0
|
|
m_StaticBatchRoot: {fileID: 0}
|
|
m_ProbeAnchor: {fileID: 0}
|
|
m_LightProbeVolumeOverride: {fileID: 0}
|
|
m_ScaleInLightmap: 1
|
|
m_ReceiveGI: 1
|
|
m_PreserveUVs: 1
|
|
m_IgnoreNormalsForChartDetection: 0
|
|
m_ImportantGI: 0
|
|
m_StitchLightmapSeams: 1
|
|
m_SelectedEditorRenderState: 3
|
|
m_MinimumChartSize: 4
|
|
m_AutoUVMaxDistance: 0.5
|
|
m_AutoUVMaxAngle: 89
|
|
m_LightmapParameters: {fileID: 0}
|
|
m_GlobalIlluminationMeshLod: 0
|
|
m_SortingLayerID: 0
|
|
m_SortingLayer: 0
|
|
m_SortingOrder: 0
|
|
m_MaskInteraction: 0
|
|
m_AdditionalVertexStreams: {fileID: 0}
|
|
--- !u!54 &4571999804817866886
|
|
Rigidbody:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {fileID: 0}
|
|
m_PrefabInstance: {fileID: 0}
|
|
m_PrefabAsset: {fileID: 0}
|
|
m_GameObject: {fileID: 1924030532290729092}
|
|
serializedVersion: 5
|
|
m_Mass: 1
|
|
m_LinearDamping: 0
|
|
m_AngularDamping: 0.05
|
|
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
|
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
|
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
m_IncludeLayers:
|
|
serializedVersion: 2
|
|
m_Bits: 0
|
|
m_ExcludeLayers:
|
|
serializedVersion: 2
|
|
m_Bits: 0
|
|
m_ImplicitCom: 1
|
|
m_ImplicitTensor: 1
|
|
m_UseGravity: 1
|
|
m_IsKinematic: 0
|
|
m_Interpolate: 0
|
|
m_Constraints: 0
|
|
m_CollisionDetection: 0
|