PoseProvider.cs 和 Tango:MonoDevelop 错误

PoseProvider.cs and Tango: MonoDevelop error

TangoSDK/Core/Scripts/TangoWrappers/PoseProvider.cs中,有两个变量在Unity:adjustedTimeStamp2和targetToDevice中按MonoDevelop上的Play时有问题。 MonoDevelop 抱怨 "Use of unassigned local variable",可能是因为它只检查 if.

的第一部分

我将第 104 行和第 105 行替换为:

if (!GetFrameToDeviceTransformation(framePair.baseFrame,timeStamp, out adjustedTimeStamp1, out baseToDevice)
|| !GetFrameToDeviceTransformation(framePair.targetFrame, timeStamp, out adjustedTimeStamp2, out targetToDevice))

等效代码:

        bool a = !GetFrameToDeviceTransformation(framePair.baseFrame, timeStamp, out adjustedTimeStamp1, out baseToDevice);
        bool b = !GetFrameToDeviceTransformation(framePair.targetFrame, timeStamp, out adjustedTimeStamp2, out targetToDevice);
        if (a||b)
        {
            pairIsValid = false;
        }

现在 monodevelop 不再抱怨了。

我想知道是不是只有我一个人,或者我应该在编辑器上激活一些东西让它理解它。

你提到这个问题很有趣,我注意到在 Unity 的 Mono/c#.

版本中涉及 ||! 的语句存在完全相同的问题

关于这个问题,我实际上倾向于说,这只是 Unity 的一个已知问题

作为一种习惯,您可以尝试插入更多或更少的空格/换行符,例如

if (
 ! GetFrameToDeviceTransformation(...)
 ||
 ! GetFrameToDeviceTransformation(...)
 )

你也可以试试这个,比如...

if (
 ( ! GetFrameToDeviceTransformation(...) )
 ||
 ( ! GetFrameToDeviceTransformation(...) )
 )

顺便说一句,我相信您已经意识到这一点:您的替换代码在行为上略有不同。您的代码 运行 这两个调用。原始代码不会 运行 如果第一个是 false .. err .. true (你明白我的意思!)

所以,要肛门,怎么样...

bool finalCondition = false;
bool a = !GetFrameToDeviceTransformation(...);
if (a == true)
 {
 finalCondition = true;
 }
else
 {
 bool b = !GetFrameToDeviceTransformation(...);
 if (b == true)
  {
  finalCondition = true;
  }
 }
if (finalCondition)
 {
 pair whatever...
 }

最后还要注意

我不知道 GetFrameToDeviceTransformation 做了什么,但完全有可能存在某种复杂的硬件赛道状况。所以,可能是在 Google 的办公室,示例代码运行良好,但工程师们搞砸了,事实上它只是随机工作,因为硬件设置;你发现它不起作用。 (TBC如果是这样的话,我这里第一句说的,无关紧要。)