- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好,
帖子简介:我需要帮助将下面的脚本转换为通过 UDP 作为双 float 而不是 UTF8 发送数据,发送的数据是通过命令“transform.position.x”获取的' 在 Unity 3D 中 :) 如果您想了解更多信息,请继续阅读。
我的大学硕士项目是开发赛车模拟器,我通过 UDP 将车辆位置和旋转数据从模拟软件发送到视觉对象,然后在视觉对象中分配传入的数据流,从而完成了所有工作的基础知识到 3D 车辆模型的每个位置或旋转矢量。现在,作为某些系统分析的一部分,我正在尝试测量由通信或以低得多的频率运行的视觉包对仿真软件造成的任何滞后或延迟。
为了衡量这一点,我想像平常一样在视觉环境中控制一个对象,但随后有另一个单独的脚本获取对象的坐标并将它们直接发送回另一个端口上的模拟软件,这就是我正在使用的脚本麻烦的是数据需要作为双 float 发送回。
发送和接收 UDP 脚本最初来自论坛: https://community.unity.com/t5/Multiplayer-Networking/simple-udp-implementation-send-read-via-mono-c/td-p/154952我尝试修改的 UDP 发送脚本也如下所示
目前,在这两个中,只有接收脚本被使用,当我遇到它时,它已经被修改为接收双 float ,我正在尝试做的是修改发送脚本以发送也是双 float ,它们最初都是为发送和接收 UTF8 编码文本而编写的。
此外,视觉包是 Unity 3D,命令“transform.position.x”是获取对象坐标的命令,因此这将是发送的内容,然后我将添加其他位置和旋转一旦我理解了这个方法,就可以使用向量。
另外,我可能应该提一下,我在编码方面的经验很少,因为这不是我项目的主要部分,但我真的很感激能得到一些帮助,因为我对这个微小的部分一无所知,现在已经用完了时间。
提前致谢!
using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
public class UDPSend : MonoBehaviour {
private static int localPort;
// prefs
private string IP; // define in init
public int port; // define in init
// "connection" things
IPEndPoint remoteEndPoint;
UdpClient client;
// gui
string strMessage="";
// call it from shell (as program)
private static void Main()
{
UDPSend sendObj=new UDPSend();
sendObj.init();
// testing via console
// sendObj.inputFromConsole();
// as server sending endless
sendObj.sendEndless(" endless infos \n");
}
// start from unity3d
public void Start()
{
init();
}
// OnGUI
void OnGUI()
{
Rect rectObj=new Rect(40,380,200,400);
GUIStyle style = new GUIStyle();
style.alignment = TextAnchor.UpperLeft;
GUI.Box(rectObj,"# UDPSend-Data\n127.0.0.1 "+port+" #\n"
+ "shell> nc -lu 127.0.0.1 "+port+" \n"
,style);
// ------------------------
// send it
// ------------------------
strMessage=GUI.TextField(new Rect(40,420,140,20),strMessage);
if (GUI.Button(new Rect(190,420,40,20),"send"))
{
sendString(strMessage+"\n");
}
}
// init
public void init()
{
// Define end point , from which the messages are sent.
print("UDPSend.init()");
// define
IP="127.0.0.1";
port=16;
// ----------------------------
// Send
// ----------------------------
remoteEndPoint = new IPEndPoint(IPAddress.Parse(IP), port);
client = new UdpClient();
// status
print("Sending to "+IP+" : "+port);
print("Testing: nc -lu "+IP+" : "+port);
}
// inputFromConsole
private void inputFromConsole()
{
try
{
string text;
do
{
text = Console.ReadLine();
// Send the text to the remote client .
if (text != "")
{
// encode data with the UTF8 encoding to binary .
byte[] data = Encoding.UTF8.GetBytes(text);
// Send the text to the remote client .
client.Send(data, data.Length, remoteEndPoint);
}
} while (text != "");
}
catch (Exception err)
{
print(err.ToString());
}
}
// sendData
private void sendString(string message)
{
try
{
//if (message != "")
//{
// encode data with the UTF8 encoding to binary .
byte[] data = Encoding.UTF8.GetBytes(message);
// Send the message to the remote client .
client.Send(data, data.Length, remoteEndPoint);
//}
}
catch (Exception err)
{
print(err.ToString());
}
}
// endless test
private void sendEndless(string testStr)
{
do
{
sendString(testStr);
}
while(true);
}
}
最佳答案
感谢您如此迅速地给出答案,但是我认为这不适用于我的情况,因为模拟软件是基于 Modelica 的,而且据我所知,它不适用于 UTF8 编码,这就是为什么我正在寻求改变它。
然而,在发布这个之后我有了一个想法并使用 Youtube 和其他论坛我能够编写一个脚本将双 float 转换为整数值并将它们乘以 1e6 然后将它们作为整数发送和接收并除以再次在模拟软件中将它们返回为小数。
...然后发现我可以使用该方法直接将其作为 double 发送。
如果它对任何人都有用,我会在这里发布脚本:
using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
public class LatencyTest : MonoBehaviour {
// Use this for initialization
public void Update () {
// Get coordinates
double x = transform.position.x;
// Create byte array for sending
byte[] coordinates = BitConverter.GetBytes(x);
// Define IP Address and Port
string IP = "127.0.0.1";
int port= 16;
Socket client;
IPEndPoint Dymola;
//Send to IP Address on the port specified above
Dymola = new IPEndPoint(IPAddress.Parse (IP), port);
client = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
client.SendTo (coordinates, Dymola);
//print (coordinates);
}
}
关于c# - 通过 UDP C# 将数据作为双 float 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235795/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!