Unity 模仿官方例子 点击时添加爆炸力

来源:互联网 发布:威客网络兼职万创中国 编辑:程序博客网 时间:2024/04/25 12:51

这里需要有一些爆炸的粒子特效,如果大家没有的话,我会打包在项目中,这是我在网上下载的一些特效,里面有很多特效,我就只用了其中一个来做测试。
爆炸特效的路径在:Assert–>JMO Assert–>WarFX–>Explosions

首先创建好一个3D项目,做出如下类似的场景。
这里写图片描述

注意:需要给立方体添加Rigidbody(刚体)组件,不然没有效果。

给摄像机添加一个Boom脚本,编辑如下:

using UnityEngine;using System.Collections;public class Boom : MonoBehaviour {    public float radius = 10f;   //定义一个要添加爆炸力的半径    public float power = 600f;   //定义一个爆炸力    public GameObject particle;   //得到播放粒子特效的物体    // Update is called once per frame    void Update () {        //当左键按下时        if (Input.GetMouseButtonDown(0))        {            //Camera.main:得到主摄像机            //Input.mousePosition:得到鼠标现在的位置            //我的理解是从主摄像机到鼠标现在的点发射一条射线            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);            //光线投射碰撞            RaycastHit hit;            //函数是对射线碰撞的检测,当碰撞到物体时,返回一个碰撞信息            if (Physics.Raycast(ray, out hit))            {                Vector3 point = hit.point;//得到碰撞点的坐标                //实例化出这个物体                Instantiate(particle, point, Quaternion.identity);                //Physics.OverlapSphere():球体投射,给定一个球心和半径,返回球体投射到的物体的碰撞器                Collider[] colliders = Physics.OverlapSphere(point, radius);                foreach (Collider hits in colliders)  //遍历碰撞器数组                {                    //如果这个物体有刚体组件                    if (hits.GetComponent<Rigidbody>())                    {                        //给定爆炸力大小,爆炸点,爆炸半径                        //利用刚体组件添加爆炸力AddExplosionForce                        hits.GetComponent<Rigidbody>().AddExplosionForce(power, point, radius);                    }                }            }        }    }}

在随便给一个粒子特效添加一个Destroy脚本,并编辑:

using UnityEngine;using System.Collections;public class DestroyParticle : MonoBehaviour {    // Use this for initialization    void Start () {        //开启协程        StartCoroutine(CreateParticle());    }    IEnumerator CreateParticle()    {        //当粒子还在播放中        while (gameObject.GetComponent<ParticleSystem>().isPlaying)        {            yield return null;   //条到下一帧        }        Destroy(gameObject);  //粒子播放结束    }}

注意:需要把添加了此脚本的例子特效添加到摄像机脚本的公有属性 particle 中。

然后现在运行,就可以看见效果了。

这里写图片描述

项目地址:http://pan.baidu.com/s/1eREMwG6 密码:hy89

我的场景就在Assert目录下,大家注意。。
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。

1 0
原创粉丝点击