unity3d 我怎样才能知道对撞机的层数?

qyzbxkaa  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(116)

嗨,我试图找出一个碰撞器的层,所以当一个特定的敌人来了,我把它们分类在层。目前我添加一个敌人,对玩家有一定的影响。这不是我的问题,但我的问题是我不知道如何从碰撞器检测层。这是我的代码在momem

public LayerMask layer;
private void OnTriggerEnter2D(Collider2D collision)
{
    if(Collider2D.)
}
64jmpszr

64jmpszr1#

为了回答你的问题,Collision2D对象有许多属性供你检查。通过检查gameObject属性,你可以找出“其他”对象在哪个层上。
所以,如果你的情况,你可以做这样的事情,使检查层更容易一点:

// Grab the integer values, for layers associated with these three enemies.
    int enemy1, enemy2, enemy3;

    private void Awake ( )
    {
        enemy1 = LayerMask.NameToLayer ( "EnemyLayer1" );
        enemy2 = LayerMask.NameToLayer ( "EnemyLayer2" );
        enemy3 = LayerMask.NameToLayer ( "EnemyLayer3" );
    }

    private void OnTriggerEnter2D ( Collider2D collision )
    {
        var layerMask = collision.gameObject.layer;
        if ( layerMask == enemy1 )
        {
            // ...
        }
        else if ( layerMask == enemy2 )
        {
            // ...
        }
        else if ( layerMask == enemy3 )
        {
            // ...
        }
    }

现在我已经回答了你的问题,你可能不想通过他们所在的层来检查你的敌人。虽然你当然可以这样做,但通常被认为是不合适的。这就是游戏对象标签的作用。你有更多的标签,你不会用额外的层污染物理场景。你的物理层蒙版通常会包括一个“敌人”层,然后你会明确我在那一点上检查一个标签。
例如:

private void OnTriggerEnter2D ( Collider2D collision )
    {
        if ( collision.CompareTag ( "Enemy1" ) )
        {
            // ...
        }
        else if ( collision.CompareTag ( "Enemy2" ) )
        {
            // ...
        }
        else if ( collision.CompareTag ( "Enemy3" ) )
        {
            // ...
        }
    }

Here's LayerMask结构的Unity文档。

goucqfw6

goucqfw62#

碰撞器本身没有层属性。但是,它所附加的gameObject有一个。
所以你应该能够写:

if (collider2D.gameObject.layer == 3)

在Collider 2D上,你还有一个函数IsTouchingLayers,它可能对你想要实现的目标很有用。
它接受一个LayerMask并返回一个bool。参见the docs
注意:这里我写的是collider2D(示例),而不是Collider2D(类型/类)!这可能就是为什么你在编辑器的自动完成中找不到任何东西的原因。

muk1a3rh

muk1a3rh3#

假设您使用OnTriggerEnter()来捕获冲突。

private void OnTriggerEnter(Collider collider)
{
    if (((1 << collider.gameObject.layer) & MyLayerMask) != 0)
    {
        // DO YOUR STUFF
    }
}

这个if (((1 << collider.gameObject.layer) & MyLayerMask) != 0)告诉如果collider.gameObject.layerMyLayerMask中,则执行if语句中的代码。

相关问题