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