using System.Collections; using System.Collections.Generic; using UnityEngine; using UniOSC; using OSCsharp.Data; namespace ToneTuneToolkit.OSC { /// /// OSC管理器 /// UniOSCManager.Instance.SendOSCMessage("/callback/starttutorial", 1); /// UniOSCManager.Instance.UpdateOutIPAddress("192.168.50.14"); /// public class UniOSCManager : MonoBehaviour { public static UniOSCManager Instance; private UniOSCConnection uniOSCConnection; // ================================================== private void Awake() { Instance = this; uniOSCConnection = GetComponent(); } private void OnApplicationQuit() { uniOSCConnection.DisconnectOSC(); uniOSCConnection.DisconnectOSCOut(); } // ================================================== /// /// 轻量版消息发射器 /// /// /// public void SendOSCMessageLite(string ip, string port, string message) { UpdateOutIPAddress(ip, port); SendOSCMessage(message, 1); return; } /// /// 超轻量版消息发射器 /// 需要确保地址正确 /// /// public void SendOSCMessageLite(string message) { SendOSCMessage(message, 1); return; } /// /// 更新本地地址 /// /// /// public void UpdateInIPAddress(string ip, string port) { if (uniOSCConnection.oscInIPAddress != ip || uniOSCConnection.oscPort != int.Parse(port)) { uniOSCConnection.oscInIPAddress = ip; uniOSCConnection.oscPort = int.Parse(port); uniOSCConnection.ConnectOSC(); } return; } /// /// 更新目标地址 /// /// /// public void UpdateOutIPAddress(string ip, string port) { if (uniOSCConnection.oscOutIPAddress != ip || uniOSCConnection.oscOutPort != int.Parse(port)) { uniOSCConnection.oscOutIPAddress = ip; uniOSCConnection.oscOutPort = int.Parse(port); uniOSCConnection.ConnectOSCOut(); } return; } /// /// 消息发射器 /// /// /// private void SendOSCMessage(string address, object value = null) { // OscMessage oscMessage = new OscMessage(address); OscMessage oscMessage = new OscMessage("/"); oscMessage.Address = address; oscMessage.ClearData(); if (value != null) { oscMessage.Append(value); } else { oscMessage.Append(""); } UniOSCEventArgs uniOSCEvent = new UniOSCEventArgs(uniOSCConnection.oscOutPort, oscMessage) { IPAddress = uniOSCConnection.oscOutIPAddress }; uniOSCEvent.IPAddress = uniOSCConnection.oscOutIPAddress; uniOSCConnection.SendOSCMessage(null, uniOSCEvent); DEBUG_UIManager.Instance.UpdateOSCText(oscMessage.Address); Debug.Log($"[UniOSC Manager] Send {oscMessage.Address} to {uniOSCConnection.oscOutIPAddress}:{uniOSCConnection.oscOutPort}...[OK]"); return; } } }