nazo6 notememo

Oculus Quest版Beat Saberのmod開発について調べたこと

作成:2020/12/16

更新:2020/12/16

きっかけ (2020-12-16)

https://github.com/riku1227/BSQuest-QuestDarthMaul
こちらのmodをbeatsaberの最新版に対応させたいと思った(なお結局できてない模様)
だが基本的なことはちょっとわかったのでまとめる

準備 (2020-12-16)

PCに入れておくもの

  • beatsaberで使用されているバージョンのUnity(現在最新バージョンの1.13では2019.3.15)
  • Android SDK (というかadb)
  • Android NDK
  • SideQuest (wifi adbを使うため。別になくてもいい)
  • 好きなエディタ(vscodeを使ったけどもっといいのがあるのかな・・・?)

Questに入れておくもの

  • BMBF導入済みbeatsaber (あたりまえだけど)

(2020-12-16)

基本的にはsc2adという方のgithubを見るのが良い。大体この方が作ったものを使う。

ライブラリ

  • beatsaber-hook

GitHub - sc2ad/beatsaber-hook: poc for oculus quest beatsaber function hooking (il2cpp)

poc for oculus quest beatsaber function hooking (il2cpp) - sc2ad/beatsaber-hook

github.com

beatsaberが何か処理をする前に好きな動作を注入できる要となるライブラリ
  • modloader
    beatsaber-hookをビルドするのに必要だったけどbeatsaber-hookのバイナリを拾ってくればいらないはず?
  • BeatSaber-Quest-Codegen

GitHub - sc2ad/BeatSaber-Quest-Codegen: A repo for Quest Il2Cpp auto-generated libraries.

A repo for Quest Il2Cpp auto-generated libraries. Contribute to sc2ad/BeatSaber-Quest-Codegen development by creating an account on GitHub.

github.com

beatsaber-hookではメソッドを呼び出すのに文字列で呼び出さないといけなかったりするがこれを使うといい感じに呼び出すことができる。自動生成されているらしい。
こちらのバイナリにbeatsaber-hookが付属していたのでbeatsaber-hookをビルドする必要はない、はず。まだ使っていない。

作る (2020-12-16)

まずどこかからひな形としてプロジェクトを持ってくるのがよい。自分は上のmodのプロジェクトを使ったけどどのmodも同じような感じだからどこかにテンプレートがあるのかも?
主に手順としては
  1. ndkpath.txtにndkのパスを記述
  2. bmbfmod.jsonをいい感じに書き換える
  3. ライブラリのバイナリとヘッダーファイルをextern/以下に入れる
  4. Android.mkをいい感じに書き換える
  5. src/main.cpp以下にいろいろ書き換える
Android.mkは正直よくわかってないがとりあえず以下のようにした
Android.mk
## ライブラリを追加
include $(CLEAR_VARS)
## ライブラリの名前
## ヘッダーファイルがあるところ?
## バイナリのパス
include $(PREBUILT_SHARED_LIBRARY)

## 略
## 最後のセクションっぽいところに
LOCAL_SHARED_LIBRARIES += beatsaber-hook_0_8_4 #先ほど指定した名前

LOCAL_CFLAGS += -DVERSION='"1.0.1"' -DID='"アプリ名"' -I"libil2cppのパス(例: C:\Program Files\Unity\Hub\Editor\2019.3.15f1\Editor\Data\il2cpp\libil2cpp
あとは気合
VSCodeのincludePathの指定がよくわからない