Я стреляю снарядами и отбиваю их от стен - я хочу что-то вроде нереально совершенных отскоков - объект не теряет скорость и не начинает вращаться при столкновении - вращается только один раз, чтобы «соответствовать» направлению отражения.
Я использую физический материал, у которого 0 и трение на стенах и снарядах, я использую гравитационную шкалу для снаряда 0 и его массу 0,0001 - минимально возможное количество, а твердое тело снаряда отключено.вращение.
Все работает нормально, но я не могу правильно повернуть отскок снаряда, я поворачиваю его трансформацию при столкновении следующим образом:
public class Laser : MonoBehaviour {
private new Rigidbody2D rigidbody2D;
private Vector3 oldVelocity;
private void Start() {
rigidbody2D = GetComponent<Rigidbody2D>();
boxCollider2D = GetComponent<BoxCollider2D>();
}
void FixedUpdate () {
oldVelocity = rigidbody2D.velocity;
rigidbody2D.freezeRotation = true;
}
void OnCollisionEnter2D (Collision2D collision) {
ContactPoint2D contact = collision.contacts[0];
Vector3 reflectedVelocity = Vector3.Reflect(oldVelocity, contact.normal);
rigidbody2D.velocity = reflectedVelocity;
Quaternion rotation = Quaternion.FromToRotation(oldVelocity, reflectedVelocity);
transform.rotation = rotation * transform.rotation;
}
}
В настоящее время выглядит так - шаг за кадром
Я хочу, чтобы он вращался вокруг точки столкновения, как показано справа:
пробовал без удачи:
transform.RotateAround(contact.point, new Vector3(0f, 0f, 1f), Vector2.Angle(oldVelocity, reflectedVelocity));