Script Missing的解决方案

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()
{
// 确保先加载热更新DLL
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
// 加载Addressable场景
AsyncOperationHandle<SceneInstance> handle = Addressables.LoadSceneAsync("main_scene_address", LoadSceneMode.Single);
await handle.Task;

总结

总结什么,终于是解决了这个难题,可是苦了我一阵子


Script Missing的解决方案
https://zeng-ss.github.io/zeng.github.io/2026/03/29/Script-Missing的解决方案/
作者
Zeng
发布于
2026年3月29日
更新于
2026年3月31日
许可协议