文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
使用 MonoBehaviour
HybridCLR完全支持MonoBehaviour工作流,你既可以通过AddComponent的方式在代码里动态挂载热更新脚本,也可以将热更新脚本挂到资源上,再通过加载资源的方式还原脚本。
基于快速上手文档的项目,我们演示如何使用热更新脚本。
创建 Print.cs
热更新脚本
创建 Assets/HotUpdate/Print.cs
脚本,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Print : MonoBehaviour
{
void Start()
{
Debug.Log($"[Print] GameObject:{name}");
}
}
代码中调用AddComponent来动态挂载热更新脚本
修改 Hello.Run
函数,添加动态挂载Print脚本的代码,最终代码如下:
public static void Run()
{
Debug.Log("Hello, World");
GameObject go = new GameObject("Test1");
go.AddComponent<Print>();
}
热更新后,屏幕上会新增一行日志 [Print] GameObject:Test1
。
将脚本挂载到热更新资源
由于Unity资源管理系统的限制,热更新脚本所挂载的资源(prefab、scene、ScriptableObject资源)必须打成assetbundle,从ab包中实例化资源,才能正确还原脚本。
:::danger 如果将热更新脚本挂载到Resources等随主包的资源上,会发生scripting missing的错误!但如果先打成assetbundle包,再放到Resources下,运行时加载该随包assetbundle则没有问题。 :::
由于整个过程涉及到打ab包,比较冗长,这儿不详细说明。请直接体验 hybridclr_trial 项目(github 或 gitee)。
对于新手来说,你只需要记住:挂载热更新脚本的资源(场景或prefab)必须打包成ab,在实例化资源前先加载热更新dll即可(这个要求是显然的!)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论