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

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

爆炸特效的路径在: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目录下,大家注意。。

本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。

时间: 2024-12-10 01:06:41

Unity 模仿官方例子 点击时添加爆炸力的相关文章

练习题:获取登录按钮及整个登录面板,给登录按钮添加事件,点击时让登录层示,点击登录面板的关闭按钮,关闭整个登录层

获取登录按钮及整个登录面板,给登录按钮添加事件,点击时让登录层示,点击登录面板的关闭按钮,关闭整个登录层 点击登录后: <!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding:0;} .head{font-size:1

unity学习笔记一 受到伤害时的颜色变化

最近在跟着视频学做,很简单的demo 就是这个了,看过的人都知道,官方的.刚刚四级的我只能找点国内重制的看了 现在想做的效果就是受到伤害时会变红,让后慢慢平滑过渡到白色 在update方法中如下 void Update() { //鼠标左击模拟受到伤害 if( Input.GetMouseButtonDown(0)) { TakeDamage(30f); } //颜色变白 bodyRenderer.material.color =Color.Lerp(bodyRenderer.material.

Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图

Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML的过程. 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所引入的Razor视图引擎.Razor视图模板文件使用.cshtml文件扩展名,并提供了一个优雅的方式来使用C#语言创建所要输出的HTML.用Razor编写一个视图模板文件时,将所需的字符和键盘敲击数量降到了最低,并实现了快速,

Java Restful框架:Jersey入门示例(官方例子)

本文主要介绍了Java Restful框架Jersey入门例子(来源于官方网站https://jersey.java.net/),废话不多说进入正题. 在Jersey官方示例中(https://jersey.java.net/documentation/latest/getting-started.html),入门例子主要采用maven构建,在这里使用eclipse来创建我们的项目 1.使用maven 骨架方式创建项目,如下图, 2.,如果在eclipser中没有上面的选项,我们需要手动添加Je

Android学习笔记(十四)——在运行时添加碎片(附源码)

在运行时添加碎片 点击获取源码 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中. 1.使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个<fragment>元素: 2.在FragmentActivity.java中添加下面的代码: FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fr

HTML实现点击时的阴影

一般是用这个委类:active 参考:http://www.w3school.com.cn/cssref/selector_active.asp 但是业界上实现的效果中,今日头条的手机端网页却不是这样的,当点击时是一闪而过,也有非常漂亮的圆角,如下图: 初步分析,没有在css文件上找到active的样式,我初步怀疑是用js添加上去的:且这个有个特点:点击时是一闪1秒,而用active是一直都在,除非你放开. 最终还是没研究出,只能用土办法,直接active去实现. 接下来是发现在iOS微信上无法

WebView中实现延迟加载,图片点击时才加载。

1 String newHtml = html + 2 "<script type=\"text/javascript\">" + 3 "(function (){"+ 4 "var imageList = document.getElementsByTagName(\"img\");"+ 5 "for(var i=0; i<imageList.length; i++){&quo

cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第六步---炮台&amp;点击炮台添加英雄

/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写,第一别完全照搬代码:第二可以说明是学习笔记---好人 **3.这里用cocos2d-x 3.0版本重写,很多地方不同,但是从重写过程中也很好的学习了cocos2d-x */ ***每一步对应的所有代码以及用到的资源都会打包在最后给出 ***为避免代码过多,每一步的代码都做了标记--一看就晓得是第几步实现的避免出错改不回去(难不成还用Git

.net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器

1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.WebForm使用母版页进行登录时候的验证 //新建一个页面父类 public abstract class BasePage:Page { protected void Page_Load(object sender, EventArgs e) { //1.身份验证的方法 Session if (Se