Exemple de code — ChambreManager
Code source annoté de ChambreManager.cs — exemple de référence pour les pages compagnons.
ChambreManager.cs
Gestionnaire principal de la chambre personnalisée d’un élève.
Hérite de AbstractSingleton<T> — une seule instance en mémoire, accessible globalement.
using UnityEngine;
using System;
/// <summary>
/// Gère le chargement et l'affichage de la chambre personnalisée d'un élève.
/// </summary>
public class ChambreManager : AbstractSingleton<ChambreManager>
{
[Header("Références scène")]
[SerializeField] private GameObject chambrePrefab;
[SerializeField] private Transform chambreParent;
private string _currentEleveId;
// ── Événements ────────────────────────────────────────────
public static event Action<ChambreData> OnChambreChargee;
public static event Action OnChambreErreur;
// ── API publique ───────────────────────────────────────────
/// <summary>Charge et affiche la chambre de l'élève spécifié.</summary>
public void ChargerChambre(string idEleve)
{
_currentEleveId = idEleve;
PlayFabManager.Instance.GetChambreData(idEleve, OnDataLoaded, OnDataErreur);
}
public void ViderChambre()
{
foreach (Transform child in chambreParent)
Destroy(child.gameObject);
}
// ── Callbacks privés ──────────────────────────────────────
private void OnDataLoaded(ChambreData data)
{
ViderChambre();
var instance = Instantiate(chambrePrefab, chambreParent);
instance.GetComponent<ChambreView>().Initialiser(data);
OnChambreChargee?.Invoke(data);
}
private void OnDataErreur(string message)
{
Debug.LogError($"[ChambreManager] Erreur chargement élève {_currentEleveId} : {message}");
OnChambreErreur?.Invoke();
}
}
ChambreData.cs
ScriptableObject de configuration sérialisé depuis PlayFab.
using System;
using System.Collections.Generic;
[Serializable]
public class ChambreData
{
public string eleveId;
public string themeCouleur; // ex. "bleu", "vert", "orange"
public string[] mobilierActifs; // IDs des objets placés
public int dynablocks; // monnaie accumulée
}
Scène associée
La chambre est rendue dans CompteEleve.unity via un RenderTexture — même pattern que le Robot.