本文最后更新于 2026-03-31T17:28:50+08:00
Hybridclr(华佗)+Addressable:场景未标记Addressable时静态物体挂载热更脚本导致Script Missing的解决方案
前言
在使用HybridCLR(华佗)热更新方案配合Addressable资源管理系统时,打包之后运行就会报Script Missing错误。这个问题困扰了我很久,记录一下解决方法
现象描述
场景文件未标记为Addressable,即保留在Build Settings中
场景中的某个GameObject挂载了热更新脚本,即HybridCLR热更模块中的脚本
打包后运行,该脚本显示为Script Missing,功能失效
原理就不多分析了,详情见文章:文章跳转
解决方案
方案一:动态挂载热更脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| using UnityEngine; using System.Reflection; public class DynamicScriptLoader : MonoBehaviour { void Start() { Assembly hotUpdateAssembly = Assembly.Load(File.ReadAllBytes( $"{Application.streamingAssetsPath}/HotUpdate.dll.bytes")); Type printType = hotUpdateAssembly.GetType("Print"); gameObject.AddComponent(printType); } }
|
方案二:将静态物体改为预制体动态生成
1 2 3 4
| AsyncOperationHandle<GameObject> handle = Addressables.InstantiateAsync("your_prefab_address"); await handle.Task; GameObject instance = handle.Result;
|
方案三:将场景文件标记为Addressable
1 2 3
| AsyncOperationHandle<SceneInstance> handle = Addressables.LoadSceneAsync("main_scene_address", LoadSceneMode.Single); await handle.Task;
|
总结
总结什么,终于是解决了这个难题,可是苦了我一阵子