参考 http://i-remember.fr/en 这类网站,使用粒子流编程控制制作一些效果, 如“粒子光环”
粒子光环效果
制作过程
首先添加粒子系统,配置如下
要得到黑色背景需要调整摄像机配置
接下来就是代码控制粒子的运动了
分配粒子位置
首先需要定义一个粒子系统和一个粒子数组,由于是圆环运动需要对粒子的初始运动圆心角和半径大小进行分配,实现参照了官方教程http://www.manew.com/thread-47123-1-1.html,代码如下
void Start () {
particleSystem.maxParticles = particleNum;//粒子总数设定
particleArray = new ParticleSystem.Particle[particleNum];//申请数组空间
particleSystem.Emit(particleNum);//发射粒子
particleSystem.GetParticles(particleArray);//生成粒子并存入数组
angle = new float[particleNum];
circle = new float[particleNum];
circleExpend = new float[particleNum];
//初始化粒子位置
for (int i = 0; i < particleNum; i++) {
//从半径中心随机让粒子分布在中心半径附近
float midR = (maxRadius + minRadius) / 2;
float minR = Random.Range(minRadius, midR);
float maxR = Random.Range(midR, maxRadius);
float r = Random.Range(minR, maxR);
float angleinit = Random.Range(0.0f, 360.0f);
angle[i] = angleinit;
circle[i] = r;
circleExpend[i] = circle[i];
}
}
粒子运动行为
粒子的运动速度定义了五个级别的速度,这样可以让整个光环展示出不同的小环,根据每一次upDate的帧我定义了一个缩放的循环,即现将粒子环不断扩大,达到一定范围后在缩小,不断重复这个循环并且缩小的速度比放大稍快就得到了前面展示的效果,代码如下
void Update () {
for (int i = 0; i < particleNum; i++){
if (i % 2 == 0){
angle[i] += (i % level + 1) * speed;
}
else{
angle[i] -= (i % level + 1) * speed;
}
angle[i] = angle[i] % 360;
float rad = angle[i] / 180 * Mathf.PI;
if(cnt < 150){
circleExpend[i] += Time.deltaTime * 4;//放大
}
else{
circleExpend[i] -= Time.deltaTime * 5;//收缩
}
particleArray[i].position = new Vector3(circleExpend[i] * Mathf.Cos(rad), circleExpend[i] * Mathf.Sin(rad), 0);
}
particleSystem.SetParticles(particleArray, particleNum);
cnt = cnt+1;
if(cnt == 300)
cnt = 0;
}
全部代码见github