unity火焰粒子效果

github传送门。
https://github.com/ddghost/unity3d_n/tree/粒子效果

这次作业要做的是粒子效果,我就来做一个火焰的效果吧。
下面就是成果(emmm。。。感觉还是不是太像),还是有点火的样子的嘛,点击按钮可以调节火的大小,左右摇摆。

在百度随便搜了张图,参考着来调整火焰(尽管最后也不是很像)
unity火焰粒子效果_第1张图片

首先新建一个unity项目,导入unity自带的particle System资源,里面也有不少粒子效果,但这次只是想用一下里面的贴图而已(略略路.jpg),然后就可以开干了。
unity火焰粒子效果_第2张图片
unity火焰粒子效果_第3张图片

试过几个贴图,感觉还是白烟这张贴图好,因为本身白色,颜色调了比较明显,在Renderer处的Material和Trail选择ParticleSmokeWhite这个贴图。
unity火焰粒子效果_第4张图片

然后再调整相关的属性,duration设为2,startLiftime设为2,start speed设为4,start size设为5。
unity火焰粒子效果_第5张图片

由于火焰应该是由一个比较小的口发出,因此在shape这个地方将angle设为0,radius设为0.3。
unity火焰粒子效果_第6张图片

考虑到火焰是底部小,中部大,上部小的,因此设置size over Lifetime,调整它的变化曲线,在曲线上右键就可以加一个节点,加一个节点,大概调整一下,调整的时候可以看着粒子的变化自己选择。
unity火焰粒子效果_第7张图片

然后完成以上步骤就可以看到这个火的效果的形状已经有了。
unity火焰粒子效果_第8张图片

有了形状,还要有颜色,修改color over lifetime,因为由之前的样例图可以看到火一般底部是蓝火,因此把开始的颜色设为蓝色,然后中部设为黄色,同时在上面调整透明度的地方,把最后的透明度调为0,这样火就会越来越透明了,看起来较为平缓。
unity火焰粒子效果_第9张图片

修改完颜色的效果如下
unity火焰粒子效果_第10张图片

完成了这些,一个粗略的火效果已经做完了,然后就是代码部分,代码较为简单,主要就是调整火的左右摇摆和大小而已,代码如下,直接把它挂到粒子系统上即可。

public class UserGui : MonoBehaviour {
	ParticleSystem particleSystem;
	ParticleSystem.ForceOverLifetimeModule forceMode;
	// Use this for initialization
	void Start () {
		particleSystem = GetComponent();
		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,因此在粒子系统上一定要把这一项勾了,否则就无法左右摇摆了,在这里也是坑了很久。

你可能感兴趣的:(unity3d)