1.烟花静态
1.在新建材质的基础上把材质颜色改为紫色的效果
2.新建粒子系统
3.配置粒子系统对应的配置
设置持续时间为3秒、起始生命周期设置为一个区间值(双常数随机值),起始颜色设置为渐变颜色,-不断的添加新建并且添加颜色
设置突发数量、周期可以设置为无穷大或者1,形状类型改为球体,这样烟花才能按照圆的四周进行扩散。
4.效果如下:
2.烟花控制动态
1.将烟花设置为对象
将设置好的烟花(粒子系统)重命名为firework,将它拖拽到assets文件夹里面,并将上面的firework删除即可。
2.导入新资产,将声音导入
3.在camera脚本文件声明烟花对象,并将对象拖拽到其中去
//拿到烟花--关联烟花
public GameObject firework;
4.编写部分camera脚本文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class camera : MonoBehaviour
{
//拿到烟花--关联烟花
public GameObject firework;
//拿到摄像机的组件
private Camera mainCamera;
//初始化光线变量
private Ray ray;
private Collider target; //碰撞的物体
void Start()
{
//先拿到当前摄像机组件
mainCamera = GetComponent<Camera>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
//创建一个射线 从某个点发出--鼠标点击的点
//Debug.Log(Input.mousePosition); //鼠标点击的位置 --z轴方向是没有变的,拿到的是x和y轴的变化的值
//从这个点Input.mousePosition-鼠标点击的位置发射一条直线出来
ray = mainCamera.ScreenPointToRay(Input.mousePosition);
//获取碰撞的结果
//创建一个信息收集器 hit--碰撞的物体
RaycastHit hit;
//判断是否碰撞到
bool res = Physics.Raycast(ray, out hit); //这个表示碰撞结果返回的布尔值,同时将碰撞到的物体返回出来给你
//判断碰撞是否为小球
//只有碰撞了才有理论可写
if (res && hit.collider.tag == "light")
{
target = hit.collider;
Light childLight = hit.collider.GetComponentInChildren<Light>();
childLight.enabled = childLight.enabled ? false : true;
//播放烟花 和烟花声音 隔了一秒之后爆炸还有显示
AudioSource audio = hit.collider.GetComponent<AudioSource>();
audio.Play();
//延迟去播放烟花特效
Invoke("fireShow", 2f);
}
}
}
//创建一个播放烟花的方法
private void fireShow()
{
//克隆烟花
GameObject clone = Instantiate(firework, target.transform.position, target.transform.rotation);
Destroy(clone, 3f);
}
}
代码是在实现灯光案例的基础上进行实现的,所以代码有些跟上面实现灯光的代码重复了。
本质上先声明烟花对象,将对象拖入挂载到相机身上的firework对象中,其次声明碰撞对象, 当点击了球的时候,将当前碰撞的物体赋值给target,
//播放烟花 和烟花声音 隔了一秒之后爆炸还有显示
AudioSource audio = hit.collider.GetComponent<AudioSource>();
audio.Play();
//延迟去播放烟花特效
Invoke("fireShow", 2f);
通过延迟播放烟花声音来实现
private void fireShow()
{
//克隆烟花
GameObject clone = Instantiate(firework, target.transform.position, target.transform.rotation);
Destroy(clone, 3f);
}