единство и python связь - PullRequest
0 голосов
/ 21 апреля 2020

этот код отправляет pos игрового объекта

using System.Collections.Generic;
using UnityEngine;
using UnityEngine;
using System.Threading;
using System.Net;
using System.Text;
using System.Net.Sockets;

public class ball : MonoBehaviour
{
    public GameObject zee;
    Thread mThread;
    public string connectionIP = "127.0.0.1";
    public int connectionPort = 12345;
    IPAddress localAdd;
    TcpListener listener;
    TcpClient client;
    bool running;
    string pos = "";
    // Start is called before the first frame update
    void Start()
    {
        ThreadStart ts = new ThreadStart(GetInfo);
        mThread = new Thread(ts);
        mThread.Start();

    }

    // Update is called once per frame
    void Update()
    {
        zee.transform.position = new Vector3(zee.transform.position.x, zee.transform.position.y-0.1f, zee.transform.position.z);
        pos += zee.transform.position.y.ToString(); 
    }
    public static string GetLocalIPAddress()
    {
        var host = Dns.GetHostEntry(Dns.GetHostName());
        foreach (var ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
            {
                return ip.ToString();
            }
        }
        throw new System.Exception("No network adapters with an IPv4 address   in the system!");
    }
    void GetInfo()
    {
        localAdd = IPAddress.Parse(connectionIP);
        listener = new TcpListener(IPAddress.Any, connectionPort);
        listener.Start();

        client = listener.AcceptTcpClient();

        running = true;
        while (running)
        {
            Connection();
        }
        listener.Stop();
    }
    void Connection()
    {
        NetworkStream nwStream = client.GetStream();
        byte[] buffer = new byte[client.ReceiveBufferSize];
        int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
        string dataReceived = Encoding.UTF8.GetString(buffer, 0, bytesRead);

        byte[] dane = System.Text.Encoding.ASCII.GetBytes(pos);
        nwStream.Write(dane, 0, dane.Length);
        if (dataReceived != null)
        {
            if (dataReceived == "stop")
            {
                running = false;
            }
            else
            {
            }
        }
    }
    private void OnDestroy()
    {
        // block main thread, wait for _runnerThread to finish its job first, so we can be sure that 
        // _runnerThread will end before main thread end
        listener.Stop();
    }
}

и этот код получает его в python

import subprocess
import socket
import os
def main():
    print("hello")
    host, port = "127.0.0.1", 25001
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    while True:
      try:
         sock.connect((host, port))
         print("connected")
         break
      except:
         print("Trying To Connect")
    sock.sendall("hello".encode("utf-8"))
    data2 = sock.recv(1024).decode("utf-8")
    data2=data2.strip('() \n').split(',')

    print("pos is "+data2[0])
    sock.close()
main()

проблема в том, что он печатает только первую позицию, пока в единстве я заставляю шар менять свои зелья в функции обновления. Я хочу получать позицию игрового объекта каждый раз, когда он меняет свою позицию. я попытался сделать al oop, чтобы напечатать всю строку data2, которая содержит полученные данные, но его длина только 1. поэтому я не уверен, в чем проблема

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...