Java版マイクラのMODでロボを作ってみてるよ #1 歩く編:学んだこと

↓の製作過程と、そこで学んだ事を書いていきます。

minecraft-hourouki.hatenablog.com

細かい手順を書くのはめんどくさい既に素敵な情報サイトが色々あるので、ざっくり大まかな流れとまとめだけ。

※注意事項1:時系列でシリアルにやってる風に書いてますが、実際は作ってる最中に行ったり来たりしています。ご自分でやるときは、まずほんとに簡単なプロト(モーションもなんもない四角いモデル)で、マイクラに組み込んで動かすところまで試してから、本格的に作るのを始めた方がよいと思います。

※注意事項2:各公式の手順書にリンクを張ってますが、そのままやっても動かない時がちらほら。状況に応じて柔軟に対応願います(ひどい)

まずはMOD界隈の様相を調べてみる

先にマイクラとかMODの構造の大枠を掴みたくて、調べ始めました。
ただ、結構いろんなところに色んな情報が散在しておる…。
エントリポイントとしては↓のスライドが助かったっす。

www.slideshare.net

ざっと分かったのは

①マイクラはクライアント/サーバ方式

  • イクラの構造は大きくサーバとクライアントに分かれる
  • ソロプレイするときとマルチプレイするときで構成が変わる
  • MODを作るなら、その辺気を付けながら作る必要がある

②根幹になる前提MOD(FabricとかForgeとかIrisとか)

  • イクラに処理をインジェクトする部分を受け持ってくれる
  • 個々のMODがそれぞれ勝手にマイクラに処理を追加すると、開発が超大変&MOD間の整合性が大変な事になる
  • この辺を受け持ったり、簡単にできるようにしてくれる、共通基盤的なもの
  • 根っこにあるのがFabricとかForge
  • その上で動いて描画系とかの基盤になるのがIrisとかOptiFine
  • MODを作ろうとしたら、この前提MODさん達にお世話になる

③MODも実現したい事によってパターンが色々ある

  • ブロックのテクスチャみたいな、データだけでよいもの
  • MOBみたいな、データ+ある程度の処理が必要なもの
  • ゲームの操作とか動作を改変するもの
  • ゲームの描画を改変するもの
  • 他のMODに組み込まれる共通部品的なもの、などなど

④MOD開発ツールの組み合わせは大きく2通り

  • MCreator(統合開発環境)+アセット製作ツール
    • GUIで部品を組み合わせて色々作っていくパターン
    • Javaのプロジェクト+コードを自動生成してくれる
    • 凄い簡単、だけど自由度はちょっと低い
  • JavaIDE統合開発環境)+アセット製作ツール
    • 普通にJavaで組むパターン
    • IntelliJとかEclipseみたいなIDEを使う
    • 自由度高い、だけど色々めんどくさい

上記の②、③によって、どの組み合わせがいいかを考える

⑤アセット製作ツールはMC用も汎用も色々ある

  • MC特化のツール:BlockBench
    • ブロック、スキン、MOBとかのアセットを作れる
    • 3Dモデルとかモーション、テクスチャ、モーション、など
    • Blenderとかの専門ツールで作ったものの取り込みもできそう
  • 汎用の専門ツールも組み合わせるとよさそげ
    • 3Dモデル:Blederみたいなモデリングツール
    • テクスチャ:Gimpみたいな2D画像ツールとか

アセットを作る:BlockBench

アセット(3Dモデルと、テクスチャと、モーション)を作っていきます。

今回、GeckoLibという、モーション周りの前提MODがすっごいよかったので、それで作りました。BlockBench、MCreator、Java手組の全てに対応してて、ドキュメントもいい感じ。

参照ドキュメント

github.com

モデルを作る

ボクセルをガチャガチャやって気合でモデルを作ります。
立方体しか作れないのでめっちゃきっつい…。特にカーブっぽいとことか斜めってるとことかえらい時間かかった…。

今後、モーションを外部からとってくる事とかを考えると、ボーン構造もHumanoid型に寄せとくとよさそう。

Humanoid型の補足サイト

vrm.dev

テクスチャを作る

ちゃんとしたのは今後作ってみるとして、ざっくり色分け。
BlockBenchの塗りつぶしツールで気合で塗りつぶしていく。

モーションを作る

これも手付けなので超きつい…。気合でちょっとずつ作っていきます。

GeckoLibはキーフレームという、ポイントポイントの姿勢だけ設定すると、あとは自動で補完してくれる機能があります。

さらに、ファイルフォーマットが他の形式と似てる気配がするので、BVHみたいな一般的な形式から変換できるツールとか組めば、色々楽になりそう。

MODに組み込める形でExportする

手順は割愛。

アセットを組み込んだMODを作る

👆で作成/Exportしたアセットを組み込んで、MODを作りこんでいきます。
MCreatorで作る場合と、IntelliJとかを使って手組Javaで作る場合でやり方が違います。

MCreatorの場合

↓の手順通りやればさくっといけました。MCreatorしゅごい…

MCreatorの環境構築手順

mcreator.net

GeckoLib MCreator Pluginの環境構築手順

mcreator.net

乗り物作成

www.youtube.com

小学生ですって…っ!すごい…!
(小学生の作った動画で勉強して物を作る中年の図…)

スクショ

ただちょっともやもやもあって、自分が使ったMCreatorのバージョンだと、デフォルトではForge系にしか対応してなかったんですよね…。

実際に影MODバリバリの環境で動かそうとしたときに、最近の影MODは大体FabricがQuiltが主体で、バージョン合わせ全然できないっていう…。

一応MCreatorのプラグインでFabricとかQuilt形式のMOD出力に対応してるのもあるっぽいんですが、一部しか対応してなかったりバージョンが古かったりでうぐぐぐぐな状態。

IntelliJの場合

で、結局諦めてJava手組することにしました。自分はFabricのMODを色々使ってたので、Fabric版にしました。

Fabricの環境構築手順

fabricmc.net

※注意:他のサイトとかリポを参考にした方がいいかもしんない…。詳細は後述。

GeckoLib on Fabricの環境構築手順

github.com

乗り物作成

既にもっとすごいロボ系MOD作ってる人がいたので、そのお方のコードでお勉強。

gitlab.com

スクショ

こっちはこっちで環境構築がきつかった…w

自分が使ったバージョンだと、公式のサンプルプロジェクトが少し特殊な構成してたり、GeckoLibのドキュメントは前提とするフォルダ構成が違ったりと、えらい大変だった。

一番わからんかったのが、MCのclient系jarがクラスパスに入らない問題で、↓を見つけてやっと解決。IntelliJ、Gradle弱者すぎて辛い…w

https://www.reddit.com/r/fabricmc/comments/1bq89d8/comment/ldak4wm/

イクラで動かす

実際に動くと感動しますね…!!

今回学んだこと

  • ざっくりのMOD界隈周りの土地勘:上述
  • ENTITY(MOBとか乗り物とか武器とか)を追加するときのざっくりの流れ:上述
  • 公式ドキュメント大事。当たり前ですが…
  • コーディング周り
    • 自分が実装してるコードが、どのコンポーネントの機能を使ってるのか意識するの大事
    • GeckoLibの世界線なのか、Fabricの世界線なのか、マイクラ本体の世界線なのか、などなど
    • これによって困った時に調べる先が変わる
  • 困ったとき
    • コミュニティは英語界隈が活況
    • GitHubで似たようなMODのコードを眺めるのも参考になる
  • 早期/常時結合は大事、とても大事
    • 今回、実際の影MOD環境に持ち込もうとして初めて、MCreator方式だと色々しんどいことが判明しました
    • そっから路線変更してFabricで作り直しっていう
    • 作成中は開発環境にひっついてる素の環境でしか動かしてなかったんすよね…
    • やっぱ最初に最後まで疎通させないとあかんなぁ、と再認識…。
  • MCreatorはお手軽でよい
    • 簡単なものならこれで作っちゃうのが楽そう 
    • コードスニペットとして使うのも凄いよさそう
    • ただ、Fabric対応が若干怪しい…
  • BlockBench使いやすい
  • モーション周りはGeckoLibがすっごい充実
  • モデリングするのは大変
  • モーションを作るのも大変
  • 最新の3DCG界隈すごいやばい

もうちょい調べてみたい事

  • イクラのアーキ
    • 特にサーバとクライアントの関係性周り
  • Fabricのアーキ
    • 本体のどこに何をインジェクト・フックしてるのか
    • 描画系はどこ見たらいいのか。
    • Irisとかとの機能分担がどうなってるのか
  • Mixin
    • 今回全然さわらなかった世界
  • 3D周りのアセットをもっと楽に作るやり方
    • モデルをBlenderとかからインポート
    • アニメーションを同上
    • テクスチャを生成AIで自動生成

おまけ

最初に動作確認で作ってた仮ロボ君。

都庁ロボと名付けました(「岸和田博士の科学的な愛情」、面白いのでお勧め)