2017-10-25 4 views
0

Ich arbeite mit Unity (+ Vuforia), und ich habe einige Probleme, einige Variablen zu drucken, die ich das vuMark Augmented Reality Objekt (das eine Vuforia-Sache) mit identifizieren möchte , aber ich kann es nicht zur Arbeit bringen.Unity und C# DebugLog druckt nicht alles

Mein Code ist unten, wo ich die vuMarkID mit "Tabelle" vergleichen soll. Im DebugLog gibt jedoch meine zweite Anweisung (Debug.Log("vuMarkCompareToTable...")) 1 zurück. Obwohl die erste Anweisung (Debug.Log("ID = {0}"...)) "Tabelle" zurückgibt. Ich habe versucht, das vuMarkID String-Objekt zu trimmen, und habe es auch direkt versucht, es zu konvertieren, wie Sie unten sehen.

Die andere seltsame Sache ist nichts wird nach "Tabelle" im Debug-Protokoll für die erste Aussage gedruckt. Ich habe versucht, Verkettung mit etwas wie vuMarkID+"END", und die Anweisung schneidet nur bei "Tabelle". Ich habe sogar versucht, mit "ID = {0}{0}" zu drucken, und nur die erste "Tabelle" druckt. Selbst wenn sich das vuMarkID-Objekt ändert (z. B. zu Hocker), wird immer noch nichts nach dem initialen vuMarkID-Objekt gedruckt.

Wie kann ich das Debug.Log erhalten, Text nach "Tabelle" zu erkennen, und die CompareTo -Funktion gibt 0 zurück, wenn die Argumente (scheinbar) die gleichen sind?

Edit: Ich versuchte Debug.Log(string.Format("ID = " + vuMarkID + "DONE")); auch (Ich versuche zu sehen, ob es etwas nach dem Text ist), aber das schneidet auch sofort nach der vuMarkID ab. Ich habe versucht, für Newline zu ersetzen, nur für den Fall, dass es da war, aber es hatte keine Wirkung.

//Gets the id of a VuMark Object 
string vuMarkID = GetVuMarkId(vuMarkObj).ToString(); 
if (vuMarkID.CompareTo("Table ") == 0) 
{ 
    Debug.Log("Table found from tracking!"); 
} 
else 
{ 
    string logdebug = vuMarkID; 
    object[] args = new object[] { (vuMarkID), vuMarkID.CompareTo("Table") }; 
    Debug.Log(string.Format("ID = {0}", logdebug)); 
    Debug.Log("vuMarkCompareToTable = " + (vuMarkID.Trim().CompareTo("Table"))); 

} 
+0

Sie kippe Verwendung Debug .Log wie eine Console.WriteLine, ersetze (string.Format ("ID = {0}", logdebug) mit (string.Format ("ID = {0}" + logdebug) . –

+0

Aus irgendeinem Grund mag es das nicht. Ich bekomme 'Exception in callback: System.Reflection.TargetInvocationException: Exception wurde vom Ziel eines Aufrufs ausgelöst. ---> System.FormatException: Index (nullbasiert) muss größer oder gleich Null und kleiner als die Größe der Argumentliste sein. – A4Treok

+0

Herzlichen Glückwunsch. Ihr Problem, 'den ganzen Text nicht anzuzeigen', wurde behoben, jetzt scheint es so, als ob Ihre vuMarkID außerhalb des Bereichs liegt (kleiner als 0), Sie müssen das beheben, um ihren Wert zu verwenden. –

Antwort

0
if (vuMarkID.CompareTo("Table ") == 0) 

Notiere die " " (Raum) nach Tabelle.

Wenn vuMarkID "Tabelle" ist, würde es zu else Anweisung gehen, da es nicht übereinstimmt.

Sie brauchen Raum zu entfernen:

if (vuMarkID.Trim().CompareTo("Table") == 0) 

und Objekt zu drucken, wenn seine etwas anderes:

dies tun:

string vuMarkID = GetVuMarkId(vuMarkObj).ToString(); 
Debug.Log(vuMarkID); // this will always tell you id. No matter what it is. 

if (vuMarkID.CompareTo("Table") == 0) 
{ 
    Debug.Log("Table found from tracking!"); 
    // do table related stuff. 
} 

hoffe, das hilft

+0

Ah, ich habe herausgefunden, dass vuMarkID aus irgendeinem Grund tatsächlich eine Länge von 10 hat (selbst wenn es nur die Welt "Tabelle" ist). Allerdings kann ich nicht herausfinden, was die verbleibenden Zeichen sind (Ich habe versucht, trimmen und ersetzen Newline), so dass ich noch keine Lösung veröffentlichen kann. Es kann sein, dass Unity sie im Debugger behandelt. Ich schätze die Hilfe jedoch. – A4Treok