3D游戏编程设计作业七

参考 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值