当我在UWP中编写代码时,我发现了一个奇怪的问题。
我使用UDP sockect将坐标发送到hololens。
坐标类似于“1.0_1.0_1.0”,它以字符串形式发送,将根据“_”进行剪切,然后坐标将用于控制球体的移动。
首先,它在统一编辑器中运行良好。
但是在hololens中,我只收到“1.0_1.0_1.0”,但无法将其更改为vector3:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HoloToolkit.Unity;
#if !UNITY_EDITOR
using System;
using Windows.Foundation;
#endif
public class pre : MonoBehaviour
{
public TextMesh tm = null;
public TextMesh tmmm = null;
public GameObject sphere;
string test;
public void ResponseToUDPPacket(string incomingIP, string incomingPort, string data)
{
string[] centre = data.Split('_');
float[] num= new float[3];
if (tm != null)
tm.text = data;
num[0] = float.Parse(centre[0]);
num[1] = float.Parse(centre[1]);
num[2] = float.Parse(centre[2]);
Debug.Log(num[1]);
if (tmmm != null)
tmmm.text = num[1].ToString();
sphere.transform.position = new Vector3(num[0], num[1], num[2]);
//var headPosition = Camera.main.transform.position;
//headPosition.z = headPosition.z+10;
//sphere1.transform.position = headPosition;
}
}
我使用两个testmesh来显示结果,“data”是我收到的字符串,第一个“tm”没有问题。例如,它将显示“1.0_1.0_1.0”。
但是根据num [1]获得的“tmm”永远不会起作用。
我认为这是UWP的问题。
BUT !!!!!!!!!!!!!!!!!!!!!!! 我通过c ++程序发送UDP字符串,但是当我使用软件(UDPsender或类似的东西)手动发送字符串时,hololens中的问题就消失了!
但我不认为我的C ++程序存在问题,因为至少它在Unity编辑器中运行良好。
有没有人知道这个问题?
答案 0 :(得分:0)
也许你的模拟器和你的设备有不同的文化,一个人理解1.0而另一个人期望在float.Parse中有1.0个。
如果是这种情况,您可以将您的文化(或InvariantCulture)传递给float.Parse。
在所有情况下,Debug.Log(num [1])是否打印正确的数字?如果没有,这可以证实上述理论。