ILRuntime學習(之五)

       第7個例子講解的是使用協程。在熱更工程中使用協程已經屬於跨域繼承的範圍了(使用Couroutine時,C#編譯器會自動生成一個實現了IEnumerator,IEnumerator<object>,IDisposable接口的類,)。所以需要註冊適配器纔可以。

       第8個例子是在熱更工程是使用MonoBehaviour類。同樣的,我們需要註冊適配器。這裏實例做了一些解釋:在熱更DLL裏面使用MonoBehaviour是可以做到的,但是並不推薦這麼做,因爲即便能做到使用,要完全支持MonoBehaviour的所有特性,會需要很多額外的工作量。而且通過MonoBehaviour做遊戲邏輯當項目規模大到一定程度之後會是個噩夢,因此應該儘量避免

       在熱更工程中是不能直接使用Unity中的方法的,必須要進行重定向纔可以,例子舉了GetComponent和AddComponent這兩個方法。另一方面,在unity主工程中獲取熱更工程總的MonoBehaviour類,則需要自己實現一個GetComponent()方法,該方法會返回一個MonoBehaviour類的適配器對象,然後就可以直接使用該對象了。其實該方法就是擴展了一下原本GetComponent的方法,識別了適配器對象類,然後獲取了適配器對應的熱更類。

       第10個例子講解了使用json。 在LIRuntime中適應json還是非常簡單的。使用LitJson.JsonMapper.RegisterILRuntimeCLRRedirection(appdomain)對json進行註冊即可。而且LitJson的使用很簡單,JsonMapper類裏面提供了對象到Json以及Json到對象的轉換方法。例子將使用json的過程包裝在了一個方法中,然後用adddomain來調用該方法,在該方法中,使用json的方法和平常沒有任何區別。在實際項目中,最好也是使用jison的包裝類來操作json。

      最後一個例子講解是註冊值類型Binder。例子講解的是對一下unity特有的類型。使用的註冊方法是RegisterValueTypeBinder(Type t, ValueTypeBinder binder),第一個參數是unity中的類的類型,後面是綁定代碼的實例對象。Vector3等Unity常用值類型如果不做任何處理,在ILRuntime中使用會產生較多額外的CPU開銷和GC Alloc。我們通過值類型綁定可以解決這個問題,只有Unity主工程的值類型才需要此處理,熱更DLL內定義的值類型不需要任何處理。通過例子的演示,可以發現,不註冊和註冊,對於這三個unity中特殊類型的調用,速度相差一倍以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章