C# 在Unity中使用OSC配置客户端和服务器
我试图利用Unity的一个名为UnityOSC的库,它允许您接收来自其他应用程序的OSC消息。我有一个通过UDP在以下地址传输数据的应用程序: 主持人:127.0.0.1 港口:33433 我现在需要配置UnityOSC以侦听该数据。该库有一个名为oschHandler.cs的脚本,在init函数中,您可以设置客户端和服务器。我只是不知道如何设置 目前,我正在尝试:C# 在Unity中使用OSC配置客户端和服务器,c#,udp,unity3d,osc,opensoundcontrol,C#,Udp,Unity3d,Osc,Opensoundcontrol,我试图利用Unity的一个名为UnityOSC的库,它允许您接收来自其他应用程序的OSC消息。我有一个通过UDP在以下地址传输数据的应用程序: 主持人:127.0.0.1 港口:33433 我现在需要配置UnityOSC以侦听该数据。该库有一个名为oschHandler.cs的脚本,在init函数中,您可以设置客户端和服务器。我只是不知道如何设置 目前,我正在尝试: public void Init() { CreateClient("FaceClient", IPAdd
public void Init()
{
CreateClient("FaceClient", IPAddress.Parse("127.0.0.1"), 33433);
CreateServer("FaceServer", 6666);
}
我已经将客户机参数与传输数据的应用程序的参数进行了匹配,服务器只是随机的——但老实说,我不确定在这两个参数中放入什么。理论上,如果我正确设置客户端/服务器,我应该能够在更新功能中注册信息,如下所示:
void Update() {
OSCHandler.Instance.UpdateLogs();
//clients = OSCHandler.Instance.Clients;
servers = OSCHandler.Instance.Servers;
foreach(KeyValuePair<string, ServerLog> item in servers)
{
// If we have received at least one packet,
// show the last received from the log in the Debug console
if(item.Value.log.Count > 0)
{
int lastPacketIndex = item.Value.packets.Count - 1;
UnityEngine.Debug.Log(String.Format("SERVER: {0} ADDRESS: {1} VALUE 0: {2}",
item.Key, // Server name
item.Value.packets[lastPacketIndex].Address, // OSC address
item.Value.packets[lastPacketIndex].Data[0].ToString())); //First data value
}
}
}
void Update(){
oschHandler.Instance.UpdateLogs();
//clients=oschHandler.Instance.clients;
servers=oschHandler.Instance.servers;
foreach(服务器中的KeyValuePair项)
{
//如果我们至少收到一个数据包,
//在调试控制台中显示上次从日志接收到的
如果(item.Value.log.Count>0)
{
int lastPacketIndex=item.Value.packets.Count-1;
UnityEngine.Debug.Log(String.Format(“服务器:{0}地址:{1}值0:{2}”),
item.Key,//服务器名称
item.Value.packets[lastPacketIndex].Address,//OSC地址
item.Value.packets[lastPacketIndex].Data[0].ToString());//第一个数据值
}
}
}
但到目前为止,没有任何东西注册到调试器。你知道我做错了什么吗?有两件事,记住我是从命令行而不是在Unity编辑器中做的,所以事情可能会有所不同 首先,OSCPacket.cs中的第50行在命令行版本中引发异常。不确定Unity是否拾取Trace.Assert,但删除该行不会造成任何影响:
Trace.Assert(string.IsNullOrEmpty(_address) == false);
我猜UnityOSC的作者想做一些类似的事情:
Trace.Assert(string.IsNullOrEmpty(value) == false);
否则,我不确定该断言将如何传递,因为OSCMessage是OSCPacket的一个派生类,它直接调用其ctor中的Address属性
其次,如果您试图在本地计算机上测试此功能,您的端口需要匹配:
public void Init()
{
CreateServer("Server", 5555);
CreateClient("Client", IPAddress.Parse("127.0.0.1"), 5555);
}
最后,我的手工创作:
OSCHandler handler = new OSCHandler();
handler.Init();
handler.SendMessageToClient<string>("Client", "127.0.0.1", "TestMessage");
handler.UpdateLogs();
oschHandler=新的oschHandler();
handler.Init();
handler.SendMessageToClient(“客户端”、“127.0.0.1”、“测试消息”);
handler.UpdateLogs();
我不得不稍微修改authors代码,使其在Unity之外工作,但只是稍微修改一下。有两件事,请记住,我是从命令行而不是在Unity编辑器中完成的,所以事情可能会有所不同 首先,OSCPacket.cs中的第50行在命令行版本中引发异常。不确定Unity是否拾取Trace.Assert,但删除该行不会造成任何影响:
Trace.Assert(string.IsNullOrEmpty(_address) == false);
我猜UnityOSC的作者想做一些类似的事情:
Trace.Assert(string.IsNullOrEmpty(value) == false);
否则,我不确定该断言将如何传递,因为OSCMessage是OSCPacket的一个派生类,它直接调用其ctor中的Address属性
其次,如果您试图在本地计算机上测试此功能,您的端口需要匹配:
public void Init()
{
CreateServer("Server", 5555);
CreateClient("Client", IPAddress.Parse("127.0.0.1"), 5555);
}
最后,我的手工创作:
OSCHandler handler = new OSCHandler();
handler.Init();
handler.SendMessageToClient<string>("Client", "127.0.0.1", "TestMessage");
handler.UpdateLogs();
oschHandler=新的oschHandler();
handler.Init();
handler.SendMessageToClient(“客户端”、“127.0.0.1”、“测试消息”);
handler.UpdateLogs();
我不得不稍微修改authors代码,使其在Unity之外工作,但只是稍微修改一下。我采用了另一种方法,使其在基于Unity的环境中工作,这是基于James George的一个名为openTSPS的老项目。您可以在此处下载-它接受所有OSC数据:
我采用了另一种方法,在基于Unity的基础上实现了这一功能,它来自James George的一个名为openTSPS的老项目。您可以在此处下载-它接受所有OSC数据:
您是否有指向正在玩的库的Web链接?您是否有指向正在玩的库的Web链接?