はじめに
この記事ではVPMを0から作って配布可能なurl,unitypackageができるまでのメモです。
VRChat Package Manager (VPM) は現在 Creator Companion のメイン機能です。VRChat SDK とパッケージの更新をサポートし、VRChat プロジェクトの作成と管理をスピードアップします。
公式サイト(DeepLにて翻訳)より
- VRChatをやっている方の多くはModular AvatarやlilToonなどをVCCから追加した経験があると思います。とても便利そうなので作ってみたいですね。作ってみましょう
- 「Package Maker」というアセットをVPMに変換する公式ツールがありますが、それを使う方法についてはここでは扱いません1
- 筆者はかなり雑な性格で(jsonの細かい設定など)色々と消しがちです。また英語もわからないため自動翻訳を通した情報に基づいた記事です。各位一次ソースを充分ご確認の上注意してご覧下さい
- この記事で作るVPMはからっぽです。なんの処理も実装しません。実装上の注意はRuntimeとEditorフォルダはルートに置く必要がある、ということくらいで、あとは普通のAsset開発と大差ないと思います
著者の環境
- Unity 2019.4.31f12
- Github Desktop 3.3.11(x64)
- ALCOM v0.1.14
基礎知識
- VPMとは(公式情報)
- VPMは、Unity PackageをVRC向けに要件追加したもの。まずUnity公式履修がお勧め
- ここによるとパッケージレイアウトに従ったファイル構造のまとまりのこと
- Unity Packageにはpackage.son(Package Manifest file)が必要。よってVPMにも必要。太字はVPM上必須項目3
- package.json に記載する情報
-
Unity標準の内容
- name … パッケージの正式名称。逆ドメイン4形式(例:nadena.dev.modular-avatar)
- version … パッケージのセマンティックバージョン
- displayName … パッケージの読みやすい名称(例:Modular Avatar)
- description … 簡単な説明
- unity … パッケージが互換性を持つ最低のUnityバージョン
- author … パッケージの作者(name, email, url)
- license … ライセンス符号又は「See LICENSE.md file」
- その他色々(気になる方は公式を読んで下さい、あまり使わなさそう)
- VPM特有の内容
- vpmDependencies … VPMの依存関係
- url … パッケージのzipファイルの直接ダウンロードリンク
- legacyFolders … 書いてあると、UnityPackage版のものが見つかったとき自動で削除5
- legacyFiles … 上のファイル版
- legacyPackages … 上のVPM版(統合などしたときに使う)
- zipSHA256 … ダウンロードしたzipの整合確認用チェックサム
- changelogUrl … パッケージの変更ログファイル(現在VCCで使われていない)
-
Unity標準の内容
- licenseは必須でないが、記載を強く推奨
- package.json に記載する情報
- 重要情報
- VPMにするには(Unity Packageとして)適切なフォルダ構造が必要
- たとえば、Root直下にEditor, Runtime, package.jsonが必須など
- package.jsonというものを作る必要があり、Unity Package・VPMそれぞれとして入力可能・必須な情報がある
- VPMにするには(Unity Packageとして)適切なフォルダ構造が必要
- VPMは、Unity PackageをVRC向けに要件追加したもの。まずUnity公式履修がお勧め
- VPMの公開(Webサイト)
- 次の手順を行うことでVPMをコミュニティパッケージとして公開することができる(詳細手順はページ下)
- 作成したVPMをgithubにアップロード
- ビルド&リリース
- Creating a Package Listing
- 次の手順を行うことでVPMをコミュニティパッケージとして公開することができる(詳細手順はページ下)
- VPMの公開(unitypackage)
- VPAIを使うことでVPMをインストールするunitypackageを作ることができる。この方法で入れたものはVCC/ALCOMを操作して導入したのと同じように管理される
ローカルVPMの作成
-
VPMの最小構成はpackage.jsonだけの形。実際にそれだけで構成されるVPMを作ってみる
-
公式からとりあえずコピー
-
自分の情報を入力
後で書きますが、下の情報はvpmDependenciesを修正し忘れていて極めて有害です。
{
"name" : "com.github.pandrabox.testvpm",
"displayName" : "Pan Test VPM",
"version" : "1.0.0",
"author": {
"name": "pandra"
},
"unity" : "2019.4",
"description" : "Hello World!",
"vpmDependencies" : {
"com.vrchat.avatars" : "3.1.0"
},
"legacyFolders" : {
"Assets\\Pan\\TestVPM": ""
}
}
{
"name" : "com.github.pandrabox.testvpm",
"displayName" : "Pan Test VPM",
"version" : "1.0.0",
"author": {
"name": "pandra"
},
"unity" : "2019.4",
"description" : "Hello World!",
"vpmDependencies" : {
"com.vrchat.avatars" : ">=3.7.0"
},
"legacyFolders" : {
"Assets\\Pan\\TestVPM": ""
}
}
-
(感想)ローカルを作るだけだったら簡単7だった
-
(感想)普段使うパッケージを全部依存関係に設定しただけのパッケージを作っておいたらすごく便利そう
legacyFoldersのテスト
(番外編)legacyFoldersのテスト
ここから公開設定
ビルド&リリース
ファイルをgithubにあげて配布可能な形(unitypackage)にする手順です
- Releace用のworkflow8をダウンロード
steps:
# Ensure that required repository variable has been created for the Package
- name: Validate Package Config
id: config_package
run: |
echo "configPackage=true" >> $GITHUB_OUTPUT;
# Build and release the Package
# If the repository is not configured properly, this job will be skipped
build:
needs: config
runs-on: ubuntu-latest
permissions:
contents: write
env:
packagePath: .
- Github DesktopでAdd local repository11
- 作業フォルダをいれてcreate a repository
- 適当に設定してCreate repository
- Publish
- View on GitHub
- Actions
- Build Releace → Run workflow → Run workflow
- しばらく(数分間)待ってチェックマークになれば12成功
公開サイトの作成
リリースしたものから最新版を自動的にダウンロードするリンクを作る手順です
-
テンプレートを開く
-
適当に名前をつけてCreate repositoryする(配布時この名前がみえます、これは大きなフォルダのような概念で、今後VPMを公開するときに使われます)
-
Actionsを見ると作業している(source.jsonを更新すると自動で作業が開始される)ので緑チェックになるのを待つ
-
このurlを公開することでVPMを公開することができる
unitypackage化
url公開でもVPMは公開できるが、同等の動きをするすごいunitypackageが簡単に作れるという手順です
- VPAIを開く
- 下の方に移動してWeb toolを開く
- 適切なjson url, インストールするpackage name, バージョンを入力する
- 左下のを押す。unitypackageがダウンロードされる
- このunitypackageを入れることでVCC/ALCOMからVPMを導入したのと同じ結果を得ることができるので、これをBooth等で配布する
このあと
初回アップロードできましたが、更新の仕組みがまだできていません。作りましょう
asmdef
Editor,Runtimeそれぞれにasmdefというファイルを作る必要があるらしい
-
サンプルをダウンロードして開くと2019環境と認識されるのですがC#が2022環境で作られていて、何も解らなかった… あと個別のプロジェクトがpackageフォルダの2階層上で作られてしまって気持ち悪かった… ↩
-
この記事は中身を実装しないのでUnityのバージョンはほとんど関係ないです ↩
-
太字は必須と公式サイトには書いてあるが、実際にはmailとurlは要らない気がする。 ↩
-
「<domain-name-extension>.<company-name>」で始まることとされている。小文字英数字6、ドット、ハイフンのみ。筆者はドメインを持っていないのでcom.githubをお借りしました(他にそうしている方もいたので…) ↩
-
これを設定してあれば配布アセットに同梱しつつ、VCCに登録している人はそっち優先ということができる。すごく便利!(後日追記:これあんまり過信したらだめかもしれない) ↩
-
なぜかVRC公式サンプルには大文字が入っていますが、大文字はだめです ↩
-
package.jsonの仕様を書いてあるページを見つけるのに2日かかった。公式、ちゃんと読もう。 ↩
-
公開するにはビルド、タグ付け、リリースと言う作業をする必要があり、大変。これを入れておくと自動でやってくれる。 ↩
-
本来githubの変数を使ってpackageを選択しつつ正しいものか判定する処理があるのですが、面倒なので消します… ↩
-
元々のテンプレートがなんでpackageの上で配布する仕様なのかとても謎 先駆者の方々をみるとだいたい配布するpackageそのものをリポジトリにしているのでこの変更はほぼ必須 ↩
-
Newでやると作業フォルダの中に同名のフォルダが作成されるのでこの手順でいつもやっている。正しいんだろうか ↩
-
ならなかったらymlの編集を何かしら間違えていると思われるので、確認してみる ↩