66i66 发表于 2023-10-11 18:56

unity凉了是该死,这不就是unity的一个bug吗?

Collider2D[] colliders = Physics2D.OverlapCircleAll(Vector2.zero, 5f);
      foreach (Collider2D collider in colliders)
      {
            Debug.Log(”与坐标为0半径为5的圆形区域发生交集的物体有” + collider.name);
      }

上面这段代码的意图是检测一个圆形区域内有多少物体与该区域重叠了。但问题是:当某物体的碰撞器是实体时,可以检测得到;可是,如果该物体的碰撞器改为触发碰撞器(isTrigger为true),就检测不到了;而我想要的效果是,不管是否为触发碰撞器,只要它与这个圆形区域交集,那就应该捕捉它!显然unity没能考虑到触发碰撞器这点(所有的重载函数我的看了),有人知道是我错了,还是unity错了?

chqq5281 发表于 2023-10-11 18:56

想了一下,还是自问自答吧,免得以后遇到同样问题的朋友,网上搜索找不到结果。这里先弄几个关键词:isTrigger, ColliderFilter.useTriggers,Physics.Overlap...
Physics或者Physics2D下的OverlapBox、OverlapCircle、OverlapCapcule函数无法识别检测出isTrigger为true的碰撞器,原来很可能是项目里的【Queries Hit Trigger】没有打勾,解决方法就是给该选项打上勾即可:打开项目的【Projuect Setting】,选中怕【Physics】或者【Physics2d】(根据你自己的项目设置来),找到那个【queries hit trigger】打上勾,如下免两张图片所示:



胖六传奇 发表于 2023-10-11 18:56

Is Trigger       
Enable this if you want this Collider 2D to behave as a trigger. The physics system ignores this Collider when this is enabled.
Unity凉不凉我不知道,但是碰见意料之外的行为不查文档就开始胡思乱想的话,你迟早得凉。

xiarunzi 发表于 2023-10-11 18:57

这个提问方式可招不来友善的回答。

自行去搜索关键词“unity碰撞动作矩阵”

ytmxkj 发表于 2023-10-11 18:58

找喷,回答完毕
毕竟unity是我的吃饭家伙

bluestardm 发表于 2023-10-11 18:58

大哥,好好看看碰撞器和触发器的文章吧
页: [1]
查看完整版本: unity凉了是该死,这不就是unity的一个bug吗?