Unity利用粒子系统模拟下雪积雪效果

按我个人能力,这个方案的解决有两种方式

1、  运用shader的法线和夹角来决定积雪位置,强度,厚度;

2、  运用粒子系统下雪,利用粒子碰撞检测生成雪花落地,因为大批量的雪花其实是一张张图片组成的,把他们的载体网格合并成一个大的全删掉,不停的添加新生成的地上的雪花;

我现在来说一下这个简单的模拟下雪,因为很方便所以才说一说,适合当做PlanB  如果能用shader做的千万别用这个,好low啊;

过程步骤:

1、  创建场景和粒子发射器

Unity利用粒子系统模拟下雪积雪效果_第1张图片

粒子系统发射器的挂载脚本:(这个脚本不涉及到网格合并,这个方面网上教程很多也不复杂,我就不加了,麻烦。。。)

2、  粒子系统必须要点开的组件选项:

Unity利用粒子系统模拟下雪积雪效果_第2张图片

一定要发送碰撞消息,这样才能检测碰撞和获取信息:

脚本贴一下:

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParticleSySC : MonoBehaviour {//脚本挂在粒子对象上
    public List partcollision;  //储存一帧内的所有碰撞信息
    public ParticleSystem _part;  //这个例子系统
    public List Snow=new List();  //储存所有生成的对象
    public GameObject Snows;//雪的预制体
	// Use this for initialization
	void Start () {
        partcollision = new List();   
        _part = transform.GetComponent();
	}
	
	// Update is called once per frame
	void Update () {
		
	}
    private void OnParticleCollision(GameObject other)
    {
        _part.GetCollisionEvents(other, partcollision);  //把数据存入这个碰撞信息集合里,自动就添加完了//下一帧 会清空
        Quaternion q = Quaternion.FromToRotation(Snows.transform.forward, -partcollision[0].normal);//计算这个生成物体的旋转。
        GameObject s= GameObject.Instantiate(Snows, partcollision[0].intersection, q);  //生成创建
        Snow.Add(s);
       // Debug.Log(partcollision[0].intersection);
    }
}

 

 

结果运行如下图(我这里没有雪的透明图就直接白底代替了):

 Unity利用粒子系统模拟下雪积雪效果_第3张图片

当它执行到这里的时候帧率并没有下降:

Unity利用粒子系统模拟下雪积雪效果_第4张图片

后来测试大概得运行30分钟帧率才下降:

所以我们需要合并这个网格优化网格:合并网格请自行百度吧,记得要存储这些图片:

你可能感兴趣的:(unity,积雪效果,下雪,unity,王,Unity的个性特殊高级技巧)