【Fracturing&Destruction】Unity3D中达到条件触发物体爆裂、炸裂、碎裂效果
Unity3D Mesh可以将物体分解成多个碎片,然后在利用Fracturing & Destruction插件去制作物体爆裂、炸裂、碎裂效果。如果制作一个碰撞时的击碎效果,也可以使用这个组件,不过,在实际上,更多情况是需要直接利用代码控制一个物件是否破碎,可以称之为“条件碎裂”。那么在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对其进行碎片分析的时候,就将它设置为刚体,所以其由于重力的作用会自动下降,做到一个点击摇晃的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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 ); //破碎物体呈现,让他开始他的表演! } } } |