feat: add core quiz game logic, scoreboard, team machine, player management, and debug view with supporting assets and scene.

This commit is contained in:
2025-11-20 22:10:38 +00:00
parent 63fcfa85f8
commit 04310e71b5
52 changed files with 12518 additions and 1163 deletions

View File

@@ -43,7 +43,7 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
Data: 4
Data: 5
- Name:
Entry: 7
Data:
@@ -272,6 +272,66 @@ MonoBehaviour:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: scoreboardManager
- Name: $v
Entry: 7
Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: scoreboardManager
- Name: <UserType>k__BackingField
Entry: 7
Data: 17|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: ScoreboardManager, Assembly-CSharp
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 7
Data: 18|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: VRC.Udon.UdonBehaviour, VRC.Udon
- Name:
Entry: 8
Data:
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:

View File

@@ -10,6 +10,7 @@ public class PlayerManager : UdonSharpBehaviour
[UdonSynced] private int[] playerScores = new int[0];
[UdonSynced] private string[] playerTeams = new string[0];
[UdonSynced] public int[] currentPlayerIds = new int[0];
public ScoreboardManager scoreboardManager;
public override void OnPlayerJoined(VRCPlayerApi player)
{
@@ -43,6 +44,7 @@ public class PlayerManager : UdonSharpBehaviour
newCurrentIds[currentPlayerIds.Length] = id;
currentPlayerIds = newCurrentIds;
UpdateScoreboards();
RequestSerialization();
}
@@ -63,6 +65,7 @@ public class PlayerManager : UdonSharpBehaviour
}
currentPlayerIds = newCurrentIds;
UpdateScoreboards();
RequestSerialization();
}
@@ -78,6 +81,7 @@ public class PlayerManager : UdonSharpBehaviour
break;
}
}
UpdateScoreboards();
RequestSerialization();
}
@@ -105,6 +109,7 @@ public class PlayerManager : UdonSharpBehaviour
break;
}
}
UpdateScoreboards();
RequestSerialization();
}
@@ -129,6 +134,7 @@ public class PlayerManager : UdonSharpBehaviour
if (index >= 0)
{
playerTeams[index] = team;
UpdateScoreboards();
RequestSerialization();
}
}
@@ -168,4 +174,17 @@ public class PlayerManager : UdonSharpBehaviour
}
return -1;
}
public override void OnDeserialization()
{
UpdateScoreboards();
}
private void UpdateScoreboards()
{
if (scoreboardManager != null)
{
scoreboardManager.UpdateAllScoreboards();
}
}
}

View File

@@ -0,0 +1,112 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
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: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: ScoreboardManager
m_EditorClassIdentifier:
serializedUdonProgramAsset: {fileID: 11400000, guid: 75e5332ec9febb24981d675f00a8366d, type: 2}
udonAssembly:
assemblyError:
sourceCsScript: {fileID: 11500000, guid: 10e4adff73116c94db61e87f95faf2df, type: 3}
scriptVersion: 2
compiledVersion: 2
behaviourSyncMode: 0
hasInteractEvent: 0
scriptID: -6410926265346213935
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes:
- Name: fieldDefinitions
Entry: 7
Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition,
UdonSharp.Editor]], mscorlib
- Name: comparer
Entry: 7
Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String,
mscorlib]], mscorlib
- Name:
Entry: 8
Data:
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: scoreboards
- Name: $v
Entry: 7
Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: scoreboards
- Name: <UserType>k__BackingField
Entry: 7
Data: 3|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: Scoreboard[], Assembly-CSharp
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 7
Data: 4|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.Component[], UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
- Name:
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: <IsSerialized>k__BackingField
Entry: 5
Data: true
- Name: _fieldAttributes
Entry: 7
Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5c0755a6f8dcdad44be6fcd9caf44379
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,22 @@
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
public class ScoreboardManager : UdonSharpBehaviour
{
public Scoreboard[] scoreboards;
public void UpdateAllScoreboards()
{
if (scoreboards == null) return;
foreach (Scoreboard board in scoreboards)
{
if (board != null)
{
board.UpdateScoreboard();
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 10e4adff73116c94db61e87f95faf2df
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: