C# OnTriggerInter2D不工作的统一性问题

C# OnTriggerInter2D不工作的统一性问题,c#,unity3d,triggers,collision,C#,Unity3d,Triggers,Collision,所以我有一个困扰我好几个小时的问题。 我尝试使用OnTriggerEnter2D()获取其他.DataHolder.itemType的数据。 但是Unity声明,other不包含我试图访问的内容。 我的第一个问题是,unity如何知道这一点?正如我编写代码的那一刻一样,没有任何东西与我的播放器发生冲突,因此OnTrigger2D()中的代码不应该被执行,因此不要求任何明显不存在的组件 void OnTriggerEnter2D(Collider2D other) { other.g

所以我有一个困扰我好几个小时的问题。 我尝试使用
OnTriggerEnter2D()
获取
其他.DataHolder.itemType
的数据。 但是Unity声明,
other
不包含我试图访问的内容。 我的第一个问题是,unity如何知道这一点?正如我编写代码的那一刻一样,没有任何东西与我的
播放器发生冲突
,因此
OnTrigger2D()中的代码不应该被执行,因此不要求任何明显不存在的组件

void OnTriggerEnter2D(Collider2D other)
{   
    other.gameObject.GetComponent<DataHolder>();
    if(other.DataHolder.itemType == "bagCoins")
    {
        goldCount++;
        other.GameObject.SetActive(false);
    }


}
void OnTriggerInter2d(碰撞的R2D其他)
{   
other.gameObject.GetComponent();
if(other.DataHolder.itemType==“bagCoins”)
{
goldCount++;
other.GameObject.SetActive(false);
}
}
团结怎么会知道这一点

这就是
c
,任何编译器都知道现有的类型,并且a没有名为
DataHolder
的成员

在我编写代码的那一刻,没有任何东西与我的播放器发生冲突,因此OnTigger2D()中的代码;不应该被执行,因此不要求任何明显不存在的组件

void OnTriggerEnter2D(Collider2D other)
{   
    other.gameObject.GetComponent<DataHolder>();
    if(other.DataHolder.itemType == "bagCoins")
    {
        goldCount++;
        other.GameObject.SetActive(false);
    }


}
我将用简单的话来尝试:与任何其他应用程序一样,在进入播放模式/执行它之前,您的整个代码都必须由Unity编译

因此,如果代码中有错误,当然在实际执行之前,您会得到相应的编译器错误,因为编译器甚至不知道如何编译代码来运行它

您所说的将是一个运行时错误
,它只会发生,例如,因为某些引用是
null
,但主要意味着您的代码结构本身是正确的


GetComponent
返回一个引用。只是打电话

 other.gameObject.GetComponent<DataHolder>();

这不是使用getcomponent的方式。如果你想使用这个组件,你需要将它存储在一个变量中,这不仅仅意味着“其他”现在将允许。不管什么都可以。谢谢你的快速回答。几天前我才开始玩unity和c#,所以我还有很多东西要学。谢谢你用简单的语言解释。我会尽快试用,希望能正常工作。祝你今天愉快,再次感谢:)