github传送门。
https://github.com/ddghost/unity3d_n/tree/粒子效果
这次作业要做的是粒子效果,我就来做一个火焰的效果吧。
下面就是成果(emmm。。。感觉还是不是太像),还是有点火的样子的嘛,点击按钮可以调节火的大小,左右摇摆。
在百度随便搜了张图,参考着来调整火焰(尽管最后也不是很像)
首先新建一个unity项目,导入unity自带的particle System资源,里面也有不少粒子效果,但这次只是想用一下里面的贴图而已(略略路.jpg),然后就可以开干了。
试过几个贴图,感觉还是白烟这张贴图好,因为本身白色,颜色调了比较明显,在Renderer处的Material和Trail选择ParticleSmokeWhite这个贴图。
然后再调整相关的属性,duration设为2,startLiftime设为2,start speed设为4,start size设为5。
由于火焰应该是由一个比较小的口发出,因此在shape这个地方将angle设为0,radius设为0.3。
考虑到火焰是底部小,中部大,上部小的,因此设置size over Lifetime,调整它的变化曲线,在曲线上右键就可以加一个节点,加一个节点,大概调整一下,调整的时候可以看着粒子的变化自己选择。
然后完成以上步骤就可以看到这个火的效果的形状已经有了。
有了形状,还要有颜色,修改color over lifetime,因为由之前的样例图可以看到火一般底部是蓝火,因此把开始的颜色设为蓝色,然后中部设为黄色,同时在上面调整透明度的地方,把最后的透明度调为0,这样火就会越来越透明了,看起来较为平缓。
修改完颜色的效果如下
完成了这些,一个粗略的火效果已经做完了,然后就是代码部分,代码较为简单,主要就是调整火的左右摇摆和大小而已,代码如下,直接把它挂到粒子系统上即可。
public class UserGui : MonoBehaviour {
ParticleSystem particleSystem;
ParticleSystem.ForceOverLifetimeModule forceMode;
// Use this for initialization
void Start () {
particleSystem = GetComponent<ParticleSystem>();
forceMode = particleSystem.forceOverLifetime;
}
// Update is called once per frame
void Update () {
}
void OnGUI(){
if( GUI.Button(new Rect(10 , 30 , 50 , 30) , "left") ){
ParticleSystem.MinMaxCurve temp = forceMode.x ;
temp.constantMax = temp.constantMax - 0.5f;
forceMode.x = temp;
}
if( GUI.Button(new Rect(10 , 70 , 50 , 30) , "right") ){
ParticleSystem.MinMaxCurve temp = forceMode.x ;
temp.constantMax = temp.constantMax + 0.5f;
forceMode.x = temp;
}
if( GUI.Button(new Rect(10 , 110 , 50 , 30) , "big") ){
particleSystem.startSize = particleSystem.startSize * 1.11f;
particleSystem.startLifetime = particleSystem.startLifetime * 1.11f;
}
if( GUI.Button(new Rect(10 , 150 , 50 , 30) , "small") ){
particleSystem.startSize = particleSystem.startSize * 0.9f;
particleSystem.startLifetime = particleSystem.startLifetime * 0.9f;
}
}
}
最后,值得注意的是,由于代码中用到了forceOverLifetime,因此在粒子系统上一定要把这一项勾了,否则就无法左右摇摆了,在这里也是坑了很久。