【发布时间】:2016-12-23 13:21:55
【问题描述】:
我有一个对象向另一个对象移动并与它发生物理碰撞,我希望该碰撞/碰撞事件只发生一次。我尝试使用bool,但它没有按预期工作。看来我做错了什么。
bool doDamage = true;
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "Target" && doDamage)
{
doDamage = false;
// damage code
}
}
void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.tag == "Target")
{
doDamage = true;
}
}
编辑:
我希望“损坏代码”只运行一次,即使 2 个对象仍处于接触状态。此脚本仅分配给 1 个对象,而不是两者。
【问题讨论】:
-
你的意思是整个碰撞应该只发生一次,第二次这个对象应该表现得像没有碰撞器或者你只是想控制损坏?
-
我希望整个碰撞只发生一次。
-
为你的游戏对象准备不同的层。在物理设置中,取消选中这两层的层碰撞矩阵。为两个对象设置相同的图层,并在碰撞后更改其中一个对象的图层。他们不会再碰撞了。您也可以在碰撞后将其中一个碰撞器更改为触发器。
-
在我的脑海中,我确实认为 OnCollisionEnter2D 只会被调用一次,除非你稍后再次发生碰撞?
标签: c# unity3d collision-detection