我想将数据分配给对象

时间:2016-06-06 06:49:19

标签: c# regex parsing unity3d split

enter image description here 我通过使用UDP实时(60hz)接收X,Y,Z位置和X,Y,Z旋转的数据 我使用了la1n的代码。(http://forum.unity3d.com/threads/simple-udp-implementation-send-read-via-mono-c.15900/) 我使用la1n的代码自己编写代码。但我有一些麻烦。 首先,我认为我使用数组完成字符串拆分和解析。 分裂和解析有什么问题吗? 我有一个关于将数据(x,y,z pos和x,y,z rot)与Object(box)匹配的问题。

我附上了我的代码(c#和lua脚本)

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
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;

    // port
    public int port = 8051; // define > init

    // infos
    public string lastReceivedUDPPacket = "";


    // 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();
    }

    void SetTransform(float XPos, float YPos, float ZPos)
    {
        transform.position = new Vector3(XPos, YPos, ZPos);
    }

    void SetRotation(float XRot, float YRot, float ZRot)
    {
        transform.eulerAngles = new Vector3(XRot, YRot, ZRot);
    }


    void Update()
    {
        SetTransform();
        SetRotation();

    }

    // OnGUI
    void OnGUI()
    {
        Rect rectObj = new Rect(40, 10, 200, 400);
        GUIStyle style = new GUIStyle();
        style.alignment = TextAnchor.UpperLeft;
        GUI.Box(rectObj, "\nLast Packet: \n" + lastReceivedUDPPacket, 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();

    }
    // Unity Application Quit Function
    void OnApplicationQuit()
    {
        stopThread();
    }

    // Stop reading UDP messages
    private void stopThread()
    {
        if (receiveThread.IsAlive)
        {
            receiveThread.Abort();
        }
        client.Close();
    }


    // 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);

                // Data Received from simulation
                print("Received Data >> " + text);

                // latest UDPpacket
                lastReceivedUDPPacket = text;

            }
            catch (Exception err)
            {
                print(err.ToString());
            }
        }
    }


    private void parseDataToCrane ( string text )
    {
        try
        {
            float[] floatData = Array.ConvertAll(text.Split(';'), float.Parse);
            float XPos = floatData[0];
            float YPos = floatData[1];
            float ZPos = floatData[2];
            float XRot = floatData[3];
            float YRot = floatData[4];
            float ZRot = floatData[5];            
        }
        catch (Exception err)
        {
            print(err.ToString());            
        }
    }
}

此代码是模拟代码,由Lua Script编写。

  socket = require("socket")
  print(socket._VERSION)

  function dataListener:post( t )

    local XPos = ship.rb:getPosition():x()
    local YPos = ship.rb:getPosition():y()
    local ZPos = ship.rb:getPosition():z()
    local XXPos = math.floor( XPos * 1000 + 0.5 ) / 1000
    local YYPos = math.floor( YPos * 1000 + 0.5 ) / 1000
    local ZZPos = math.floor( ZPos * 1000 + 0.5 ) / 1000

    local XRot = ship.rb:getRotation():x()
    local YRot = ship.rb:getRotation():y()
    local ZRot = ship.rb:getRotation():z()
    local XXRot = math.floor( XPos * 1000 + 0.5 ) / 1000
    local YYRot = math.floor( YPos * 1000 + 0.5 ) / 1000
    local ZZRot = math.floor( ZPos * 1000 + 0.5 ) / 1000

    udp=socket.udp();
    udp:setpeername("127.0.0.1",8051)
    udp:send(string.format("%f; %f; %f; %f; %f; %f", XXPos, YYPos, ZZPos, XXRot, YYRot, ZZRot));
  end

我已经工作了3个小时。但每当我调试时,错误就会发生而且它不起作用......

0 个答案:

没有答案