C# 将文件移动到标准资源后出现Null错误

C# 将文件移动到标准资源后出现Null错误,c#,unity3d,namespaces,C#,Unity3d,Namespaces,我有一个正在工作的项目,但一切都超出了标准资产。因此,我需要将此所有文件夹和项目移动到standard assets文件夹。当我将所有文件和文件夹移动到标准资产时,它会给我空引用错误 我的项目中有一个名称空间,当我尝试访问这个名称空间时,它会给我null错误 这是我的姓名和密码 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Assets.Script

我有一个正在工作的项目,但一切都超出了标准资产。因此,我需要将此所有文件夹和项目移动到standard assets文件夹。当我将所有文件和文件夹移动到标准资产时,它会给我空引用错误

我的项目中有一个名称空间,当我尝试访问这个名称空间时,它会给我null错误

这是我的姓名和密码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Assets.Scripts
{
  public interface IInputDetector
  {
    InputDirection? DetectInputDirection();
 }

  public enum InputDirection
 {
    Left, Right, Top, Bottom

  }
}
这里是访问它的代码

IInputDetector inputDetector = null; 
和启动方法

void Start(){
   inputDetector = GetComponent<IInputDetector>();
 }
错误是这样的

NullReferenceException:对象引用未设置为对象的实例 ControllerMovement.DetectJumpOrSwipeLeftRight()(位于Assets/Scripts/ControllerMovement.cs:222) ControllerMovement.Update()(位于Assets/Scripts/ControllerMovement.cs:106)

第22行在var行上方

第106行来自我在Update()方法中调用的方法


第222行中的对象
inputdetector
似乎为空。对空对象调用
DetectInputDirection()
将导致
NullReferenceException

由于inputdetector在开始时设置为null,并且仅通过方法
Start()
将其设置为不同的值,因此有两个可能的选项:

1.
Start()
在到达第222行之前不会调用,因此
inputdetector
仍然为空

2.)调用了
Start()
,但
GetComponent()
生成null


从当前的代码片段中,无法确定实际发生的是哪一个。

似乎有一个ControllerMovement类型的对象,当对其调用DetectJumpOrSwipeLeftRight时,该对象为null。然而,代码片段不足以检查为什么会出现这种情况。您至少应该显示detectInputs()正在做什么,因为错误正在那里发生;Update().ContollerMovement是我的类名,它指向我的这一行“var inputDirection=inputDetector.DetectInputDirection();//第222行”@NebrWhere是应该在IIInputDetector中的DetectInputDirection()函数吗?是的,DetectInputDirection()从命名空间返回类似“LeftSwipe”、“RightSwipe”、“Top and Bottom”的值,所以,当用户向任何方向滑动时,我都可以检查它(left==left)是否正确@AloxI认为1)是不可能的,因为很明显Start()在Update()之前,现在我们可以关注第二个。好吧,这对我来说并不明显,因为我看不到Start()何时被调用。您可以通过在inputDetector=GetComponent()行设置断点来实现这一点;并检查该方法返回的值。另外,显示GetComponent()实际在做什么也很有用。我不知道为什么,但我现在发布了标准资产及其工作中的所有文件和文件夹。好吧,没关系。尽管如此,在未事先检查inputDetector是否为null的情况下,您永远不应该进行类似inputDetector.DetectInputDirection()的调用。始终添加if(inputDetector!=null)之类的内容,并在它为null时处理该情况(例如,返回一些错误)。是的,谢谢。我也这么做了,这个小东西填充了null getcomponent();有价值。
var inputDirection = inputDetector.DetectInputDirection(); // Line 222
void Update(){
  DetectJumpOrSwipeLeftRight(); // line 106
}