using System.Collections; using System.Collections.Generic; using UnityEngine; public class BouncingBall : MonoBehaviour { public float bounceForce = 5f; Rigidbody2D rb; void Awake() { rb = GetComponent(); } void Update() { if(collisionQueued != null){ if(collisionVelocity.sqrMagnitude < 0.2f){ rb.velocity = collisionQueued.contacts[0].point.normalized * bounceForce; }else{ Vector2 normal = collisionQueued.contacts[0].normal; Vector2 reflection = Vector2.Reflect(collisionVelocity, normal); rb.velocity = reflection.normalized * bounceForce; } collisionQueued = null; } if(collisionQueued==null){ collisionVelocity = rb.velocity; } } Collision2D collisionQueued = null; Vector2 collisionVelocity = Vector2.zero; void OnCollisionEnter2D(Collision2D collision) { collisionQueued=collision; //collisionVelocity=rb.velocity; rb.velocity=Vector2.zero; } void OnDrawGizmos() { if(collisionQueued != null) { Gizmos.color = Color.red; Gizmos.DrawLine(collisionQueued.contacts[0].point, collisionQueued.contacts[0].point + collisionQueued.contacts[0].normal * 0.1f); Gizmos.DrawLine(collisionQueued.contacts[0].point, collisionQueued.contacts[0].point + collisionVelocity * 1f); } } }