一. 前言
??在閱讀本節(jié)內(nèi)容之前舍肠,讀者應(yīng)先自行了解一下Unity AssetBundle的知識并了解其大概使用方法,因為本教程主要是將如何制作Mod呵燕,所以對于基礎(chǔ)知識則是希望讀者自行學習棠绘。
??在學了前面10節(jié)之后,我們已經(jīng)可以對游戲進行各種各樣的補丁,修改各種參數(shù)氧苍,但是夜矗,我們只是在原來的基礎(chǔ)上修改各種數(shù)據(jù),作為一個Mod制作者让虐,除了對數(shù)據(jù)的修改紊撕,我們還需要一些更好玩的東西。
??雖然教程開篇的我們說要用《雙冠》作為講解澄干,不過它的內(nèi)容確實是有點少,為了講解本節(jié)的內(nèi)容柠傍,這次我們使用《Farm Together》也就是《一起玩農(nóng)場》來講解麸俘,這是一個3D游戲,我們本節(jié)內(nèi)容就是在我們的農(nóng)場里加入一個我們自己制作的模型惧笛。
二. 準備工作
??為了和游戲保持良好的兼容从媚,我們需要一個盡可能靠近游戲使用的unity的版本,我們在游戲根目錄下找到UnityPlayer.dll
患整,然后右鍵屬性拜效,找到詳細信息,可以看到文件版本為2018.2.21.8949
各谚,我們打開Unity的舊版本留檔頁面紧憾,https://unity3d.com/get-unity/download/archive ,在2018.X頁面我們找到了2019.3.4發(fā)布的2018.2.21昌渤,這應(yīng)該就是一起玩農(nóng)場所使用的Unity版本了赴穗,我們下載安裝,登錄之后膀息,我們新建一個3D項目般眉。
??之后就看到了我們熟悉的Unity頁面,接下來潜支,我們制作一個簡易的小人甸赃,作為我們的要加入游戲的模型。
??ok冗酿,一個簡易的小人就做好了埠对,我們還為它的身體創(chuàng)建了一個材質(zhì)。接下來裁替,我們打開AssetStore鸠窗,搜索官方的AB包插件,下載并導入胯究。
??這個插件可以很方便的打包我們的資源稍计,接下來我們將場景中的小人拖動到下方資源管理器中,生成一個預制體裕循,然后選中我們的預制體臣嚣,修改右下角的AB包信息净刮,我這里取名為mod.ab。
??從上方Window/AssetBundle Borwser打開AB包瀏覽器硅则,我們可以可以看到我們剛才命名的小人和它需要的材質(zhì)球淹父。
??選中右側(cè)Build,將平臺改為windows64怎虫,因為從游戲根目錄我們可以得知這個游戲是使用的64位暑认。然后點擊Build,等待打包完畢大审,我們就得到了打包好的AB包蘸际。
三. 從Mod加載AB包
??我們快速的創(chuàng)建一個Mod,這里取名為ModelTest徒扶,在添加引用的時候粮彤,除了之前常用的DLL之外,我們再額外添加一個UnityEngine.AssetBundleModule.dll
姜骡,我們需要它來加載AB包导坟。
??我們選擇在Mod加載的時候從Mod路徑讀取我們的資源,當然你也可以選擇在其他時間加載圈澈,看需求惫周。如下:
using UnityEngine;
using UnityModManagerNet;
namespace ModelTest
{
public static class Main
{
public static UnityModManager.ModEntry mod;
public static GameObject modelPrefab;
public static bool Load(UnityModManager.ModEntry modEntry)
{
mod = modEntry;
AssetBundle ab = AssetBundle.LoadFromFile($"{mod.Path}mod.ab"); //從mod文件夾下加載mod.ab
modelPrefab = ab.LoadAsset<GameObject>("MyModel"); //從ab包中加載預制體MyModel
ab.Unload(false); //卸載ab
mod.OnGUI = OnGUI;
return true;
}
public static void OnGUI(UnityModManager.ModEntry modEntry)
{
if (!mod.Enabled) return; //如果mod沒有開啟,則不執(zhí)行
if (StageScript.Instance == null) return; //判斷農(nóng)場是否載入
if (!StageScript.Instance.Loaded) return; //判斷農(nóng)場是否載入
if(GUILayout.Button("生成小人"))
{
GameObject go = GameObject.Instantiate(modelPrefab); //生成小人
go.transform.position = StageScript.Instance.LocalPlayer.transform.position; //將小人移動到玩家位置
}
}
}
}
??接下來我們將mod編譯康栈,放到Mods文件夾下闯两,并將Unity那里生成的mod.ab文件也復制到mod文件夾,然后打開游戲谅将,進入農(nóng)場漾狼,點擊我們的生成小人按鈕。
??到此饥臂,我們就將小(巨)人成功的加入到了農(nóng)場內(nèi)逊躁。