日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ILRuntime_NewbieGuide—入门

發(fā)布時間:2024/8/26 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ILRuntime_NewbieGuide—入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

注:這里不會講ILRuntime的熱更新原理,如果還不是很清楚原理,請先移步到官方文檔:https://ourpalm.github.io/ILRuntime/public/v1/guide/index.html

我主要是講如何把ILRuntime_HotGame這樣一個簡易的框架像做lua熱更新一樣使用。 基于ILRuntime的熱更新實現(xiàn)的可以直接使用的框架。

下面一小段引用前輩的話:

ILRuntime部分已經(jīng)在Unity工程中整合,除非有未實現(xiàn)的ILRuntime適配器需要添加,或者ILRuntime有重大更新,否則不建議修改這部分。在C#熱更項目中寫好功能后編譯,框架已經(jīng)寫好編譯后事件,VS會直接將生成到Unity項目的dll的擴展名修改成bytes,以避免Unity將熱更dll直接編譯入最終的Assemble中。 Unity項目中的Enter類為起始類,可以修改Config路徑為自己的遠程路徑。 Unity項目中的UBuildTools類為編輯器輔助類,在Unity編輯器中運行,可以打最終包,也可以打AssetBundle包。

在C#熱更項目部分新加的類建議都從AHotBase繼承,這樣可以直接使用很多基類方法。 AHotBase類不是從MonoBehaviour繼承的,ILRuntime的原作者建議熱更項目中盡量不要繼承自MonoBehaviour。

框架將只會在Unity主工程中添加資源和預(yù)設(shè),一般不會修改UHotGames的代碼,所有的代碼都將在AHotGames熱更項目中添加和實現(xiàn)。

以下為主要內(nèi)容:

1.目錄介紹:

上圖是目錄結(jié)構(gòu): AHotGames是C#熱更項目。 UHotGames是Unity項目。 Config.txt是AB加載配置。


2.工程準備:

下載我的github工程:切到feature_first分支?https://github.com/getker/ILRuntime_NewbieGuide/tree/feature_first?下載最原始的工程,一步一步跟著下面學習。

unity打開UHotGames,大概是下面這個樣子:

打開Main場景,跑一下,用vs打開Enter.cs腳本看一下,Start方法里是下載并調(diào)用ILRuntime來加載AHotGames寫的熱更代碼的部分,框架中,AHotGames生成的代碼再Assets\RemoteResources\Dll下。(到這里都是前輩框架里面的基本東西)

3.新手上路:

打開AHotGames項目的AHotGames.sln,此時應(yīng)該默認用vs打開了。 如果發(fā)現(xiàn)你的AHotGames項目中的引用有很多個嘆號,那就一個一個引用去找到它。舉個例子:

這里面UnityEngine.dll有警告,那就切到UHotGames的vs工程,找到UnityEngine.dll的路徑,回到AHotGames添加UnityEngine.dll的引用。剩下幾個嘆號同樣解決。(全部搞定后還是不行就關(guān)閉AHotGames再重新打開。)

AHotGames工程講解:

在這個框架中,作者把AEmptyUI.cs做成所有UI預(yù)設(shè)的類,所以當我們添加了一個面板的時候,應(yīng)該復制粘貼一個這樣的基類,并且為了方便管理,也應(yīng)該把腳本名稱和類名改成和面板的預(yù)設(shè)名稱一致。


4.實戰(zhàn)

新建一個Train場景,給Train場景的MainCamera掛一個Enter.cs腳本(你新建一個空物體作為Manager掛更好),并創(chuàng)建面板如下:

相應(yīng)看到上面這兩張圖你應(yīng)該可以制作出這個名叫UITrain的面板,把它作為預(yù)設(shè)拖到RemoteResources文件夾下,在Hierarchy刪除它,最后保存一下Train場景。


5.重頭戲

回到AHotGames項目(即我們的熱更新項目),如下圖:在uis目錄下新建UITrain.cs腳本;在最外層新建一個tools目錄,下面新建腳本LoadByResources.cs。

UITrain.cs腳本是和我們unity工程UITrain預(yù)設(shè)對應(yīng)的,LoadByResources.cs是我寫的一個用Resources加載圖片的腳本(很簡單,且技術(shù)含量不高,若是大佬看見了,勿噴,只是簡單的例子,應(yīng)付一下)。

具體代碼如下(github的wiki上面粘貼代碼不好弄,下面的代碼大家將就一下):

UITrain.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine.UI; using UnityEngine; using System.Collections;public class UITrain : AHotBase {private Image image;private Button leftBtn;private Button rightBtn;private int currentImg = 0;//當前圖片序號private int totalImg = 5;//圖片總數(shù),默認為5private string assetPath;//路徑private string directoryPath = "/Resources/Pictures/1/";protected override void InitComponents(){image = FindWidget<Image>("Image_Bg");leftBtn = FindWidget<Button>("LeftBtn");rightBtn = FindWidget<Button>("RightBtn");leftBtn.onClick.AddListener(LeftBtnClick);rightBtn.onClick.AddListener(RightBtnClick);}void LeftBtnClick(){Debug.Log("LeftBtnClick");leftBtn.interactable = false;currentImg--;if (currentImg < 0){currentImg = (totalImg - 1);}LoadImage();}void RightBtnClick(){Debug.Log("RightBtnClick");rightBtn.interactable = false; currentImg++;if (currentImg > (totalImg - 1)){currentImg = 0;}LoadImage();}void LoadImage(){if (!leftBtn.interactable) { leftBtn.interactable = true; }if (!rightBtn.interactable) { rightBtn.interactable = true; }assetPath = @"file:///" + Application.dataPath + directoryPath + currentImg.ToString() + ".jpg";//給路徑賦值LoadByResources.ResourcesLoadSync(image, assetPath);} }

LoadByResources.cs

using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using UnityEngine.UI;public class LoadByResources {/// <summary>/// Resources同步加載/// </summary>/// <param name="image"></param>/// <param name="currentImg"></param>public static void ResourcesLoadSync(Image image, string assetPath){Debug.Log("ResourceLoadSync");string[] path = assetPath.Split('/');string resourcePath = path[path.Length - 1].Substring(0, path[path.Length - 1].LastIndexOf('.'));Debug.Log(resourcePath);image.sprite = Resources.Load<Sprite>("Pictures/1/" + resourcePath);} }

6.尾聲:

寫好了之后,打開AEntrance.cs腳本,把里面的//LoadAnotherUI();注釋起來,改為LoadAnotherClass("UITrain","UITrain.prefab"); 這就是讓它加載我們自己的UITrain面板。 然后重新生成一下項目:

由于框架已經(jīng)加入了生成事件,VS會將生成到Unity項目的RemoteResources/Dll目錄下的dll的擴展名修改為bytes,所以Unity只會將它作為文本文件load一下,并不會進行編譯(這句話是拿前輩的)。

回到unity,先打包一下,運行MyTools/打包工具 中 “Build AssetBundles”命令,將RemoteResources目錄下的所有資源打包成ab(弄好預(yù)設(shè)的那個時候應(yīng)該打包一下才好);然后運行unity,效果如下:

如果上面你沒成功,那就看看報錯,找找是哪里出錯了,上面的整一個過程都賊簡單的。 至此,你已經(jīng)能做了一個小小的demo(觀眾:就是一個按按鈕切換圖片的東西,你真無聊),但,你會發(fā)現(xiàn),其實我們最終點的熱更新資源還沒有出來,對的,因為這篇wiki實在是太啰嗦了,我放到下一個wiki講。

https://github.com/getker/ILRuntime_NewbieGuide/wiki/%E8%BF%9B%E9%98%B6

轉(zhuǎn)載于:https://www.cnblogs.com/kerven/p/10237280.html

總結(jié)

以上是生活随笔為你收集整理的ILRuntime_NewbieGuide—入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。