Jump to content
Unity Insider Forum

string to float - UDP receive script modifizieren


Noob

Recommended Posts

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...