这一次,要参照I Remember网站开始界面的那个光环,用粒子系统做一个类似的光环,当然,我做的没网站上的那么好看,就,增加一点儿自己的东西吧。
首先,来看一下成品图:
图中有两个环,它们转的方向相反,但每个环的粒子数都是一样的,同时还会有颜色的变化(这里设置了五种颜色轮流变换)。整个环由一个粒子系统生成,通过每一帧设定每个粒子的位置来达到粒子在旋转这一效果。
粒子的位置通过公式:x = cos(t); y = sin(t)来确定。
制作步骤
步骤一:
在场景中建立一个空对象(ParticleSystem),并在对象内新建一个粒子系统(ring):
![]()
步骤二:
新建一个C#脚本,命名为myRing,并将其挂载在ring上。
![]()
步骤三:
下面,就是用脚本对粒子的行为进行控制。
首先,提供下面的一些共有变量,使得我们可以在外部通过更改这些参数来设定光环的属性。
public ParticleSystem particleSystem; //粒子系统对象
public int particleNumber = 5000; //发射的最大粒子数
public float pingPong = 0.05f;
public float size = 0.05f; //粒子的大小
public float maxRadius = 10f; //粒子的旋转半径
public float minRadius = 4.0f;
public float speed = 0.05f; //粒子的运动速度
另外,我们还需要对每个粒子进行处理,所以,需要存储粒子本身,以及他们的每个粒子的运动半径和位置偏转角。
private float[] particleAngle;
private float[] particleRadius;
private ParticleSystem.Particle[] particlesArray;
在Start函数里面将要获得的组件和需要申请的内存都处理好后,就可以开始对粒子的初始位置进行设定了,通过随机生成粒子的夹角,半径,然后根据圆的极坐标公式表示,就可以将很多粒子排列成一个圆的样子了。
void init()
{
//对于每个粒子
for (int i = 0; i < particleNumber; i++)
{
//随机生成角度
float angle = Random.Range(0.0f, 360.0f);
//换回弧度制
float rad = angle / <