using System; using Fusion; using UnityEngine; public class NetworkVisibilityHandler : NetworkBehaviour { private ApplicationManager _applicationManager; // The networked variable that syncs the state to everyone [Networked, OnChangedRender(nameof(OnVisibilityChanged))] public bool IsVisible { get; set; } // References to what we want to hide private MeshRenderer[] _renderers; private Collider[] _colliders; // private void Awake() // { public override void Spawned() { _applicationManager = FindFirstObjectByType(); if (_applicationManager == null) { Debug.LogError("[DCDC] ApplicationManager component not found."); } // Find all visuals and colliders on this object _renderers = GetComponentsInChildren(); _colliders = GetComponentsInChildren(); IsVisible = false; // Apply the initial state (Hidden) UpdateVisibilityState(); } // public override void FixedUpdateNetwork() // { // // Only the Host can change this variable // if (_applicationManager.IsHost == true) // { // if (OVRInput.GetDown(OVRInput.Button.Two, OVRInput.Controller.RTouch)) // { // IsVisible = true; // This change will automatically sync to clients // } // } // } // This method runs whenever 'IsVisible' changes on the network private void UpdateVisibilityState() { var state = IsVisible; // Toggle Renderers (Visuals) foreach (var r in _renderers) r.enabled = state; // Toggle Colliders (Physics/Grabbing) foreach (var c in _colliders) c.enabled = state; } // Boilerplate to link the OnChanged event private void OnVisibilityChanged() => UpdateVisibilityState(); }