ツール紹介
ETはオープンソースのゲームクライアント(unity3dベース)のサーバーサイドデュアルエンドフレームワーク.サーバーはC#.netコアを利用して開発された分散型ゲームサーバー.高い開発効率,強力なパフォーマンス,ダブルエンド共有が特徴.クライアントとサーバーのホット アップデート メカニズムは完全であり、同時に信頼性の高い udp tcp Websocket プロトコルをサポートし、サーバーでの 3D リキャスト パスファインディングをサポートします。
HybridCLR は、完全な機能、ゼロ コスト、高性能、低メモリを備えた、Unity フル プラットフォーム向けのほぼ完璧なネイティブ C# ホット アップデート ソリューションです。
xasset は、専門的な Unity リソース システムです。
xasset は、すぐに使用できるパッケージ化、サブパッケージ化、暗号化、再生中のダウンロード、およびクロスプラットフォームの読み込みテクノロジを提供して、Unity プロジェクトの開発をより迅速かつ簡単にします!
ET-EUI (記事公開時にET-GUIの作者がET-7.0に合わせており、これを基にET-7.2に合わせて記事を修正します)
ET -EUI は、ET フレームワークに基づくシンプルな UI モジュールです。
ビルドプロセス
- ET
- ET 7.2 バージョンを github からダウンロードし 、Unity を使用してプロジェクト内の Unity という名前のプロジェクト ディレクトリを開きます。
操作手順については、 ET6.0 フレームワーク - 開発環境の構築、およびBook ディレクトリ配下の 最新の操作ガイド.mdを参照してください 。
- Android プラットフォームに切り替える
- Mongo 関連 Dll の「プラグインのプラットフォームを選択」プロパティ設定を変更します。
そうしないと、「BuildModelAndHotfix」コマンドをクリックした後に、関連する Mongo dll が見つからないというエラー メッセージが表示されます:
( Assets\Scripts\Codes\Model\Server \Module\DB\ DBComponent.cs(1,15): エラー CS0234: タイプまたは名前空間名 'Driver' が名前空間 'MongoDB' に存在しません (アセンブリ参照がありませんか?) (DBComponent.cs で) )
- プロジェクトを実行する前に、「BuildModelAndHotfix」コマンドを実行してコードをコンパイルし、ビルトイン サーバーを起動する必要があります (ClientServer モードを選択) ;サーバーを個別に実行する必要がある場合は、Clientモードを選択してから、 を参照してください。 ドキュメントOperation Guide.md の手順に従って、サーバーを個別に起動します。
- コンパイルが成功したら、正常に起動できます。
- HybridCLR
- ET をインストールしたら、公式のチュートリアルに従って HybridCLR | Focus Creative をインストールし 、HybridCLR パッケージを追加してから、以下をインストールします。
-
公式の HybridCLR サンプル プロジェクト をダウンロードし、Assets ディレクトリ内のすべてのファイルを ET プロジェクトの Unity の Assets ディレクトリにコピーし、その中でメイン シーンを開きます。
- デモ シーンを開始する前に、次のコマンドをそれぞれ実行する必要があります。
実行後、次のファイルが StreamingAssets ディレクトリに正常に生成されます。
上記のすべてのファイルが生成されない場合、または最初にパックする必要があるプロンプトが表示された場合は、 apk を一度パックしてから、コマンドの実行操作を再試行する必要があります。最後に、上図のファイルリストが生成されたら、正常に起動できます。
- XAsset 2022.2 無料版の
XAsset のインストールは簡単です, パッケージを直接インポートしてインストールするだけです. 詳細については, 公式ドキュメント を参照してください. ここでは, 注意が必要な使用上の事項について簡単に紹介します.
- 2022.2 バージョンは、2022.1 バージョンと比較して多くの変更を加えました. まず、パッケージ化およびエクスポートされたバージョン管理ファイルから、元の 2 つのファイル (manifest.json、versions_v?.json) が 2+n ファイル (updateinfo.json、 versions_v? .json, [resource classification file.json,...] )、およびリソース分類ファイルは構成によって生成されるため、リソースのアセットバンドル名をカスタマイズする必要がなくなります。
- 2022.2 バージョンでは、ファイル ブレークポイント レジューム機能がネイティブの C# コードから UnityWebRequest によって実現されるように変更されました。
実装されたダウンロード ロジックには 2 つの要求が含まれます。1 つはファイルのサイズなどの情報を取得するためのもので、もう 1 つはファイルのコンテンツをダウンロードするためのものです。json などの形式のテキスト構成ファイルを CDN 経由でダウンロードする場合、オブジェクト ストレージ方式を使用してこのタイプのファイルを CDN に格納すると、UnityWebRequest リクエストによってファイルのサイズ情報を取得すると、正しいサイズ正しいファイル情報は、HttpWebRequest を介して取得できます。
- ET-I
- ET-EUI7.0 バージョンは現在も ET6.x フレームワークのディレクトリ構造に基づいています.ET7.2 フレームワークで使用するには、関連する EUI コード ディレクトリ (ET-EUI_70\Unity など) を手動で移動する必要があります
。 \Codes\ModelView\Module\EUI、
ET-EUI_70\Unity\Codes\HotfixView\Module\EUI、
ET-EUI_70\Unity\Assets\Editor\EUI、
ET-EUI_70\Unity\Assets\Mono\LoopScrollRect など)
ET7.2 フレームワークに対応するディレクトリ (
ET_72\Unity\Assets\Scripts\Codes\HotfixView\Client\Module\EUI、
ET_72\Unity\Assets\Scripts\Codes\ModelView\Client\Module\EUI、
ET_72など) \Unity\Assets\Scripts\Editor\EUI、
ET_72\Unity\Assets\Scripts\Core\Module\EUI など)
- ダイレクトコピー完了後、ET7.2フレームワークのディレクトリ構造の更新により重複ファイルが発生するため、差分を確認して統合し、不要な同名ファイルを削除する必要があります。
- さらに、ET7.2 フレームワークの一部の属性定義クラスの名前も変更されました. たとえば、FriendClassArrbite は FriendOfAttribute に変更され、ChildTypeAttribute は ChildOfAttribute に変更されました. それに対応して、UICodeSpawner で UI クラスを自動生成する定義ロジックEUI のコードも同期的に更新する必要があります。
ET は、HybridCLR を介してホット コードを生成してロードします
- ET マクロ定義 ENABLE_CODES を追加
- ET ホット アップデート モジュールのプラットフォーム属性をフル プラットフォームに変更します。
- HybridCLR 設定で更新する必要があるアセンブリ定義を追加する
- HybridCLR の BuildAndCopyABAOTHotUpdateDlls コマンドを参照する新しい BuildETAssetsAndCopyToStreamingAssets コマンドを実装します。
- ET の BuildPackage コマンドを実行してリソースをパッケージ化すると、リソースが StreamingAssets ディレクトリに格納されます
- 次に、HybridCLR の 3 つのコマンドを順番に実行して、ホット アップデート コードを生成します. 実行が成功すると、生成されたファイルも StreamingAssets ディレクトリに格納されます
- ET の HybridCLR ホット アップデートをロードするロジックを実現するには、HybridCLR の LoadDll.cs ファイル内のホット アップデート コードをロードするロジックと ET の CodeLoader.cs ファイル内のホット アップデート コードを開始するロジックを参照してください。
System.Collections.IEnumerator DownLoadAssets(Action onDownloadComplete) { var assets = HotfixDll.Concat(AOTMetaAssemblyNames); foreach (var asset in assets) { string dllPath = GetWebRequestPath(asset); Debug.Log($"start download asset:{dllPath}"); UnityWebRequest www = UnityWebRequest.Get(dllPath); yield return www.SendWebRequest(); #if UNITY_2020_1_OR_NEWER if (www.result != UnityWebRequest.Result.Success) { Debug.Log(www.error); } #else if (www.isHttpError || www.isNetworkError) { Debug.Log(www.error); } #endif else { // Or retrieve results as binary data byte[] assetData = www.downloadHandler.data; Debug.Log($"dll:{asset} size:{assetData.Length}"); s_assetDatas[asset] = assetData; } } onDownloadComplete(); }
void StartGame() { LoadMetadataForAOTAssemblies(); List<Assembly> listAssembly = new List<Assembly>(); foreach (var item in HotfixDll) { byte[] assModelBytes = GetAssetData(item); var assembly = Assembly.Load(assModelBytes); if (item == "Unity.Model.Codes.dll") { this.model = assembly; } listAssembly.Add(assembly); } listAssembly.Add(typeof(Game).Assembly); listAssembly.Add(typeof(Init).Assembly); Dictionary<string, Type> types = AssemblyHelper.GetAssemblyTypes(listAssembly.ToArray()); EventSystem.Instance.Add(types); IStaticMethod start = new StaticMethod(this.model, "ET.Entry", "Start"); start.Run(); }
- Apk パッケージを生成し、携帯電話またはエミュレータの起動プログラムでホットフィックスをテストします (起動後にログにエラーが表示されます。これは、サーバー コードもホットフィックス コードに追加されているためです。その後、ホットフィックスを定義し、新しいアセンブリ内のモデル サーバー コード)
プロジェクト コード全体と、HybridCLR を含む変更が必要な UnityEditor.CoreModule.dll ファイル (プロジェクトの Tools ディレクトリ内) はすべてGithubに配置されており、直接ダウンロードできます。