Я создаю 2D Shooter сверху вниз. Я понял, что мои пули отскакивают от стен. Я использую OnCollisionEnter2D и Hardbody2D. Пули отскакивают от удара о стену, но они вращаются вокруг своей оси. Я пробовал много способов, но не могу заставить это работать.
Вот как это выглядит на практике:

Вот мой код для пули и для рикошета ребенка.
public class GunBullet : MonoBehaviour
{
[HideInInspector] public PlayerAvatar ownerPlayerAvatar;
SpriteRenderer spriteRenderer;
public int damage = 15;
[SerializeField] float bulletSpeed;
Rigidbody2D rigidbody;
public void Start()
{
rigidbody = GetComponent<Rigidbody2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
rigidbody.velocity = transform.right * BulletSpeed;
}
}
public class RicochetMode : MonoBehaviour
{
Rigidbody2D rigidbody2D;
GunBullet gunBullet;
private void Start()
{
rigidbody2D = transform.root.GetComponent<Rigidbody2D>();
gunBullet = transform.root.GetComponent<GunBullet>();
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.layer == LayerMask.NameToLayer("Obstacle"))
{
Debug.Log("RICOCHET");
Vector2 reflectedPosition = Vector3.Reflect(transform.right, collision.contacts[0].normal);
rigidbody2D.velocity = (reflectedPosition).normalized * gunBullet.BulletSpeed;
Vector2 dir = rigidbody2D.velocity;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
rigidbody2D.MoveRotation(angle);
}
}
}
Я ожидаю, что пуля направлена в правильном направлении. И я не хочу использовать материалы 2D физики Unity.
EDIT.
Решением проблемы было установить
Hardbody2D.angularVelocity к нулю, как сказал @trollingchar.