概述
按我个人能力,这个方案的解决有两种方式
1、 运用shader的法线和夹角来决定积雪位置,强度,厚度;
2、 运用粒子系统下雪,利用粒子碰撞检测生成雪花落地,因为大批量的雪花其实是一张张图片组成的,把他们的载体网格合并成一个大的全删掉,不停的添加新生成的地上的雪花;
我现在来说一下这个简单的模拟下雪,因为很方便所以才说一说,适合当做PlanB 如果能用shader做的千万别用这个,好low啊;
过程步骤:
1、 创建场景和粒子发射器
粒子系统发射器的挂载脚本:(这个脚本不涉及到网格合并,这个方面网上教程很多也不复杂,我就不加了,麻烦。。。)
2、 粒子系统必须要点开的组件选项:
一定要发送碰撞消息,这样才能检测碰撞和获取信息:
脚本贴一下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParticleSySC : MonoBehaviour {//脚本挂在粒子对象上
public List<ParticleCollisionEvent> partcollision;
//储存一帧内的所有碰撞信息
public ParticleSystem _part;
//这个例子系统
public List<GameObject> Snow=new List<GameObject>();
//储存所有生成的对象
public GameObject Snows;//雪的预制体
// Use this for initialization
void Start () {
partcollision = new List<ParticleCollisionEvent>();
_part = transform.GetComponent<ParticleSystem>();
}
// 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);
}
}
结果运行如下图(我这里没有雪的透明图就直接白底代替了):
当它执行到这里的时候帧率并没有下降:
后来测试大概得运行30分钟帧率才下降:
所以我们需要合并这个网格优化网格:合并网格请自行百度吧,记得要存储这些图片:
最后
以上就是孝顺黄蜂为你收集整理的Unity利用粒子系统模拟下雪积雪效果的全部内容,希望文章能够帮你解决Unity利用粒子系统模拟下雪积雪效果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复