【问题标题】:Unity and C# DebugLog Not Printing EverythingUnity 和 C# DebugLog 不打印所有内容
【发布时间】:2020-07-25 01:51:44
【问题描述】:

我正在使用 Unity(+Vuforia),我在尝试打印一些我想识别 vuMark 增强现实对象(这是 Vuforia 的东西)的变量时遇到了一些问题,但我似乎无法让它工作。

我的代码如下,我希望将 vuMarkID 与“表格”进行比较。然而,在 DebugLog 中,我的第二条语句 (Debug.Log("vuMarkCompareToTable...")) 返回 1。即使第一条语句 (Debug.Log("ID = {0}"...)) 返回“表”。我试过修剪 vuMarkID 字符串对象,也试过直接转换它,如下所示。

另一个奇怪的事情是,在调试日志中的“Table”之后,对于第一条语句,什么都不会打印。我尝试过使用vuMarkID+"END" 之类的东西进行连接,并且该语句只是在“表”处中断。我什至尝试过使用"ID = {0}{0}" 进行打印,但只打印了第一个“表格”。即使 vuMarkID 对象发生变化(例如,变为 Stool),它仍然不会在初始 vuMarkID 对象之后打印任何内容。

当参数(看似)相同时,如何让 Debug.Log 识别“表格”之后的文本并让 CompareTo 函数返回 0?

编辑:我也试过Debug.Log(string.Format("ID = " + vuMarkID + "DONE"));(我想看看文本后面是否有什么东西),但这也会在vuMarkID之后立即中断。我尝试替换换行符,以防万一它在那里,但它没有效果。

//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")));

}

【问题讨论】:

  • 您不能像 Console.WriteLine 一样使用 Debug.Log,请将 (string.Format("ID = {0}", logdebug) 替换为 (string.Format("ID = {0} " +日志调试)。
  • 出于某种原因,它不喜欢那样。我得到Exception in callback: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
  • 恭喜。您的“未显示整个文本”的问题已修复,现在您的 vuMarkID 似乎超出范围(小于 0),您必须修复它才能使用它的值。
  • @ArmanPapikyan 例外是因为你的建议。因为它是 String.Format() 的错误语法。
  • 哦,那是 string.Format 的一个参数,好吧,我的错。我以为 oyu 将它作为 Debug.Log 的参数传递。

标签: c# unity3d


【解决方案1】:
if (vuMarkID.CompareTo("Table ") == 0)

注意表格后面的" "(空格)。

如果vuMarkID 是“表”,它会转到 else 语句,因为它不匹配。

你需要删除空格:

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

如果是其他东西,则打印对象:

这样做:

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

希望对你有帮助

【讨论】:

  • 啊,我发现 vuMarkID 出于某种原因实际上长度为 10(即使它只是世界“表”)。但是,我无法找出剩余的字符是什么(我尝试修剪和替换换行符),所以我还不能发布解决方案。这可能是 Unity 在调试器中对待它们的方式。不过,我感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 2011-01-06
  • 2013-03-20
相关资源
最近更新 更多