【Fracturing & Destruction】点破小球——Unity3D中达到条件才触发的物体爆裂、炸裂、碎裂效果

在《【Fracturing & Destruction】Unity3D的物体爆裂、炸裂、碎裂效果》(点击打开链接)提到了Unity3D的物体爆裂、炸裂、碎裂效果到底是用哪些组件去制作的,但是只是提到如果制作一个碰撞时的击碎效果,当然这也是这个组件最基本的使用,不过,在实际上,更多情况是需要直接利用代码控制一个物件是否破碎,可以称之为“条件碎裂”。那么在Unity3D中,如何做到达到条件才触发的物体爆裂、炸裂、碎裂效果呢?其实还是同样利用到这个插件。下面举一个例子说明这个效果,为了使例子更加有趣,我做了一个点碎小球的例子:


在《【Unity3D】判断是否鼠标点击物体与血条制作》(点击打开链接)我曾经完成了一个点击扣血的效果,这里是进一步,在点到血槽变空之后,小球碎裂。这里也说明,在Fracturing & Destruction中,不借助任何物体的撞击,如何用代码让小球自然破碎。

制作过程如下:

1、与《【Unity3D】判断是否鼠标点击物体与血条制作》(点击打开链接)一样摆好血条之后,导入Fracturing & Destruction插件之后,和在《【Fracturing & Destruction】Unity3D的物体爆裂、炸裂、碎裂效果》(点击打开链接)同样,生成一个Fractured Object,其位置摆放、内部材质应该和小球一模一样,但这里让他上来就碎,同时生成碎片的时候,弹出的对话框,问你是否收起原物体,这里选择否。


最终场景布置如下图所示,当然这不是本文的重点,之前两篇相关文章都详细说过了。


2、下面编写如下脚本,赋予给主摄像机Main Camera或者一个自己新建的GameObject,这里我是扔给了Main Camera一个GameScript.cs。

这个脚本让达到条件才触发的物体爆裂、炸裂、碎裂效果成为可能,其主要思想是:将原物体和碎片物体重叠放置,但我们一开始就用SetActive(false)让上来就会自动碎裂的碎片物体隐藏,将其收起来,则他遇到SetActive(true)才会播放碎裂效果,不过,在他要SetActive(true)的时候,也就是原物体SetActive(false)隐藏之时。同时,在小球被点击的时候,对其授予一个向Y轴正方向,也就是向上的小速度,在Fracturing & Destruction对其进行碎片分析的时候,就将它设置为刚体,所以其由于重力的作用会自动下降,做到一个点击摇晃的效果。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;//Slider属于UI,用到这个头文件  

public class GameScript : MonoBehaviour
{
    public GameObject Fracture;//生成的碎片
    public GameObject Sphere;//原来的球
    public Slider HPStrip;//添加血条Slider的引用  
    private int HP = 10;//开始为10滴血  

    void Start()
    {
        Fracture.SetActive(false);//开始先收起并隐藏破碎物
        HPStrip.value = HPStrip.maxValue = HP;//初始化血条  
    }

    void Update()
    {

        if (Input.GetMouseButtonDown(0))//鼠标左键点下  
        {
            //住摄像机向鼠标位置发射射线    
            Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit mHit;
            //射线检验    
            if (Physics.Raycast(mRay, out mHit))
            {
                if (mHit.collider.gameObject == Sphere)//如果点击的是球
                {
                    HP--;//点到这个球,血就-1  
                    HPStrip.value = HP; //对血条执行操作  
                    Sphere.rigidbody.velocity = new Vector3(0, 1, 0);
                }
            }
        }

        if (HP <= 0)//如果血槽空
        {
            Sphere.SetActive(false);//原来的球消失掉
            Fracture.SetActive(true);//破碎物体呈现,让他开始他的表演!
        }
    }
}
当然,我们还要主摄像机指明各个物体,才能使程序正确运行,HPSlider就是血条Slider,Fracture就是插件生成的破碎物Fractured Object,而Sphere就是原来的小球:


  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值