vkvk
@vkvk

Почему объект застревает?

Всем привет! Делал механику, при которой кружок должен отскакивать только от не закрашенных или чужих клеток. То есть через клетки своей команды он должен проходить насквозь. Для этого сделал проверку по тегу и отключил коллизию с объектом с помощью Physics2D.IgnoreCollision(), но кружок все равно застревает.

Код с отключением коллизии:
private void OnCollisionEnter2D(Collision2D collision)
    {
        var speed = lastVelocity.magnitude;
        var direction = Vector3.Reflect(lastVelocity.normalized, collision.GetContact(0).normal);

        rb.velocity = direction * Mathf.Max(speed, normalSpeed);

        if (collision.gameObject.tag == "Player")
        {
            Physics2D.IgnoreCollision(collision.collider, GetComponent<Collider2D>());
        }
        else if (collision.gameObject.tag == "Castle")
        {

        }
        //Здесь возможен баг с закрашиванием клеток
        else if (collision.gameObject.tag == this.tag)
        {
            Physics2D.IgnoreCollision(collision.collider, GetComponent<CircleCollider2D>());
        }
        else
        {

        }
    }


Код движения (часть кода в примере выше):
private void Start()
    {
        rb = GetComponent<Rigidbody2D>();

        var direction = Random.insideUnitCircle;//рандомное нормализованное направление

        rb.AddForce(direction * 4 * 40);
    }

    private void Update()
    {
        lastVelocity = rb.velocity;
    }


Что я делаю не так или как это можно исправить (чем можно заменить, чтобы было правильнее)?
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
В настройках физики есть таблица, какие слои с какими взаимодействуют, надо настроить это там, не вот то что вы тут.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы