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如果是这样的话,我这里第一句说的,无关紧要。)
在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如果是这样的话,我这里第一句说的,无关紧要。)