2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VPM入門

Last updated at Posted at 2024-08-31

はじめに

この記事では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開発と大差ないと思います

著者の環境

基礎知識

  • 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で使われていない)
      • licenseは必須でないが、記載を強く推奨
    • 重要情報
      • VPMにするには(Unity Packageとして)適切なフォルダ構造が必要
        • たとえば、Root直下にEditor, Runtime, package.jsonが必須など
      • package.jsonというものを作る必要があり、Unity Package・VPMそれぞれとして入力可能・必須な情報がある
  • VPMの公開(Webサイト)
    • 次の手順を行うことでVPMをコミュニティパッケージとして公開することができる(詳細手順はページ下)
  • VPMの公開(unitypackage)
    • VPAIを使うことでVPMをインストールするunitypackageを作ることができる。この方法で入れたものはVCC/ALCOMを操作して導入したのと同じように管理される

ローカルVPMの作成

  • VPMの最小構成はpackage.jsonだけの形。実際にそれだけで構成されるVPMを作ってみる

  • 作業フォルダとjsonの作成(普段Unityで使っているフォルダに作った)
    image.png

  • 公式からとりあえずコピー
    image.png

  • 自分の情報を入力

後で書きますが、下の情報はvpmDependenciesを修正し忘れていて極めて有害です。

package.json (例)
{
    "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": ""
    }
}
  • 読み込んでみる
    image.png

  • できた
    image.png

  • プロジェクトに入れてみる
    image.png

  • 怒られる。SDKの依存関係設定がだめらしい
    image.png

  • MAに合わせてvpmDependenciesを修正

package.json
{
    "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": ""
    }
}
  • 一度パッケージを管理から外して、もう一度管理にしてプロジェクトにいれてみる。今度は通った
    image.png

  • packageフォルダ内にVPMが読み込まれている
    image.png

  • UnityのPackageにも準拠しているのでPackageManagerにも表示される
    image.png

  • (感想)ローカルを作るだけだったら簡単7だった

  • (感想)普段使うパッケージを全部依存関係に設定しただけのパッケージを作っておいたらすごく便利そう

legacyFoldersのテスト

(番外編)legacyFoldersのテスト
  • jsonでlegacyFoldersに設定したフォルダを作ってみる
    image.png
  • 起動する
    image.png
  • 勝手に消え…ない。あれ?
    image.png
  • レガシーがある状態でVPMを読もうとすると削除判定があるみたい
    image.png
  • 今回は空っぽだから問題はないけれども、VPM入れてからレガシーを入れると問題が起きるかもしれない?

ここから公開設定

ビルド&リリース

ファイルをgithubにあげて配布可能な形(unitypackage)にする手順です

  • 作業フォルダの下に.github/workflowsフォルダを作成し、その中にダウンロードしたファイルを入れる
    image.png
  • 次を参考に、変数の確認なし9、packageフォルダをルート10に変更する
release.yml
    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
    image.png
  • 作業フォルダをいれてcreate a repository
    image.png
  • 適当に設定してCreate repository
    image.png
  • Publish
    image.png
    image.png
  • View on GitHub
    image.png
  • Actions
    image.png
  • Build Releace → Run workflow → Run workflow
    image.png
  • しばらく(数分間)待ってチェックマークになれば12成功
    image.png

公開サイトの作成

リリースしたものから最新版を自動的にダウンロードするリンクを作る手順です

  • テンプレートを開く

  • image.pngを押す

  • 適当に名前をつけてCreate repositoryする(配布時この名前がみえます、これは大きなフォルダのような概念で、今後VPMを公開するときに使われます)
    image.png

  • Setting → Pages → BuildのSourceをGitHub Actionsに設定
    image.png

  • Code → source.json
    image.png

  • 編集ボタンを押す
    image.png

  • 最低限次を設定する
    image.png

  • Actionsを見ると作業している(source.jsonを更新すると自動で作業が開始される)ので緑チェックになるのを待つ
    image.png

  • Settings → Pages → Visit site
    image.png

  • 公開サイト完成
    image.png

  • このurlを公開することでVPMを公開することができる

unitypackage化

url公開でもVPMは公開できるが、同等の動きをするすごいunitypackageが簡単に作れるという手順です

  • VPAIを開く
  • 下の方に移動してWeb toolを開く
    image.png
  • 適切なjson url, インストールするpackage name, バージョンを入力する
    image.png
  • 左下のimage.pngを押す。unitypackageがダウンロードされる
  • このunitypackageを入れることでVCC/ALCOMからVPMを導入したのと同じ結果を得ることができるので、これをBooth等で配布する

このあと

初回アップロードできましたが、更新の仕組みがまだできていません。作りましょう

asmdef

Editor,Runtimeそれぞれにasmdefというファイルを作る必要があるらしい
image.png

  1. サンプルをダウンロードして開くと2019環境と認識されるのですがC#が2022環境で作られていて、何も解らなかった… あと個別のプロジェクトがpackageフォルダの2階層上で作られてしまって気持ち悪かった…

  2. この記事は中身を実装しないのでUnityのバージョンはほとんど関係ないです

  3. 太字は必須と公式サイトには書いてあるが、実際にはmailとurlは要らない気がする。

  4. 「<domain-name-extension>.<company-name>」で始まることとされている。小文字英数字6、ドット、ハイフンのみ。筆者はドメインを持っていないのでcom.githubをお借りしました(他にそうしている方もいたので…)

  5. これを設定してあれば配布アセットに同梱しつつ、VCCに登録している人はそっち優先ということができる。すごく便利!(後日追記:これあんまり過信したらだめかもしれない

  6. なぜかVRC公式サンプルには大文字が入っていますが、大文字はだめです

  7. package.jsonの仕様を書いてあるページを見つけるのに2日かかった。公式、ちゃんと読もう。

  8. 公開するにはビルド、タグ付け、リリースと言う作業をする必要があり、大変。これを入れておくと自動でやってくれる。

  9. 本来githubの変数を使ってpackageを選択しつつ正しいものか判定する処理があるのですが、面倒なので消します…

  10. 元々のテンプレートがなんでpackageの上で配布する仕様なのかとても謎 先駆者の方々をみるとだいたい配布するpackageそのものをリポジトリにしているのでこの変更はほぼ必須

  11. Newでやると作業フォルダの中に同名のフォルダが作成されるのでこの手順でいつもやっている。正しいんだろうか

  12. ならなかったらymlの編集を何かしら間違えていると思われるので、確認してみる

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?