Vector3值赋值似乎被忽略了

时间:2017-07-11 15:25:00

标签: java c# android unity3d

使用Unity 5.6.2f1,Android 4.3。 到目前为止搜索了6个小时没有理解,仍然可能是我的参考/价值误解,非常需要帮助。

    float nx = pose.Get<AndroidJavaObject>("tx").Call<float>("floatValue");
    Debug.Log("nx type is " + nx.GetType() + " and value is " + nx);
    float testZ = 3;
    Debug.Log("testZ type is " + testZ.GetType() + " and value is " + testZ);
    Vector3 otherPosition = new Vector3(nx, 2.2f, testZ);
    Debug.Log("otherPosition type is " + otherPosition.GetType() + " and value is " + otherPosition);

相应的日志给出:

I / Unity(18922):nx类型为System.Single,值为0.0325

I / Unity(18922):testZ类型为System.Single,值为3

I / Unity(18922):otherPosition类型是UnityEngine.Vector3,值是(0.0,2.2,3.0)

关于姿势的更多信息:

AndroidJavaObject pose = display.Get<AndroidJavaObject>("pose");

并且

pose.Get<AndroidJavaObject>("tx") 

应该返回一个Java Float对象。

我们已经尝试将nx声明为我脚本的私有浮动成员,但没有任何改变。

我没有任何想法。

1 个答案:

答案 0 :(得分:2)

实际上......一切都很好。

当您致电Debug.Log(vector3Obj)时,会调用Vector3#ToString()。这很正常。

然而 Vector3 的ToString重写将其浮点值舍入到最接近的0.1。这就是造成问题的原因:0.0325是向下舍入到&#34; 0.0&#34;这就是为什么你得到你在调试输出中获得的结果的原因。 vector3对象仍然保持0.0325的值,但该值太小在转换为Vector3#ToString()中的字符串时与0区分开。

试试这个:

Debug.Log("otherPosition type is " + otherPosition.GetType()
  + " and value is " + (otherPosition*10));