转载的处理unity导入的mesh会有很多个多余无用通道问题解决方法

                                                       
                                           

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

方法一:

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

在这个界面中美术可以把相应的不需要的通道关掉,这样在导出的时候就不会附带这些通道了,如果想去掉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.     }
  25. }
以上就是解决导入的模型存在多层UV的解决方法。

Tip:由于unity的光照贴图会自动占用uv2通道,而且你的项目中又使用的是动态加载光照贴图的方式的话,最好不要在导入模型的时候把UV2设置为null,如果你这样做了有可能会导致光照贴图显示不出来的问题。具体请看http://m.blog.csdn.net/article/details?id=46330119我也是搜索解决方案的时候无意中看到的,所以作为Tips提醒下


                                   
                                   
                                   
                               
                                       
抗痘洁面泥                                                                                                                    
                   
原创文章 18 获赞 9 访问量 3万+
               
                               
                                            关注                                                                 私信                                                            
                           
                               
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果瓦片地图遮挡了 TextMesh,你可以考虑通过设置 Sorting Layer 和 Order In Layer 属性来解决问题。 首先,确保 TextMesh 和瓦片地图在不同的 Sorting Layer 中。在 Unity 中,Sorting Layer 可以控制渲染顺序,Sorting Layer 值越大的对象被渲染在屏幕上面。 然后,你需要设置 TextMesh 的 Order In Layer 属性值比瓦片地图的 Order In Layer 属性值大。这意味着 TextMesh 被渲染在瓦片地图的上层,从而避免了被瓦片地图遮挡的问题。 如果你的 TextMesh 和瓦片地图位于同一层中,你可以使用 Sorting Group。将 TextMesh 和瓦片地图放置在同一 Sorting Group 中,然后调整 Sorting Group 中的 Order 属性值,确保 TextMesh 的 Order 值大于瓦片地图的 Order 值即可。这样,TextMesh被渲染在瓦片地图的上层,避免被遮挡。 最后,如果以上方法都无法解决问题,你可以在代码中动态调整 TextMesh 的 Sorting Layer 和 Order In Layer 属性,确保它们的值比瓦片地图大。例如,在 TextMesh 所在的脚本中,你可以使用以下代码: ```csharp void Start() { // 获取 TextMesh 组件 var textMesh = GetComponent<TextMesh>(); // 设置 Sorting Layer 和 Order In Layer textMesh.GetComponent<Renderer>().sortingLayerName = "UI"; textMesh.GetComponent<Renderer>().sortingOrder = 2; } ``` 这样,你就可以在代码中动态设置 TextMesh 的 Sorting Layer 和 Order In Layer 属性值,确保它们的值比瓦片地图大,从而避免被瓦片地图遮挡的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值