Noob Geschrieben 15. Juni 2016 Melden Share Geschrieben 15. Juni 2016 Hallo zusammen, ich habe ein script zum udp Empfang in unity gefunden. Das script funktioniert auch gut. Allerdings möchte ich keine strings sondern floats (Kommazahlen) empfangen. Zum Hintergrand: Werte werden mit Matlab gesammelt, aufbetreitet und an UDP geschickt. In Unity möchte ich diese Werte auslesen und an ein script übertragen. Das script: /* ----------------------- UDP-Receive (send to) ----------------------- // [url]http://msdn.microsoft.com/de-de/library/bb979228.aspx#ID0E3BAC[/url] // > receive // 127.0.0.1 : 8051 // send // nc -u 127.0.0.1 8051 */ using UnityEngine; using System.Collections; using System; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; public class UDPReceive : MonoBehaviour { // receiving Thread Thread receiveThread; // udpclient object UdpClient client; // public // public string IP = "127.0.0.1"; default local public int port; // define > init // infos public string lastReceivedUDPPacket=""; public string allReceivedUDPPackets=""; // clean up this from time to time! // start from shell private static void Main() { UDPReceive receiveObj=new UDPReceive(); receiveObj.init(); string text=""; do { text = Console.ReadLine(); } while(!text.Equals("exit")); } // start from unity3d public void Start() { init(); } // OnGUI void OnGUI() { Rect rectObj=new Rect(40,10,200,400); GUIStyle style = new GUIStyle(); style.alignment = TextAnchor.UpperLeft; GUI.Box(rectObj,"# UDPReceive\n127.0.0.1 "+port+" #\n" + "shell> nc -u 127.0.0.1 : "+port+" \n" + "\nLast Packet: \n"+ lastReceivedUDPPacket + "\n\nAll Messages: \n"+allReceivedUDPPackets ,style); } // init private void init() { // Endpunkt definieren, von dem die Nachrichten gesendet werden. print("UDPSend.init()"); // define port port = 8051; // status print("Sending to 127.0.0.1 : "+port); print("Test-Sending to this Port: nc -u 127.0.0.1 "+port+""); // ---------------------------- // Abhören // ---------------------------- // Lokalen Endpunkt definieren (wo Nachrichten empfangen werden). // Einen neuen Thread für den Empfang eingehender Nachrichten erstellen. receiveThread = new Thread( new ThreadStart(ReceiveData)); receiveThread.IsBackground = true; receiveThread.Start(); } // receive thread private void ReceiveData() { client = new UdpClient(port); while (true) { try { // Bytes empfangen. IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0); byte[] data = client.Receive(ref anyIP); // Bytes mit der UTF8-Kodierung in das Textformat kodieren. string text = Encoding.UTF8.GetString(data); // Den abgerufenen Text anzeigen. print(">> " + text); // latest UDPpacket lastReceivedUDPPacket=text; // .... allReceivedUDPPackets=allReceivedUDPPackets+text; } catch (Exception err) { print(err.ToString()); } } } // getLatestUDPPacket // cleans up the rest public string getLatestUDPPacket() { allReceivedUDPPackets=""; return lastReceivedUDPPacket; } } Könnte mir bitte jemand helfen? Ich habe schon alles probiert was ich so kann (was leider nicht so viel ist). Vielen Dank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mark Geschrieben 16. Juni 2016 Melden Share Geschrieben 16. Juni 2016 Du kannst float und andfere Primitive Typen recht einfach in ein byte Array umwandeln, das ist vermutlich auch das was du suchst: Dies geht so: var myValue = 3.141f; var bytes = BitConverter.GetBytes(myValue); Das byte[] wieder zurückwandeln geht so: var myValue = BitConverter.ToSingle(bytes, 0); // die 0 ist der offset innerhalb der bytes an dem die float daten kommen 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.