UnityEditor加载AssetBundle模型变为粉色

这篇具有很好参考价值的文章主要介绍了UnityEditor加载AssetBundle模型变为粉色。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity游戏开发过程中,在UnityEditor下,我们通常直接使用游戏资产(lua代码,prefab,图片,材质等)。而游戏发布后则通常资产导出为AssetBundle以给游戏使用。

Unity会为不同的平台(android,ios,windows)生成不同的AssetBundle,如果我们在UnityEditor下面直接使用为android或者ios平台生成的AssetBundle通常会表现为粉色(shader渲染失败),其原因就是Android平台上编译好的shader(OpenGLES3、Vulkan),在Windows(Direct3D11,)下不支持。

解决方式1:Windows平台的Graphic APIs的第一个修改为OpenGLES3,并重启编辑器,重启后Shader丢失(变粉)的问题得到解决,但某些Unity版本(2021.1.24f1)的Inspector面板出现bug

操作方法如下图

shader 粉色,游戏开发,unity,assetbundle,材质丢失,shader丢失,编辑器

shader 粉色,游戏开发,unity,assetbundle,材质丢失,shader丢失,编辑器

 shader 粉色,游戏开发,unity,assetbundle,材质丢失,shader丢失,编辑器

 

解决方式2:AssetBundle加载完成后,替换其中的shader代码如下:

但是这种方式也有一些问题,变现为某些带有变体的shader的效果差异。

如我这边碰到的一个问题,本来是在透明层渲染的shader,确在不透明层渲染了,在Hierarchy面板下找到这个物体,然后再Inspector面板下展开材质的参数,回到了透明层渲染。

shader 粉色,游戏开发,unity,assetbundle,材质丢失,shader丢失,编辑器

 

_loaderData.assetObject = _assetBundleRequest.asset;
AssetUtil.Editor_ReplaceShader(_loaderData.assetObject as GameObject);
  [System.Diagnostics.Conditional("UNITY_EDITOR")]
        public static void Editor_ReplaceShader(GameObject go)
        {
            if (go == null)
            {
                return;
            }
            Renderer[] renderers = go.GetComponentsInChildren<Renderer>(true);
            foreach (var renderer in renderers)
            {
                UnityEngine.Material[] matArr = renderer.sharedMaterials;
                foreach (var mat in matArr)
                {
                    Editor_ReplaceShader(mat, go.name);
                }
            }

        }
        [System.Diagnostics.Conditional("UNITY_EDITOR")]
        public static void Editor_ReplaceShader(Material mat, string gameObjectName = null)
        {
            if (mat != null && mat.shader != null)
            {
                Shader shader = Shader.Find(mat.shader.name);
                if (shader != null)
                {
                    mat.shader = shader;
                }
                else
                {
                    UnityEngine.Debug.LogError($"can't find the shader material={mat}, gameObject={gameObjectName}, shader={mat.shader.name}");
                }
            }
        }

 文章来源地址https://www.toymoban.com/news/detail-543510.html

到了这里,关于UnityEditor加载AssetBundle模型变为粉色的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AssetBundle动态加载Scene场景

    加载场景有两种方法,一种是常规的 build settings 添加scene,一种是通过 AssetBundle 加载Scene。  上面是标准的异步加载场景,如果不在build settings中添加场景,直接加载scene,就会报下面的错。 因此对于需要热更新的项目,如果场景.unity资源变更了,无法在build settings中重新设置

    2024年02月11日
    浏览(50)
  • 【Unity】AssetBundle加载与卸载

    需要注意的是同一个ab包一次只能加载一个,不可以同时加载, 报错: The AssetBundle \\\'xxxxx\\\' can\\\'t be loaded because another AssetBundle with the same files is already loaded. 如果AB包已经加载过则先进行卸载: 1、卸载全部的目前没有使用的资源: Resources.UnloadUnusedAssets() 2、卸载 AssetBundle 释放其

    2024年04月25日
    浏览(26)
  • Unity-AssetBundle Browser 打包和加载

    进入unity手册中,搜素 Unity Asset Bundle Browser 工具,选择你使用的版本号,根据显示出的操作进行资源导入即可。 注:有的版本可能没有资源链接,可以百度一下有很多。 1、制作预制体(省略)  2、选择一个预制体,在Inspector窗口下方,设置预制体的ab包名(包名只能为小写字

    2024年04月13日
    浏览(32)
  • Unity场景内模型出现粉色的处理方法

    确认是否安装了URP 或者HDRP 对于的对象使用的Shader 没有的话【使用包管理器进行安装】 1.1 查看后是URP的Shader 这里并没有现实为Hidden 或者 Error 之类的隐藏或者错误找不到字段 说明已经安装了URP包,含有对应的Shader。 这里包没有问题,跳过第二步,进入第三步 2.1 内置管线包

    2023年04月09日
    浏览(31)
  • 【Unity】AssetBundle资源异步加载以及AB包卸载

    以下代码是基于上一篇文章《AssetBundle资源同步加载》的代码新增了异步加载和AB包卸载功能,有兴趣的同学可以去看看我的上一篇文章。 由于异步加载需要配合协程进行功能开发,所以我对之前封装的AB包资源加载管理器进行修改,改为继承MonoBehaviour的单例模式。 主要修改

    2023年04月08日
    浏览(34)
  • Unity AssetBundle批量打包、加载(场景、Prefab)完整流程

    1、文章介绍 2、具体思路和写法         (1)AB包的打包         (2)AB包的加载         (3)AB包卸载 3、结语 本篇博客主要起记录和学习作用,简单的介绍一下AB包批量的打包和加载AB包的方式,若各位同学有幸看到本篇博客,希望能够对你有所帮助。 (1)

    2024年02月04日
    浏览(39)
  • Unity中使用AssetBundle打包与加载的注意事项

    一、使用AssetBundle进行打包与加载 个人觉得可以参考以下两篇博客,这个网上相关教程很多,还不明白的可以去百度,或者给我留言。 Unity 打包与加载AssetBundle(加载对应的依赖) Unity中的AssetBundle 二、使用AssetBundle进行加载的时候注意事项: 注意事项一:AssetBundle名字和设置

    2024年02月11日
    浏览(38)
  • 【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)

    需要源码及依赖请点赞关注收藏后评论区留言私信~~~ AssetBundle最重要的操作就是AssetBundle打包 下载 加载以及卸载 下面就来了解一下AssetBundle的常用操作 AssetBundle打包主要用到下面两个API BuildAssetBundles(string outputPath,AssetBundleBuild[] builds, BuildAssetBundleOptions assetBundleOptions,BuildTarg

    2024年02月10日
    浏览(33)
  • [游戏开发][Unity]Assetbundle打包篇(1)打包流程介绍

    打包与资源加载框架目录 先捋一下打AB包的整体思路,首先,Unity4.6版本之后就使用了全新的打包接口 无论是全新打包还是增量打包都是使用这个API,所以一切的一切,都要围绕这个API开始讲起。 该API有四个参数 string outputPath AssetBundleBuild[] builds BuildAssetBundleOptions assetBundle

    2024年02月10日
    浏览(36)
  • 在Unity中,当模型和材质在Project面板中显示为粉色

    在Unity中,当模型和材质在Project面板中显示为粉色,通常表示它们丢失了它们原本的纹理(Texture)或着色器(Shader)。这种情况可能由以下几个原因导致: 缺失纹理:模型或材质使用的纹理文件被删除或移动到其他位置,导致Unity无法找到它们。因此,模型和材质在Project面

    2024年02月08日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包