使用 ILRuntime UGUI


使用 ILRuntime UGUI

使用Unity版本为2020.1.17太监版(f1c1),VS为2019(白嫖版community);

1. package manager 里导入ILRuntime。

2. 监听Button点击事件。

结果发现宇宙第一IDE VS不提示Button;  
这时我们需要,在热更工程引用里,使用Unity UI的库文件(UnityEngine.UI.dll);  
并且再属性里设置“复制到本地”选项为“false”。

旧版

Editor\Data\UnityExtensions目录下。

在新版本Unity中(2019.2之后)

UnityEngine.UI.dll被移动到项目\Library\ScriptAssemblies\UnityEngine.UI.dll (亲测:2020.1.17)

3. 写点代码

在Unity工程,随便写点代码。用以初始化一下ILRuntime,并调用注册热更工程里,注册监听的静态方法。
// Unity工程调用热更函数
appdomain.Invoke("HotFix_Project.InstanceClass", "RegistBtnClick", null, null);
// 热更工程注册Button监听 // Button位于场景根对象Canvas下
public static void RegistBtnClick()
{
    var roots = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects();
    UnityEngine.GameObject btnObject = null;
    for (int i = 0; i < roots.Length; i++)
    {
        if (roots[i].name == "Canvas")
        {
            btnObject = roots[i].transform.Find("Button").gameObject;
            btnObject.GetComponent<Button>().onClick.AddListener(new UnityEngine.Events.UnityAction(() =>
            {
                UnityEngine.Debug.Log(UnityEngine.Time.frameCount.ToString());
            }));
            return;
        }
    }
}

4. 开始运行

首先重新生成热更工程,然后运行Unity,查看Console窗口。完美运行……个屁。  

Console窗口输出错误:KeyNotFoundException: Cannot find convertor for UnityEngine.Events.UnityAction。  
并且给出了需要增加的代码
appdomain.DelegateManager.RegisterDelegateConvertor<UnityEngine.Events.UnityAction>((act) =>
{
    return new UnityEngine.Events.UnityAction(() =>
    {
        ((Action<>)act)();
    });
});
所以我们使用到的委托类型都需要注册一下才能使用,代码说明需要把UnityAction转换成.NET的Action类型。

5. 再次运行

点击Button,可以发先Console输出了当前帧数。
OK。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM