码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-05-07 06:53:23      阅读:432      评论:0      收藏:0      [点我收藏+]

标签:

这里需要有一些爆炸的粒子特效,如果大家没有的话,我会打包在项目中,这是我在网上下载的一些特效,里面有很多特效,我就只用了其中一个来做测试。
爆炸特效的路径在: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目录下,大家注意。。
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。

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

标签:

原文地址:http://blog.csdn.net/u014230923/article/details/51335741

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!