我是靠谱客的博主 孝顺黄蜂,最近开发中收集的这篇文章主要介绍Unity利用粒子系统模拟下雪积雪效果,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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利用粒子系统模拟下雪积雪效果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部