使用 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