Godot Как получить родительское имя коллайдера (стабильная версия C# godot mono v3.1.2)

У меня есть этот код:

    var Collide = MoveAndCollide(new Vector2(speed.y * (float)Math.Cos(teta), speed.y * (float)Math.Sin(teta)));
    if (Collide != null)
    {
        /* I need to get colliding objects parent node name here*/
    }

Вот моя древовидная иерархия:

Иерархия

Красные - это объекты, которые сталкиваются. Зеленый - это имя, которое я хочу получить в строковом формате.


person Ufuk Bakan    schedule 31.12.2019    source источник


Ответы (2)


Сначала взгляните на документацию для KinematicBody.move_and_collide:

Возвращает KinematicCollision, который содержит информацию о столкновении.

Документы для KinematicCollision перечисляют ряд полей, одним из которых является collider:

Сталкивающееся тело.

Обратите внимание, что тело — это PhysicsBody, которому принадлежит форма столкновения, не сама форма столкновения (последняя хранится в collider_shape). Это означает, что collider будет StaticBody в вашем примере, поэтому мы можем просто сделать:

    var Collide = MoveAndCollide(new Vector2(speed.y * (float)Math.Cos(teta), speed.y * (float)Math.Sin(teta)));
    if (Collide != null)
    {
        print(Collide.Collider.Name)
    }
person rcorre    schedule 31.12.2019
comment
Я не могу использовать ошибку Collide.Collider.Name: «Объект» не содержит определения «Имя», и не может быть найден метод расширения «Имя», принимающий первый аргумент типа «Объект» (вам не хватает директивы использования или сборки Справка?) - person Ufuk Bakan; 31.12.2019

Я сам нашел решение, это работает:

    var Collide = MoveAndCollide(new Vector2(speed.y * (float)Math.Cos(teta), speed.y * (float)Math.Sin(teta)));
    //Just defined a MoveAndCollide

    if (Collide != null)
    {
        var x = (Godot.Node2D)Collide.Collider;

        //Use collider as a Godot Node or Node2D
        //then you can access Node properties and method like GetName()

        GD.PrintS(x.GetName()); // Returned speedBoost for me
    }
person Ufuk Bakan    schedule 31.12.2019