Among UsのMOD開発やってみた!

どうもー
Reedexの百合野と申します。

今回は趣味でやっているAmong UsというゲームのMOD開発のことをテーマに
少しお話させていただきます。

-初めにに私の自己紹介
本業:iOSメインのアプリエンジニア
趣味:ゲーム

-Among Usとは
少しばかりのアクション要素が詰まった人狼ゲームで、
Among Usを知らない方がいれば、
これを機にYouTube等で実況者さんが挙げている動画を見ていただければ!

-MODとは
modificationの略でゲームに拡張機能を持たせるプログラムのことです。

-最低限必要なもの
・Unity知識 (私は0です)
・C#知識 (何かの言語触っていればいけます)
・Windows環境
・git知識
・VSCode(エディターであればなんでも良いですが、チーム内はVSCodeで統一しています)
・SteamかEpicGamesのAmong Us

ただのいちプレイヤーだった私がたまたま縁があり、
Town of Host (https://github.com/tukasa0001/TownOfHost)というMOD開発の開発に関わらせていただきました。
初めてのMOD開発と初めて触る言語(C#)とUnityで学ぶことが多く、理解しきっていない状態で日々開発しています。
しかもこのTown of Hostはホストの方だけが入れれば動作するMODという特殊なMODで独特な実装になっています。
後述のサイトとメンバーからのアドバイスでMOD開発をしているので、本職の方から見ると抜け漏れがあるかもしれませんが、ご容赦下さい。

-HarmonyPatchとは
MOD開発では、HarmonyPatch(https://harmony.pardeike.net/api/HarmonyLib.HarmonyPatch.html)というライブラリを使って、
Among Us側のメソッド呼び出しの前後に任意のコードを追加することで動作に介入します。

Town of Hostでよく登場するメソッドは以下等があります。
・ChatController.SendChat:チャットを送る時
・MeetingHud.CheckForEndVoting:会議で投票する時
・PlayerControl.MurderPlayer:キルが発生した時

-PrefixとPostfixについて
Prefixメソッドは指定されたメソッドの前に割り込んで呼び出されるメソッド。
Postfixメソッドは指定されたメソッドの後で呼び出されるメソッド。

Prefixメソッドの戻り値をboolで宣言し、falseを返すと本来のメソッドを呼び出さずに処理を終わることができます。

一例:
Town of HostにMafiaという役職があります。
Mafiaはインポスター陣の最後の一人にならないとキルができないという特性があります。。

PlayerControl.CheckMurderのメソッドはキルの直前に呼ばれるので、
このメソッドのPrefixで、return falseを返せばキルがキャンセルされます。

簡単にですが、以上です。

今回はとりあえずこんな所で終わります。
また需要があれば、「別の役職の紹介を兼ねてコード例」や「使用しているVSCodeの拡張機能の説明」といった記事を挙げようと思います。

凄く参考にさせていただいたサイト
-Among Us MOD開発について-
https://qiita.com/Koke1024/items/b22eb842b01399f5694f

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です