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.
UNITY - GUI, die nicht entsprechend den Daten aktualisieren, ein Python -Skript gesendet wird ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post