zoukankan      html  css  js  c++  java
  • NGUI在使用AssetBubble 出现材质丢失错误的情况

    在出版的时候,想到使用AssetBundle功能,把NGUI的Resource目录下面的所有Shader文件拷贝到项目文件下,单独打包成一个AssetBundle文件。在游戏里面正常使用。

    在Pc平台没出现问题,但是打包到AssetBundle至少,发现材质会出现丢失错误的情况。用FrameDebuger看下,发现材质是错误的。

    查看NGUI里面的底层代码,看到使用到Shader的地方全部使用Unity自带的Shader.Find接口。查看接口定义。发现这个接口是查找内建的Shader。如果Shader没打包的App里面,这个接口是找不到Shader的。

    这样我们就发现了问题!因为我们Shader文件全部打包AssetBundle,App没依赖这个Shader,没有打包到App里面,使用Shader.Find接口是没用的。即使放在Resource目录下面,如果没有被引用到。在Runtime阶段加载也是加载不到的。

    我们可以使用AssetBundle.Load("Shader.assetbundleExname") 重新设置每个控件的Shader可以解决。但是这个方案实在太麻烦了,没有可行性。

    那省下唯一的方案就是把这些Shader强制的打入App,这样用Shader.Find接口就可以找的到了。

    通过用ProjectSetting->GraphiceSetting->Aways Include Shaders 里面把NGUI要用的Shader全部加入进去,这样重新打包就没问题了。

    其实这样有两个问题,第一 AssetBundle重复打包十来个NGUI的Shader。浪费一点点资源,强迫症受不了。

    第一个问题,会重复的实例化一些Shader,这点后面得查下,到底重复了多少。 

  • 相关阅读:
    CodeForces 347B Fixed Points (水题)
    CodeForces 347A Difference Row (水题)
    CodeForces 346A Alice and Bob (数学最大公约数)
    CodeForces 474C Captain Marmot (数学,旋转,暴力)
    CodeForces 474B Worms (水题,二分)
    CodeForces 474A Keyboard (水题)
    压力测试学习(一)
    算法学习(一)五个常用算法概念了解
    C#语言规范
    异常System.Threading.Thread.AbortInternal
  • 原文地址:https://www.cnblogs.com/wbaoqing/p/9640770.html
Copyright © 2011-2022 走看看