(也许人们会抱怨我很愚蠢,但不管怎样)
嗨,我有一个关于Unity中的OnCollisionExit2D功能的问题。我正在制作一个2D城市建筑风格的游戏,我开始为建筑物制作电力系统。它的工作原理是这样的:如果附近没有发电厂(他们有半径对撞机),那么在半径内的建筑物上的electricityNeed布尔值变为真,当发电厂被摧毁/建筑物不在半径内时,它应该设置为false。为此,我使用了OnCollisionEnter2D (它工作得很好)和一个OnCollisionExit2D。下面是负责切换electricityNeed布尔值的代码(在构建脚本中)。
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.tag.Equals("Electricity"))
{
electricityNeed = true;
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if(collision.gameObject.tag.Equals("Electricity"))
{
electricityNeed = false;
Debug.Log("It should set electricityNeed to false.");
}
}
当建筑物与发电厂的范围相同时,它变成真,但当发电厂消失时,布尔值仍然是真的。
建筑物和发电厂都有一个非运动学rigidbody2D和一个对撞机(发电厂有一个Circle2D对撞机,建筑物有一个Box2D对撞机)。
发电厂有“电力”的标签,我检查了很多次。
如果你想帮助我,但我在这里发送的信息不够充分,请告诉我。
提前谢谢。
发布于 2020-07-06 23:44:45
由于某些原因,从层次结构中删除对象不被视为OnCollisionExit2D。当我修复了删除电厂建筑(半径被认为是占用的建筑位置)的问题时,它突然起作用了。我通过创建一个带有"radius“标签的colider的子对象来做到这一点,colider在放置/删除时需要忽略这个标签。
private void OnCollisionEnter2D(Collision2D collision)
{
colidingBuilding = collision.gameObject;
if (colidingBuilding.tag.Equals("Radius"))
return;
isColliding = true;
}
如果任何人遇到这样的问题,请尝试我的答案。
https://stackoverflow.com/questions/62758431
复制相似问题