HybridCLR 最佳實(shí)踐,老項(xiàng)目集成c#熱更
文本介紹了老項(xiàng)目使用HybridCLR 集成熱更的過(guò)程
從項(xiàng)目結(jié)構(gòu)調(diào)整,代碼調(diào)整,打包,熱更測(cè)試,跑完HybridCLR所有流程
源碼及資料領(lǐng)取方式私信:領(lǐng)取資料:HybridCLR戰(zhàn)棋熱更源碼
視頻講解稿

先看效果(安卓)




文本介紹了老項(xiàng)目集成HybridCLR ,目的:實(shí)現(xiàn)C#代碼熱更
從項(xiàng)目結(jié)構(gòu)調(diào)整,代碼寫(xiě)法差異,打包工程,熱更部署,講解HybridCLR全流程
采用戰(zhàn)棋框架作為講解素材
因?yàn)樗松虡I(yè)游戲的常見(jiàn)業(yè)務(wù),比如(戰(zhàn)斗,技能,AI,UI,資源管理,A星尋路系統(tǒng)等常用功能)
項(xiàng)目功能越復(fù)雜,集成的過(guò)程更有參考意義
了解AOT和熱更代碼
根據(jù)需求變化頻率業(yè)務(wù)可分為2個(gè)部分
變化頻率低的通用業(yè)務(wù)
變化頻率高的游戲業(yè)務(wù)
(熱更代碼)游戲玩法邏輯,所屬目錄(HotUpdate)
戰(zhàn)斗,技能,UI,AI,流程控制。
(AOT代碼無(wú)需熱更)通用模塊,所屬目錄(ThirdParty)
資源管理和更新(JAssetBundleMgr)
負(fù)責(zé)資源的對(duì)比更新,下載,斷點(diǎn)續(xù)傳。資源加載,資源加密
A星尋路庫(kù)(AStarPathFinding)
負(fù)責(zé)游戲路徑的計(jì)算(移動(dòng)路徑,技能范圍計(jì)算等)
對(duì)象池管理庫(kù)(PathologicalGames)
基本可以認(rèn)為這些模塊是不會(huì)改動(dòng)的,是穩(wěn)定的
也可以理解為HybridCLR提及的AOT代碼

資源更新對(duì)比實(shí)現(xiàn),需要放在AOT

項(xiàng)目工程結(jié)構(gòu)

入口
文件對(duì)比更新完畢后的回調(diào),在這里加載熱更代碼的dll文件
之前用的是ILRUNTIME,這個(gè)版本使用hybridclr
原有的熱更代碼作為保留參考和對(duì)比


由Enrty.Start(),添加游戲組件GameRoot,由它初始化游戲
(在官方demo里多加了一行代碼完成游戲吃初始化)

部分代碼差異
集成了hybridCLR之后改后改回unity3d內(nèi)置的API寫(xiě)法

部分代碼差異->部分代碼差異

設(shè)置預(yù)制體腳本
支持掛載組件

集成中遇到哪些問(wèn)題處理的時(shí)間花了比較長(zhǎng)?
第三方插件,比如,A*插件
因?yàn)榈谌讲寮恍枰獰岣苑旁诹薃OT
因?yàn)闊岣a是不能包含編輯器代碼的
所以要分離Editor和運(yùn)行時(shí)的代碼
打包代碼得到錯(cuò)誤



熱更代碼丟失AOT引用


熱更程序集缺少引用,因?yàn)轫?xiàng)目使用了A*插件,并且劃分在了AOT程序內(nèi),所以熱更程序集需要聲明引用了第三方的程序集

熱更程序集引用三方類(lèi)庫(kù)

打包
代碼打包



資源打包(資源打包和設(shè)計(jì)方案詳見(jiàn)第二季內(nèi)容)


得到完整資源(代碼資源,素材資源,文件清單表)


打包APK即可
熱更流程
填寫(xiě)資源服IP

方式一鍵熱更部署方式

方式二:按如下方式操作
修改代碼,生成熱更dll

覆蓋版本庫(kù)里的文件


拷貝到資源服務(wù)器即可
一鍵部署熱更原理:

演示熱更視頻