一:演示视频

Unity中实现反弹_经验分享


二:代码实现

using UnityEngine;

public class Ball : MonoBehaviour
{
    private Rigidbody rigid;

    private Vector3 lastDir;

    public float speed = 30;

    private void Awake()
    {
        rigid = GetComponent<Rigidbody>();

        rigid.velocity = new Vector3(1, 0, 1) * speed;
    }

    private void LateUpdate()
    {
        lastDir = rigid.velocity;
    }

    private void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.tag == "Wall")
        {
            Vector3 reflexAngle = Vector3.Reflect(lastDir, other.contacts[0].normal);
            rigid.velocity = reflexAngle.normalized * lastDir.magnitude;
        }
    }
}