Всем привет! Делал механику, при которой кружок должен отскакивать только от не закрашенных или чужих клеток. То есть через клетки своей команды он должен проходить насквозь. Для этого сделал проверку по тегу и отключил коллизию с объектом с помощью 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;
}
Что я делаю не так или как это можно исправить (чем можно заменить, чтобы было правильнее)?