Unity移动端材质颜色场景切换后重置问题求助
问题描述
正在开发一款3D移动应用,此前在PC端Unity编辑器及Android手机测试时,在Scene 01通过滑块调整某材质颜色后,切换到Scene 02该颜色可正常保留。
上周开始为移动端优化帧率(原帧率20-30且有波动)后,PC端编辑器仍正常,但Android手机上切换到Scene 02时,材质颜色会重置为构建应用时的初始颜色。例如:在PC端将材质设为红色后构建应用,手机端修改为蓝色,切换场景后仍显示红色。
怀疑方向:
- 误改Player Settings
- Shader替换(仅目标物体保留Lit Shader,其余静止物体替换为Simple Lit)
- Graphics API、缓存相关问题
核心代码:
public Material material; public void MethodCalledInUI() { Color color = material.color; color.r = redSlider.value; color.g = greenSlider.value; color.b = blueSlider.value; material.color = color; }
尝试过用PlayerPrefs保存颜色,但无效(此前未用PlayerPrefs时移动端正常)
需要提供的排查信息
- Player Settings 具体修改项:帧率优化期间改动过的所有Player Settings参数,尤其是Graphics、Rendering相关(如Static Batching、Dynamic Batching、GPU Instancing、Graphics API选择),以及Scripting Runtime Version、Managed Stripping Level等设置。
- Shader替换的具体实现方式:是通过代码批量替换、Project Settings中的Shader Stripping设置,还是手动修改?是否对目标材质的Shader做过特殊处理,比如标记为不可剥离?
- 材质的引用方式:Scene 01和Scene 02中的目标物体是否引用的是同一个材质资源实例,还是各自有独立的材质实例?是否开启了材质的Instance化(即代码中是否调用过
Material.Instantiate())? - 场景切换的逻辑:切换Scene时使用的是
SceneManager.LoadScene()的哪个重载?是否启用了LoadSceneMode.Additive?切换场景前后是否有销毁材质所在的GameObject或重置材质的代码? - PlayerPrefs的实现代码:保存和读取颜色的具体代码,确认是否在Scene加载完成后正确读取并赋值给材质。
- 移动端的日志信息:Android Logcat中关于材质、Shader、场景加载的相关日志,是否有警告或错误(比如材质实例被销毁、Shader加载失败、资源被重新加载)?
- 资源打包设置:Build Settings中的资源打包方式(是否使用Addressables、AssetBundles),以及材质是否被标记为单独打包或随场景打包?
- 帧率优化的其他操作:除了Shader替换,是否还做了其他优化,比如删除了某些脚本、启用了对象池、修改了LOD设置,或者调整了内存管理相关选项(如
Memory Management中的GC Settings)?
内容的提问来源于stack exchange,提问作者devhunt
相关产品推荐
相关产品推荐

