55 lines
1.5 KiB
C#
55 lines
1.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class BouncingBall : MonoBehaviour
|
|
{
|
|
public float bounceForce = 5f;
|
|
Rigidbody2D rb;
|
|
|
|
void Awake()
|
|
{
|
|
rb = GetComponent<Rigidbody2D>();
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|