我正在Unity中通过UDP连接接收字节数据,我想在Unity中将字节数据渲染为rawImage。如果我尝试从本地磁盘加载图像,我可以渲染图像。
在下面的代码中,如果我在从本地磁盘阅读数据的地方运行未注解的代码,我就能够渲染图像。
如果我使用Udp客户端运行代码,我无法呈现图像。我已经检查了通过将其转换为字符串接收到的字节数据,我能够看到数据。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System.Text;
using System.Net;
using System.Net.Sockets;
public class Image : MonoBehaviour
{
// Start is called before the first frame update
public RawImage image;
UdpClient client;
private RenderTexture renderTexture;
float interval = 0.05f;
float nextTime = 0;
private int count;
void Start()
{
count = 0;
client = new UdpClient(8000);
}
//Update is called once per frame
void Update()
{
//if (Time.time >= nextTime)
//{
// Texture2D texture = new Texture2D(2, 2);
// string path = "C:/Users/Desktop/frames20/frame_" + count.ToString() + ".jpg";
// byte[] imageData = File.ReadAllBytes(path);
// texture.LoadImage(imageData);
// image.texture = texture;
// Debug.Log(path);
// //Destroy(texture);
// nextTime += interval;
// count += 1;
//}
if (client.Available > 0)
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = client.Receive(ref endPoint);
string text = Encoding.UTF8.GetString(data);
Debug.Log(text);
if (data != null)
{
Texture2D texture = new Texture2D(2, 2);
texture.LoadImage(data);
image.texture = texture;
}
}
}
}
1条答案
按热度按时间lmvvr0a81#
检查您要显示的数据的长度。可能不是整个图像,而只是每帧中完整数据的不同部分。您可以通过将
Debug.Log
添加到if(data != null)
部分来轻松检查。还有,UDP似乎不是发送这类数据的一个很好的选择。为什么要使用它?