人气 332

[综合技术] Unity导入模型出现多层UV问题解决 [复制链接]

九艺网 2019-3-19 11:44:37

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在做项目优化的时候发现,游戏中的模型占用了很高的内存,然后就怀疑是美术在做模型的时候没有把uv2,uv3,color等无用的通道去掉,然后就去问了美术,美术说她并没有开启这些通道,我也去max中检查了一下也没发现什么异常的情况,在max中看确实只有一层uv但是在unity里面就可以看见模型上面有很多层uv了,带着这个问题去查了下资料,摸索着使用了下max,然后就有了下面给大家分享的Unity导入模型出现多层UV问题解决方法。

方法一:


在max中进行设置把没有必要的通道全部clear掉,具体的操作请看下面的截图:
5c6f5ecf7e3cb.jpg


在这个界面中美术可以把相应的不需要的通道关掉,这样在导出的时候就不会附带这些通道了,如果想去掉color通道的话直接去掉alpha通道就行。

方法二:

程序这边进行处理,做一个工具,对每个导入到unity中的模型代码中清除相应的通道,具体的代码如下:
  1. public class ClearModelUV:AssetPostprocessor  {
  2.     //AssetPostprocessor这个类是unity自带的,会在导入资源的时候自动调用,
  3.     //可以在这个类中实现对资源的处理。
  4.     //OnPostprocessModel这个函数在资源导入到unity被存成prefabs最后阶段被调用
  5.     //传入的gameobject就是被导入的资源的Gameobject
  6.     //这个类还有一个OnPreprocessModel的方法会比这个方法提前点调用。具体用法
  7.     //和前者差不多
  8.     void OnPostprocessModel(GameObject rImaportModel)
  9.     {
  10.         this.ClearMeshUVAndColorChannel(rImaportModel);
  11.     }
  12.     private void ClearMeshUVAndColorChannel(GameObject rImportModel)
  13.     {
  14.         List<Vector2> rNewUV = null;
  15.         List<Color32> rNewColor = null;
  16.         var rFilters= rImportModel.GetComponentsInChildren<MeshFilter>();
  17.         for (int filter_index = 0; filter_index < rFilters.Length; filter_index++)
  18.         {
  19.             rFilters[filter_index].sharedMesh.SetColors(rNewColor);
  20.             rFilters[filter_index].sharedMesh.SetUVs(1, rNewUV);
  21.             rFilters[filter_index].sharedMesh.SetUVs(2, rNewUV);
  22.             rFilters[filter_index].sharedMesh.SetUVs(3, rNewUV);
  23.          }
  24.     }
复制代码
以上就是解决导入的模型存在多层UV问题的方法。

注:由于unity的光照贴图会自动占用uv2通道,而且你的项目中又使用的是动态加载光照贴图的方式的话,最好不要在导入模型的时候把UV2设置为null,如果你这样做了有可能会导致光照贴图显示不出来的问题。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-19 13:52 , Processed in 0.071293 second(s), 29 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.