首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >退出冲突时不会触发OnCollisionExit2D

退出冲突时不会触发OnCollisionExit2D
EN

Stack Overflow用户
提问于 2020-07-06 22:39:22
回答 1查看 80关注 0票数 0

(也许人们会抱怨我很愚蠢,但不管怎样)

嗨,我有一个关于Unity中的OnCollisionExit2D功能的问题。我正在制作一个2D城市建筑风格的游戏,我开始为建筑物制作电力系统。它的工作原理是这样的:如果附近没有发电厂(他们有半径对撞机),那么在半径内的建筑物上的electricityNeed布尔值变为真,当发电厂被摧毁/建筑物不在半径内时,它应该设置为false。为此,我使用了OnCollisionEnter2D (它工作得很好)和一个OnCollisionExit2D。下面是负责切换electricityNeed布尔值的代码(在构建脚本中)。

代码语言:javascript
运行
复制
    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对撞机)。

发电厂有“电力”的标签,我检查了很多次。

如果你想帮助我,但我在这里发送的信息不够充分,请告诉我。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-07-06 23:44:45

由于某些原因,从层次结构中删除对象不被视为OnCollisionExit2D。当我修复了删除电厂建筑(半径被认为是占用的建筑位置)的问题时,它突然起作用了。我通过创建一个带有"radius“标签的colider的子对象来做到这一点,colider在放置/删除时需要忽略这个标签。

代码语言:javascript
运行
复制
    private void OnCollisionEnter2D(Collision2D collision)
    {
        colidingBuilding = collision.gameObject;
        if (colidingBuilding.tag.Equals("Radius"))
            return;
        isColliding = true;
    }

如果任何人遇到这样的问题,请尝试我的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62758431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档