You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:00:04