using UnityEngine; using UnityEngine.SceneManagement; namespace VRBeats { // 모든 씬에서 자동 실행. // Game 씬: VRPointerController를 비활성 상태로 추가 → VR_InteractorController가 게임오버 시 활성화. // 나머지 씬: 바로 활성 상태로 추가. public class VRPointerSetup : MonoBehaviour { private static VRPointerSetup instance; [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void ResetStatics() { instance = null; } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void AutoInject() { if (instance != null) return; var go = new GameObject("[VRPointerSetup]"); go.AddComponent(); } private void Awake() { if (instance != null && instance != this) { Destroy(gameObject); return; } instance = this; DontDestroyOnLoad(gameObject); } private void OnEnable() { SceneManager.sceneLoaded += OnSceneLoaded; } private void OnDisable() { SceneManager.sceneLoaded -= OnSceneLoaded; } private void Start() { SetupActiveScene(); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { SetupScene(scene); } private static void SetupActiveScene() { SetupScene(SceneManager.GetActiveScene()); } private static void SetupScene(Scene scene) { bool isGameScene = scene.name == "Game"; SetupControllers(disabledByDefault: isGameScene); } private static void SetupControllers(bool disabledByDefault) { foreach (var go in FindObjectsByType(FindObjectsSortMode.None)) { string name = go.name; bool isRight = name.Contains("Right"); bool isLeft = name.Contains("Left"); if (!isRight && !isLeft) continue; if (!name.Contains("Controller") && !name.Contains("Hand")) continue; if (go.GetComponent() == null) continue; if (go.GetComponent() != null) continue; var pointer = go.AddComponent(); var field = typeof(VRPointerController) .GetField("isRightHand", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); field?.SetValue(pointer, isRight); // Game 씬에서는 게임오버 전까지 비활성 if (disabledByDefault) pointer.enabled = false; Debug.Log($"[VRPointerSetup] {(isRight ? "Right" : "Left")} pointer 추가: {go.name} (enabled={!disabledByDefault})"); } } } }