Skip to content

Instantly share code, notes, and snippets.

@germanviscuso
Created April 8, 2025 22:54
Show Gist options
  • Save germanviscuso/d6d93f30427b7d3250cdb8e9870d9836 to your computer and use it in GitHub Desktop.
Save germanviscuso/d6d93f30427b7d3250cdb8e9870d9836 to your computer and use it in GitHub Desktop.
Ejemplo de script que usa CommsManager para anexar a un objeto grabbable (XRGrabInteractable)
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;
namespace CignvsLab
{
public class CommsXRGrabListener : MonoBehaviour
{
private CommsManager commsManager;
private string grabTopic = "xr/grab";
private string releaseTopic = "xr/release";
private UnityEngine.XR.Interaction.Toolkit.Interactables.XRGrabInteractable grabbable;
[System.Obsolete]
void Start()
{
commsManager = FindObjectOfType<CommsManager>();
if (commsManager == null)
{
Debug.LogError("❌ CommsManager not found!");
return;
}
Debug.Log($"βœ… Subscribing to grab and release topics.");
commsManager.SubscribeToChannel(grabTopic, OnGrabFeedback);
commsManager.SubscribeToChannel(releaseTopic, OnReleaseFeedback);
}
void OnEnable()
{
grabbable = GetComponent<UnityEngine.XR.Interaction.Toolkit.Interactables.XRGrabInteractable>();
grabbable.selectEntered.AddListener(OnGrab);
grabbable.selectExited.AddListener(OnRelease);
}
public void OnGrab(SelectEnterEventArgs arg)
{
Debug.Log($"🟒 Sending grab event.");
commsManager.PublishToChannel(grabTopic, new { eventType = "grab", objectName = gameObject.name });
}
public void OnRelease(SelectExitEventArgs arg)
{
Debug.Log($"πŸ”΄ Sending release event.");
commsManager.PublishToChannel(releaseTopic, new { eventType = "release", objectName = gameObject.name });
}
private void OnGrabFeedback(string message) => Debug.Log($"πŸ“© Grab feedback: {message}");
private void OnReleaseFeedback(string message) => Debug.Log($"πŸ“© Release feedback: {message}");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment