解决Unity打包后粒子特效显示不全的问题
  5I3KmRMViiKU 2023年11月01日 131 0

问题描述

开发环境是Unity 2019.4版本
粒子特效在Editor下显示没有问题,打包后大部分的粒子特效都没问题,但少量粒子特效里的Mesh没有显示。

同时出问题的粒子特效会报下面的Warning

No mesh data available for mesh Plane002 on particle system dg2 (4). Make sure Read/Write Enabled is set in the importer to work on the particle system renderer

问题分析

通过打开Mesh的Read/Write Enabled,问题可以解决,但为什么其他的粒子特效就OK呢?项目中很多粒子特效用到的Mesh也没有打开Read/Write Enabled

Editor和打包后的环境最大的不同是,打包后是加载的AB包来实例化粒子特效的,通过直接在Editor里加载打包后的AB包测试,确定就是AB包的问题。
通过分析出问题和没出问题的粒子特效所在的AB包,发现没出问题的粒子特效,其Mesh是和粒子系统是打在同一个AB包里的,而出问题的那些粒子特效,其Mesh是独立打成AB包的,问题可能就是出在这里。

Unity的论坛里找到答案,原因是Unity在Build的时候会自动把粒子系统关联的Mesh打开其Read/Write Enabled设置,但如果粒子系统和其关联的Mesh被分开打AB包了,Unity则无法获取这个依赖,从而无法自动打开Read/Write Enabled,所以需要手动设置。

解决方案

看具体项目,解决方案有很多,可以确保粒子系统和其Mesh都打在同一个AB包中,也可以手动把出问题Mesh的Read/Write Enabled打开。
由于我现在的项目,AB包是通过依赖分析自动生成的,所以无法保证粒子系统和其Mesh都打在同一个AB包中。还好项目的资源比较规范,粒子系统用到的Mesh都放在同一个文件夹下,只要写一个AssetPostprocessor就可以确保所有Mesh的Read/Write Enabled都打开,简单的例子如下:

class ParticleSystemModelPostprocessor : AssetPostprocessor
{
    private void OnPreprocessModel()
    {
        // 只处理粒子特效的Mesh
        if (assetPath.StartWith("Assets/Res/PS/Model")) {
            var importer = assetImporter as ModelImporter;
            importer.isReadable = true;
        }
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  oXKBKZoQY2lx   2024年03月23日   47   0   0 游戏开发
5I3KmRMViiKU