3D游戏编程与设计作业八

本文介绍了如何在Unity3D中创建粒子光环特效。通过建立ParticleSystem,调整参数,并编写脚本来控制粒子旋转,使部分粒子顺时针、部分逆时针旋转,形成光环。同时,通过颜色渐变实现粒子颜色随时间变化。为了使光环中间更厚,作者通过随机化粒子半径实现这一效果。最终,展示了调整后的粒子光环更美观,具有中间厚、两边薄的视觉效果。
摘要由CSDN通过智能技术生成

作业要求

本次作业基本要求是三选一。

  • 简单粒子制作
  • 完善官方的“汽车尾气”模拟
  • 使用粒子流编程控制制作一些效果, 如“粒子光环”

在本次作业中,我完成的是作业三——粒子光环。

实现

在项目中新建一个Particle System,修改一下Rotate以便其正对摄像机,Particle System中的相关参数也没有怎么修改:
在这里插入图片描述
然后就是通过脚本实现例子移动形成光环的效果了。
实现思路如下:
首先要使用一个数组particleRing来存储所有粒子,然后使用angle数组来存储各个粒子当前的角度(位置)和旋转半径R

    private ParticleSystem.Particle[] particleRing;
    private float[] particleAngle;
    private float[] particleR;

实现旋转的部分如下:

			if (i % 2 == 0){
                particleAngle[i] += (i % level + 1) * speed;
            }
            else{
                particleAngle[i] -= (i % level + 1) * speed;
            }
            
            particleAngle[i] = particleAngle[i] % 360;
            float rad = particleAngle[i] / 180 * Mathf.PI;
            particleRing[i].position = new Vector3(particleR[i] * Mathf.Cos(rad), particleR[i] * Mathf.Sin(rad), 0f);

这里的i是遍历整个粒子数组的index,前面的一个if判断的效果是让一半粒子顺时针旋转、一半粒子逆时针旋转。
每个粒子的Angle加上或者减去(i % level + 1)*speed,这里的用意是各个粒子的运行速度不完全一致,而是分为level个等级依次递增,然后将计算后的结果%360,为了保证Angle在合法范围[0,360]之间。
接着计算出相应弧度值,因为Mathf中的Cos和Sin函数接收的参数是弧度值。
最后就直接修改每一个粒子的位置,利用数学知识: x = r c o s θ x=rcos\theta x=rcosθ y = r s i n θ y=rsin\theta y=rsinθ即可。

除此之外,本项目还实现了粒子光环的颜色渐变,利用到的是

public Gradient Color;

在每次update 遍历粒子的时候进行如下操作:

particleRing[i].color = Color.Evaluate(Mathf.Abs(Mathf.Cos(Time.time)));

可以根据时间来在渐变色板上以cos的变化进行取色。

此时效果如下:
在这里插入图片描述
基本实现了粒子光环的效果,但是想要进行一些处理,让光环的中间比较厚、两边比较薄一点,显得更加美观,因此在设置粒子半径r的时候增加如下操作:
在这里插入图片描述
先取最小半径和最大半径的均值,然后先在进行三次随机,这样粒子落在中间的概率就比落在两边的概率大了。

此时效果如下:

在这里插入图片描述
可以看出两边的厚度明显小于中间,粒子光环制作完成。

源代码

GitHub

参考博客

Unity3d-粒子光环

Unity3D学习:制作粒子光环特效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值