【Unity】物体爆炸,碎片横飞

效果: 

可以看到,主角碰到我们的巧克力之后,巧克力爆炸,碎片横飞,然后消失。

思路:

1.判断主角巧克力接触

2.接触到的瞬间删除巧克力(你希望爆炸的物体)。

3.生成巧克力碎片的prefab(多个碎片组合成的一个物体)。给这个物体添加一个爆炸力,让它向四周飞去。一小段时间后删除碎片。

给玩家一种该物体爆炸,变成碎片的感觉。实际上,该物体并没有变化,只是瞬间换成了多个碎块的组合体。这些碎块受力飞走了。

具体实现:

1.判断主角与巧克力接触后,执行相应操作:

  • 主角和巧克力(需要爆炸的物体)都要添加碰撞盒。
  • 在主角或者巧克力身上的脚本里进行碰撞检测,我是在巧克力的脚本上检测的。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Monster : MonoBehaviour { //巧克力身上绑定的脚本:Monster类

    public GameObject chips;//碎块prefab,在外部赋值

    private void OnCollisionEnter(Collision col)//碰撞检测函数
    {
        //判断碰撞到物体的layer是否和主角的layer相同。如果相同说明碰到了主角
        if (col.gameObject.layer == LayerMask.NameToLayer("wuzei"))      
        {
            SpawnEffects();//生成爆炸特效,不同monster特效可能不同 
            SpawnChips(chips);//生成碎块物体的prefab
            Destroy(gameObject);//删除本物体
        }
    }
}

2.生成碎块物体的prefab,向它添加爆炸力,让它飞走

  • 每个碎块都要添加碰撞盒和刚体,之后才能受力运动

                

 void SpawnChips(GameObject m_chips)
    {
        if (m_chips != null)
        {
            //生成prefab
            GameObject myChips = Instantiate(m_chips, transform.position, Quaternion.identity);
            //1s后删除该物体(爆炸后很快就应该消失)            
            Destroy(myChips, 1f);
            //设置发生爆炸的位置
            Vector3 explosionPos = myChips.transform.position;//这里把位置设置为该物体自身位置。可以根据实际情况调整。
            //调用Physics类的OverlapSphere方法,选取受到爆炸影响的colliders,确定爆炸范围。
            Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);
            //对上一步获取到的所有碰撞体进行操作
            foreach (Collider hit in colliders)
            {
                Rigidbody rb = hit.GetComponent<Rigidbody>();//获取刚体                
                if (rb != null) {
                   rb.AddExplosionForce(power, explosionPos, radius, -3f);
                    //调用函数AddExplosionForce(),向刚体添加爆炸力
               }
            }
        }

    }

【注意】:为了效果更明显,可以把rigidbody的mass减小(m减小,a变大),LinerDrag减小(运动阻力)。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值