首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一处理不同用途的多路对撞机

统一处理不同用途的多路对撞机
EN

Stack Overflow用户
提问于 2015-08-12 13:06:00
回答 2查看 5.2K关注 0票数 1

我有两个不同对撞机的敌人。第一个是盒子对撞机,它被用作敌人的日耳曼。

第二个是球体对撞机,我想用它来探测玩家和他的盟友。这个对撞机的属性IsTrigger设置为true ( BoxCollider没有)。

我的问题是,当我的玩家发射一个弹丸,它首先击中球对撞机。球体对撞机被当作希特勒盒来对待,我的敌人也会受到伤害。下面是抛射脚本:

代码语言:javascript
复制
void OnTriggerEnter (Collider col)
{
    if (col.gameObject.tag == "Player")
    {
        AUnit a = col.gameObject.GetComponent<AUnit>();
        if (a != null)
        {
            a.takeDamage(damage);
            if (goThrough == false)
                Destroy(gameObject);
        }
    }
}

我的问题很简单,怎样才能只检测到BoxCollider而忽略SphereCollider?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-12 13:17:59

这可以通过使用基于层的碰撞检测来实现。

您将播放机设置为单层,将播放机抛出为另一层

然后,您可以使两层在碰撞检测中相互忽略对方的

票数 4
EN

Stack Overflow用户

发布于 2019-10-24 12:17:04

如果您不希望它们是基于层的,因为在某些情况下,如果没有大型的解决方案,这将无法完全工作,您可以使用以下解决方案,这也应该很好。

代码语言:javascript
复制
public class "ClassNameHere": MonoBehaviour
{
    public BoxCollider2D Collider1;
    public CircleCollider2D Collider2;
    public CircleCollider2D Collider3;

    private void OnCollisionEnter2D(Collision2D other)
    {
        if(other.collider==Collider1)
        {
          Debug.Log("1");
        }
        if(other.collider==Collider2)
        {
           Debug.Log("2");
        }
        if(other.collider==Collider3)
        {
           Debug.Log("3")
        }
    }
}

使用这种方法,您将在与特定对撞机碰撞时执行特定的操作,即使它们位于同一游戏对象上。

但是请注意,Collider没有id变量或类似的东西,这允许统一检测同一游戏对象上相同类型的对撞机之间的差异。但是只要对撞机是另一种类型的,它就能工作。

如果希望在单个对象上使用相同类型的对撞机中的两个,但仍然希望注意到差异,则很可能必须转到该类型对撞机的统一类定义,并添加一个公共int、float、long或string ID,您可以在代码中获取这些ID,以获得与您交互的特定类型的对撞机。

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

https://stackoverflow.com/questions/31966157

复制
相关文章

相似问题

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