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#,所以我还有很多东西要学。谢谢你用简单的语言解释。我会尽快试用,希望能正常工作。祝你今天愉快,再次感谢:)