Столкновение edgecollider2d при порождении сплайна

В моем проекте Unity (2D-игра) я собираю точки, в которых пользователь двигает палец, а затем делаю сплайн из собранных точек с использованием алгоритма catmull rom, а затем созданный сплайн представляется пользователю с использованием linerenderer. Кроме того, я создаю краевой коллайдер с теми же точками, что и при использовании линейного рендера. Моя цель - определить, проведена ли линия в "ограниченной" области и, если да, удалить этот сплайн. Я пробовал разные комбинации коллайдеров и жестких тел на ограниченной области и сплайне, но я не могу получить точку столкновения между ними. OnTriggerEnter2D и OnCollisionEnter2D для меня бесполезны, потому что я хочу проверять коллизию по требованию при создании сплайна

TLDR; я хочу знать, сталкивается ли edgecollider2d с gameobject (sprite и collider2d), но не могу этого достичь

РЕДАКТИРОВАТЬ: теперь я жду исправленного upadte перед проверкой коллизий, это помогло, и у меня есть журнал отладки "ограниченной области", когда мой коллайдер пересекает сплайн на ограниченном слое, но из функции overlapCollider я ничего не получаю

//
IEnumerator CheckForCollision()
{
    yield return new WaitForFixedUpdate();

    int layer = (1 << LayerMask.NameToLayer("Restricted"));
    if(edgeCol.IsTouchingLayers(layer))
    {
        Debug.Log("restricted area");
    }
    else
    {
        Debug.Log("ok");
    }

    Collider2D[] tab = new Collider2D[10];
    ContactFilter2D filter = new ContactFilter2D();
    filter.useTriggers = true;
    filter.useLayerMask = true;
    filter.layerMask = layer;
    int overlaps = Physics2D.OverlapCollider(edgeCol, filter, tab);
    Debug.Log(overlaps);
    if (overlaps > 0)
    {
        foreach(Collider2D col in tab)
        {
            if(col.transform.gameObject != null)
            {
                Debug.Log(col.transform.gameObject.name);
            }
        }
    }
    yield return null;
}

РЕДАКТИРОВАТЬ 2: Таким образом, по-видимому, OverlapCollider работает только тогда, когда один коллайдер полностью внутри другого коллайдера, я использовал GetContacts и получить то, что я хотел

0 ответов

Другие вопросы по тегам