python数据实时传给unity工程并绘制出来

python

# 服务器端代码
import socket
import random
import struct
import time# 创建一个服务器Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 监听的地址和端口
host = '127.0.0.1'
port = 12345# 绑定地址和端口
server_socket.bind((host, port))# 开始监听连接
server_socket.listen(1)# 等待客户端连接
client_socket, addr = server_socket.accept()
print('连接来自:', addr)try:# 发送和接收数据while True:data = client_socket.recv(1024).decode('utf-8')if not data:breakprint('接收到数据:', data)# client_socket.sendall('已收到数据'.encode('utf-8'))time.sleep(0.5)distance = random.uniform(0, 1)# distance = 3.1415926print(distance)strs = "Elegance is the only beauty that never fades."dis = "the distance is %.3f meters. " % distance# client_socket.send(dis.encode('utf-8') + b'\n' + strs.encode('utf-8'))bytes_value = struct.pack("d", distance)  # Big-endian formatclient_socket.send(bytes_value)print('已发送数据:', dis)
except ConnectionResetError:print("Unity客户端关闭连接")
finally:# 关闭连接client_socket.close()server_socket.close()

unity3d

RecvData.cs

// Unity 3D客户端代码
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using UnityEngine;public class RecvData : MonoBehaviour
{// 服务器地址和端口private string serverAddress = "127.0.0.1";private int port = 12345;// 与服务器的连接private TcpClient client;private NetworkStream stream;private bool isConnect = false;byte[] receiveBuffer = new byte[1024];public static double dis_value = -1.0f;// Start is called before the first frame updatevoid Start(){// 连接到服务器ConnectToServer();}// Update is called once per framevoid Update(){if(isConnect){SendDataToServer("Hello Server");Debug.Log(ReceiveDataFromServer());            ;}}// 连接到服务器private void ConnectToServer(){try{client = new TcpClient(serverAddress, port);stream = client.GetStream();isConnect = true;Debug.Log("成功连接到服务器");}catch (Exception e){Debug.Log("无法连接到服务器:" + e);}}// 发送数据到服务器public void SendDataToServer(string data){if (stream != null){byte[] byteData = Encoding.UTF8.GetBytes(data);stream.Write(byteData, 0, byteData.Length);Debug.Log("已发送数据到服务器:" + data);}else{Debug.Log("无法发送数据,连接未建立");}}// 从服务器接收数据public string ReceiveDataFromServer(){try{int bytesRead = stream.Read(receiveBuffer, 0, receiveBuffer.Length);//Debug.Log("bytesRead is " + bytesRead);dis_value = BitConverter.ToDouble(receiveBuffer, 0);print("dis_value is " + dis_value);return dis_value.ToString();}catch (Exception e){Debug.Log("接收数据时发生异常:" + e);return null;}}// 关闭连接private void OnApplicationQuit(){if (stream != null){stream.Close();}if (client != null){client.Close();}}
}

需要导入xchart绘图package

ValueChat.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using XCharts.Runtime;public class ValueChat : MonoBehaviour
{public double distance_gap = 0.0f;LineChart gap_chart = null;private float timeBetweenGenerations = 0.01f; // 两次生成之间的时间间隔private bool isShow = false; // 标记当前是否正在生成物体public Text gapValue_text;// Start is called before the first frame updatevoid Start(){SetValue_Show();StartCoroutine("ShowData"); // 调用协程函数}// Update is called once per framevoid Update(){if (RecvData.dis_value != -1.0f){//distance_gap = double.Parse(HelloRequester.gap_value);distance_gap = RecvData.dis_value;string formattedNumber = distance_gap.ToString("0.000");gapValue_text.text = "The gap value is " + formattedNumber + " mm";}//distance_gap = double.Parse(HelloRequester.gap_value);}IEnumerator ShowData(){while (true){if (!isShow){yield return new WaitForSeconds(timeBetweenGenerations); // 等待指定的时间间隔后再进行下一次生成Show_Line(gap_chart);isShow = true; // 设置为正在生成状态}else{yield return null; // 不进行任何操作直到下一次生成isShow = false; // 设置为正在生成状态}}}void SetValue_Show(){var chart = gameObject.GetComponent<LineChart>();if (chart == null){chart = gameObject.AddComponent<LineChart>();chart.Init();}gap_chart = chart;//设置标题:var title = chart.EnsureChartComponent<Title>();title.text = "Gap Value Line";//设置提示框和图例是否显示:var tooltip = chart.EnsureChartComponent<Tooltip>();tooltip.show = true;var legend = chart.EnsureChartComponent<Legend>();legend.show = false;//设置坐标轴:var xAxis = chart.EnsureChartComponent<XAxis>();xAxis.splitNumber = 10;xAxis.boundaryGap = true;xAxis.type = Axis.AxisType.Category;var yAxis = chart.EnsureChartComponent<YAxis>();yAxis.type = Axis.AxisType.Value;//清空默认数据,添加Line类型的Serie用于接收数据:chart.RemoveData();chart.AddSerie<Line>("line");添加10个数据://for (int i = 0,  j = 1 ; i<60 ; i = i + 5, j++)//    {//        chart.AddXAxisData("T " + j);//    //chart.AddData(0, Random.Range(10, 20));//    chart.AddData(0, distance_gap);//    Debug.Log("-----------" + distance_gap);//    }}void Show_Line(LineChart _gap){_gap.AddData(0, distance_gap);}
}

运行

修改图的坐标和平均数显示的小数点后位数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯分享万岳外卖跑腿系统客户端源码uniapp目录结构示意图

系统买的是商业版&#xff0c;使用非常不错有三端uniapp开源代码&#xff0c;自从上次分享uniapp后有些网友让我分享下各个端的uniapp下的各个目录结构说明 我就截图说以下吧&#xff0c;

【Java - 框架 - Lombok】(1) 普通Java项目通过Lombok+Logback完成日志的创建使用 - 快速上手

普通Java项目通过"Lombok""Logback"完成日志的创建使用 - 快速上手&#xff1b; 步骤A 说明 创建"Maven"项目&#xff1b; 图片 步骤B 说明 添加相关依赖项&#xff1b; 图片 代码 <!-- "Lombok"依赖项--> <dependency>&…

c++核心学习--继承2

4.6.7多继承语法 4.6.8菱形继承 利用虚继承解决菱形继承的问题&#xff1a;继承之前加上关键字virtual变为虚继承

经纬恒润RTaW-Pegase:车载网络通信建模与时间特性分析工具

▎RTaW简介 RTaW-Pegase是由法国国家信息与自动化研究所&#xff08;INRIA&#xff09;旗下的RTaW公司开发的产品。它主要用于构建和优化汽车、航空航天以及工业领域的通信网络&#xff0c;包括时间敏感网络&#xff08;TSN&#xff09;、CAN&#xff08;FD&#xff0c;XL&…

math模块篇(六)

文章目录 math.log(x[, base])math.log1p(x)math.log2(x)math.log10(x)math.pow(x, y)math.sqrt(x)math.acos(x)math.asin(x)math.atan(x)math.atan2(y, x)math.cos(x) math.log(x[, base]) math.log(x[, base]) 是 Python 中 math 模块的一个函数&#xff0c;用于计算一个数的…

react-navigation:

我的仓库地址&#xff1a;https://gitee.com/ruanjianbianjing/bj-hybrid react-navigation&#xff1a; 学习文档&#xff1a;https://reactnavigation.org 安装核心包: npm install react-navigation/native 安装react-navigation/native本身依赖的相关包: react-nativ…

开源 | 电动自行车充换电解决方案,从智能硬件到软件系统,全部自主研发

文章目录 一、产品功能部分截图1.手机端&#xff08;小程序、安卓、ios&#xff09;2.PC端 二、小程序体验账号以及PC后台体验账号1.小程序体验账号2.PC后台体验账号关注公众号获取最新资讯 三、产品简介&#xff1f;1. 充电桩云平台&#xff08;含硬件充电桩&#xff09;&…

Codeforces Round 841 (Div. 2) C. Even Subarrays

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

Java学习之方法

目录 方法 方法声明格式&#xff1a; 调用方式&#xff1a; 详细说明 示例 --方法的声明及调用 语句块 练习 方法的重载(overload) 构成条件 示例 --方法重载 递归结构 缺陷 方法 方法(method)&#xff1a;一段用于完成特定功能的代码片段&#xff0c;类似于其他语…

--内部类

目录 1. 成员内部类 2. 静态内部类 3. 局部内部类 4. 匿名内部类 在Java中&#xff0c;内部类是定义在其他类内部的类。内部类有以下几种形式&#xff1a;成员内部类、静态内部类、局部内部类和匿名内部类。 1. 成员内部类 概念 成员内部类是定义在外部类的成员位置上的类。…

Zigbee技术在智能农业领域的应用研究

Zigbee技术在智能农业领域的应用研究 **摘要&#xff1a;**随着现代信息技术的飞速发展&#xff0c;智能农业已成为当今农业发展的新趋势。Zigbee技术作为一种低功耗、低成本的无线通信技术&#xff0c;在智能农业领域具有广泛的应用前景。本文深入分析了Zigbee技术的原理和特…

opencv 十九 python下实现多线程间rtsp直播流的复用

在多线程拉流的任务场景中&#xff0c;有时需要将一个rtsp拉取多次&#xff0c;每重新打开一次rtsp视频流就要多消耗一次带宽&#xff0c;为此基于类的静态对象实现rtsp视频流的复用。 1、实现代码 import threading import cv2,time #接收摄影机串流影像&#xff0c;采用多线…

【嵌入式机器学习开发实战】(七)—— 政安晨:通过ARM-Linux掌握基本技能【环境准备:树莓派】

ARM-Linux是一种针对ARM架构的操作系统&#xff0c;它的设计目标是在低功耗、低成本的硬件平台上运行。ARM-Linux可以运行在多种ARM处理器上&#xff0c;包括树莓派。 树莓派&#xff08;Raspberry Pi&#xff09;是一款基于ARM架构的单板计算机&#xff0c;由英国的树莓派基金…

【系统架构师】-第12章-信息系统架构

信息系统架构(ISA)是指对某一特定内容里的信息进行统筹、规划、设计、安排等一系列有机处理的活动。 为了更好地理解信息系统架构的定义&#xff0c; 特作如下说明: (1)架构是对系统的抽象&#xff0c;它通过描述元素、元素的外部可见属性及元素之间的关系来反映这种抽象。因此…

open_clip仓库成分与模型文件model.py 介绍

起因&#xff1a; 在DA-CLIP的开源库的DA-CLIP.md中自述该项目基于CLIP 和open_clip&#xff0c;在之前的退化类型检测中 我一度以为仓库只是使用了CLIP 的源码&#xff0c; 然而当发现缺少da-clip的模型名称时&#xff0c;我发现DA-CLIP使用的完全是open_clip的代码版本&#…

16.JRE和JDK

程序员在编写代码的时候其实是需要一些环境&#xff0c;例如我们之前写的HelloWorld。我们需要的东西有JVM、核心类库、开发工具。 1、JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a;Java虚拟机&#xff0c;真正运行Java程序的地方。没有虚拟机&#xff0c;代码…

【微服务篇】分布式事务方案以及原理详解

分布式事务是指事务参与者、资源服务器、事务管理器分布在不同的分布式系统的多个节点之上的事务。在微服务架构、大型分布式系统和云计算等环境中&#xff0c;由于系统间调用和资源访问的复杂性&#xff0c;分布式事务变得尤为重要。 应用场景 跨系统交易&#xff1a;当交易…

C语言例4-9:格式字符s的使用例子

代码如下&#xff1a; //格式字符s的使用例子 #include<stdio.h> int main(void) {printf("%s,%5s,%-5s\n","Internet","Internet","Internet");//以三种不同格式&#xff0c;输出字符串printf("%10.5s,%-10.5s,%4.5s\n&q…

JAVA 100道题(22)

22.实现一个生产者-消费者问题&#xff0c;使用Java的线程同步机制。 生产者-消费者问题是一个经典的并发编程问题&#xff0c;其中生产者产生数据&#xff08;或产品&#xff09;&#xff0c;消费者消费这些数据。在Java中&#xff0c;我们可以使用wait()和notify()方法或者Bl…

2024年03月CCF-GESP编程能力等级认证C++编程五级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第1题 唯一分解定理描述的内容是( )? A. 任意整数都可以分解为素数的乘积 B. 每个合数都可以唯一分解为一系列素数的乘积 C. 两个不…