D46_给刚体施加的力

本文介绍了如何通过Unity的Rigidbody组件和ForceMode,结合碰撞检测,模拟炸弹爆炸效果。作者展示了如何根据爆炸半径和距离调整力的大小,实现力的衰减效果。核心内容包括了瞬时力的施加、质量影响、扭矩计算以及碰撞体的选择应用。
摘要由CSDN通过智能技术生成

 Rigidbody r;
    public int F;
    private void Start()
    {
        r = GetComponent<Rigidbody>();

        r.AddForce(Vector3.forward * F, ForceMode.Force);
        //v = f * t / m;
        //添加一个  持续  的力,并且使用质量
        //不同质量的物体运动的速度不同
        //物体最终是匀速运动,速度与力的大小和刚体的质量有关
        r.AddForce(Vector3.forward * F, ForceMode.Impulse);
        //v = f * t / m;
        //添加一个  瞬间  的力,并且使用质量
        //不同质量的物体运动的速度不同
        //物体最终是匀速运动,速度与力的大小和刚体的质量有关
        r.AddForce(Vector3.forward * F, ForceMode.VelocityChange);
        //v = f * t / m;
        //添加一个  瞬间  的力,忽略质量
        //物体最终是匀速运动,速度只受到力的大小影响
        r.AddForce(Vector3.forward * F, ForceMode.Acceleration);
        //v = f * t / m;
        //添加一个  持续  的力,忽略质量
        //物体最终是匀速运动,速度只受到力的大小影响


        r.AddTorque(Vector3.forward * F, ForceMode.Force);
        //添加扭矩(世界方向)
        r.AddRelativeForce(Vector3.forward * F, ForceMode.Force);
        //添加力(自身方向)
        r.AddRelativeTorque(Vector3.forward * F, ForceMode.Force);
        //添加扭矩(自身方向)

    }

来个题:

要求实现炸弹爆炸效果

public float radius;
public float force;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //找到爆炸范围内的所有Collider     给需要添加力的物体统一加一个Layer
            Collider[] col=Physics.OverlapSphere(transform.position,radius,1<<8);
            for (int i = 0; i < col.Length; i++)
            {
                //找到炸弹和各个游戏物体之间的方向
                Vector3 dir = (col[i].transform.position - transform.position).normalized;
                //离炸弹最近爆炸力最大=force  离炸弹超过radius(爆炸半径)力最小=0 
                //距离越远游戏物体受到的冲击力越小    距离越大 t越小
                float t = 1 - (Vector3.Distance(transform.position,col[i].transform.position)/radius);
                //t限制在0到1之间
                t=Mathf.Clamp(t,0,1);
                float finalForce = Mathf.Lerp(0,force,t);
                //添加一个瞬时的,受质量影响的力
                col[i].GetComponent<Rigidbody>().AddForce(dir*finalForce,ForceMode.Impulse);
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值