2016-07-03 7 views
2

In TangoSDK/Core/Scripts/TangoWrappers/PoseProvider.cs gibt es zwei Variablen, die Probleme haben, wenn Sie auf MonoDevelop in Unity drücken: adjustedTimeStamp2 und targetToDevice. MonoDevelop beschwert sich über "Verwendung von nicht zugewiesenen lokalen Variablen", wahrscheinlich, weil es nur den ersten Teil davon überprüft, wenn.PoseProvider.cs und Tango: MonoDevelop-Fehler

I ersetzt Linie 104 und 105 aus:

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

mit gleichwertigem Code:

 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; 
     } 

und jetzt monodevelop mehr nicht beschweren.

Ich würde gerne wissen, ob es nur ich war, oder wenn es einige Dinge gibt, die ich auf dem Editor aktiviert haben sollte, um es zu verstehen.

+0

Danke für die Zeiger, sagte der Ingenieur. Ja, ich meinte PoseProvider, und es sieht so aus, als könnte es ein IDE-Problem sein (ich habe nie C# benutzt, aber in Java würden ähnliche Dinge funktionieren), aber da war nichts über Google und ich begann mit einer sauberen Installation von allem war seltsam – lolollo

Antwort

2

Lustig, dass Sie dieses Problem erwähnen, habe ich genau das gleiche Problem mit Aussagen mit || und ! in Unity-Version von Mono/C# bemerkt.

Ich bin eigentlich geneigt, zu dieser Frage zu sagen, es ist nur ein bekanntes Problem mit Unity.

Als cusiotisy können Sie mehr oder weniger Räume/Zeilenumbrüche eingeschleift, sagen

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

Sie dies auch versuchen könnte, sagen wir ...

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

BTW Sie ich bin sicher, dass‘ Beachten Sie Folgendes: Ihr Ersatzcode unterscheidet sich geringfügig im Verhalten. Ihr Code WILL beide Anrufe ausführen. Der ursprüngliche Code wird nicht um den zweiten Anruf ausgeführt werden, wenn der erste falsch ist .. err .. true (Sie bekommen, was ich meine!)

So werden anal, was über ...

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

beachten sie auch, schließlich

ich keine Ahnung, was GetFrameToDeviceTransformation tut, aber es ist durchaus möglich, dass es eine Art von komplexen Hardware-Rennstrecke Zustand geht. Es könnte also sein, dass der Beispielcode in Googles Büro gut funktionierte, aber die Ingenieure fingen an, und tatsächlich funktionierte das aufgrund der Hardware nur zufällig. Du findest es funktioniert nicht. (TBC, wenn dies der Fall ist, was ich hier im ersten Satz sage, ist irrelevant.)

+0

Ich werde versuchen, die Leerzeichen Trick bald, aber wie Sie sagten, mein Code und das Original unterscheiden sich, da meins sicher ist, beide Funktionen aufrufen verhindert, dass Variablen nicht zugewiesen werden. Es ist merkwürdig, dass es tausend Downloads von Tango-Apps gibt, wenn der ursprüngliche Code einheitenunabhängige Probleme hatte. Vielen Dank – lolollo

+0

Es tut mir leid, ich habe keine spezifischen Informationen! in Bezug auf die 1000 Downloads. 99% der Nutzer der Einheit sind neue Hobbyisten, keine Ahnung :-) – Fattie

Verwandte Themen