【问题标题】:How to check for null in this specific situation在这种特定情况下如何检查 null
【发布时间】:2015-04-07 20:03:36
【问题描述】:

对于在 (x 数量) 任务中具有 4 (1,2,3,D) 级别的动态菜单。我在文本上有一个打字机脚本,当玩家单击一个按钮但当他单击下一个按钮时激活:下一个打字机将文本写在另一个文本上,因为两个文本都(并且需要)在同一个地方。

还有其他解决方案,例如使用公共游戏对象 + SetActive,但我会有很多按钮,所以这会很不方便,所以改为:

我会创建一个函数,在启用新任务之前禁用该任务的所有找到的文本,但 TextLevel3 有时根本不存在并返回 null(referenceExeption) 所以我想检查这个并在它是否为 null 时中断或继续如果它是安全。我只是不确定如何结合 Gameobject.Find 和 GetComponent 来做到这一点

    void DisableTexts()
     {
     text = GameObject.Find("TextLevel1").GetComponent<Typer>().enabled = false;
     text = GameObject.Find("TextLevel2").GetComponent<Typer>().enabled = false;
     text = GameObject.Find("TextLevelD").GetComponent<Typer>().enabled = false;

     //This is what i need: 
       Check if (TextLevel3 != null){go ahead} or if (TextLevel3 = null){break;(?)}

     text = GameObject.Find("TextLevel3").GetComponent<Typer>().enabled = false;
     }

     public void CheckLevel (string selectedLevel)
 {
     DisableTexts();
 GameObject.Find("TextLevel" + selectedLevel).GetComponent<Typer>().enabled = true;
 CurrentMission = "Level" + missionSelected + "." + selectedLevel;    
 }

【问题讨论】:

  • var t= GameObject.Find("TextLevel3"); if(t!=null) text=t...

标签: c# android unity3d nullreferenceexception


【解决方案1】:

首先你应该检查它是否存在,然后使用GetComponent 否则你会得到一个null exception

if(GameObject.Find("TextLevel3") != null )
      text = GameObject.Find("TextLevel3").GetComponent<Typer>().enabled = false;

【讨论】:

  • C# 6 发布后,您可以使用 ?。运算符,所以这将变为:text = GameObject.Find("TextLevel3")?.GetComponent&lt;Typer&gt;().enabled = false; 但是,在 VS2015 发布之前,C# 6 不会出现。
猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多