UNITY - GUI, die nicht entsprechend den Daten aktualisieren, ein Python -Skript gesendet wirdPython

Python-Programme
Guest
 UNITY - GUI, die nicht entsprechend den Daten aktualisieren, ein Python -Skript gesendet wird

Post by Guest »

Ich versuche, einen Tachometer in Einheit zu erstellen, bei dem die RPM -Daten von einem Python -Skript gesendet werden. Ich habe Sockets verwendet, um die Daten an meine Unity -App zu senden, anstatt die Anfrage zu beantragen, da aus irgendeinem Grund ein "ungültiger Host - 404" Fehler erhalte. Die Daten werden von Einheit empfangen, aber die GUI aktualisiert nicht. Ich habe das Bild im Inspektor deklariert, aber es hat immer noch nicht aktualisiert. < /P>
using UnityEngine;
using UnityEngine.UI;
using System.Net;
using System.Text;
using System.Threading;
using System.Net.Sockets;

public class Speedometer : MonoBehaviour
{
Thread thread;
public int connectionPort = 25001;
TcpListener server;
TcpClient client;
bool running;

public Image SpeedoMeter_Needle;
float currentSpeed = 0.0f;
volatile float targetSpeed = 0;
float needleSpeed = 100.0f;

void Start()
{
if (SpeedoMeter_Needle == null)
{
Debug.LogError("Speedometer Needle Image is not assigned!");
return;
}

thread = new Thread(GetData);
thread.Start();
}

void GetData()
{
server = new TcpListener(IPAddress.Any, connectionPort);
server.Start();
running = true;

while (running)
{
client = server.AcceptTcpClient();
NetworkStream nwStream = client.GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];

while (client.Connected)
{
int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
if (bytesRead > 0)
{
string dataReceived = Encoding.UTF8.GetString(buffer, 0, bytesRead);
float parsedValue = ParseData(dataReceived);

UnityMainThreadDispatcher.Instance().Enqueue(() => targetSpeed = parsedValue);

nwStream.Write(buffer, 0, bytesRead);
}
}

client.Close();
}
server.Stop();
}

private static float ParseData(string dataString)
{
Debug.Log(dataString);
if (dataString.StartsWith("(") && dataString.EndsWith(")"))
{
dataString = dataString.Substring(1, dataString.Length - 2);
}
return float.Parse(dataString);
}

void Update()
{
if (targetSpeed != currentSpeed)
{
UpdateSpeed();
}
}

void UpdateSpeed()
{
if (targetSpeed > currentSpeed)
{
currentSpeed += Time.deltaTime * needleSpeed;
currentSpeed = Mathf.Clamp(currentSpeed, 0.0f, targetSpeed);
}
else if (targetSpeed < currentSpeed)
{
currentSpeed -= Time.deltaTime * needleSpeed;
currentSpeed = Mathf.Clamp(currentSpeed, targetSpeed, 200.0f);
}
SetNeedle();
}

void SetNeedle()
{
float rotationAngle = (currentSpeed / 200.0f * 240.0f - 120.0f) * -1.0f;
SpeedoMeter_Needle.rectTransform.localRotation = Quaternion.Euler(0, 0, rotationAngle);
}

}

< /code>
import socket
import keyboard
import time

host, port = "127.0.0.1", 25001

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

def key_test():
rpm_init = 0.0
try:
while True:
if keyboard.is_pressed('q'):
rpm_init += 0.1
rpm_init = min(rpm_init, 140) # Cap at 140

else:
rpm_init -= 0.005
rpm_init = max(rpm_init, 0) # Prevent going below 0

message = str(rpm_init).encode("utf-8")
sock.sendall(message)
response = sock.recv(1024).decode("utf-8")
print(response)

time.sleep(0.05)
except KeyboardInterrupt:
print("Closing connection.")
sock.close()

key_test()

< /code>
I want it to update my GUI according to the data sent from the python script. Any help is appreciated.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post