Unity 物体碰撞墙体后反弹

        感觉自己对物理运算真的不太理解 这两天学习过程当中看到有大佬写了个实用技能 叫求物体碰撞墙体后的反射角 ,随后朝反射角的方向移动 就有点像模拟真实世界的碰撞反弹,感觉挺有意思的,记录一下学习过程。

        本来以为挺难的 ,没有接触过这种,但是发现其实主要用的是Unity的一个API ,叫做 Vector3.Reflect(Vector3 inDirection, Vector3 inNormal)。  顾名思义就是求反射角,这里面的参数 一个是入射角的方向,一个是碰撞到的平面的法向量,返回的是求得的反射角。

        新建一个场景,随便搭几个cube缩放一下形成墙体,然后准备个胶囊体,身上需要挂载组件:Rigidbody (发生碰撞的必要条件,不用多说)。

        这里的几个墙体都设置了一个新的Tag:Obstacles。因为检测到地面是不需要反弹的,所以加上反弹条件。

         脚本也挺简单,直接贴上:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    Rigidbody rigidbody;
    Vector3 dir;
    float speed = 5;
    // Start is called before the first frame update
    void Start()
    {
        rigidbody = GetComponent<Rigidbody>();
        dir = new Vector3(Random.Range(-1f, 1f), 0, Random.Range(-1f, 1f)).normalized;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        rigidbody.MovePosition(transform.position + dir * speed * Time.deltaTime);
    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Obstacles"))
        {
            var direction = Vector3.Reflect( dir, collision.GetContact(0).normal).normalized;
            direction.y = 0;
            dir = direction;
        }
    }
}

        把脚本挂载到胶囊体,运行效果如下:

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值