個人的VRChatアバター管理方法

2022年7月13日

VRChatアバターを楽に管理する方法をまとめた記事です
調べたら色々出てきますが情報が古かったり自分のやり方が楽だと思うので紹介します
というか検索して出てくるやつは当たり前のようにVSCode使ってたりSourceTreeやGitExtensionsを使用しているので思いっきりプログラマー向け

出来るだけ分かりやすく記述したつもりですがUnity中級者以上向けの記事となります

※分かりやすく解説しすぎた故に正確性に欠けた表現があります

はじめに

多くのVRChatterはバージョン管理とアバター管理をプロジェクト毎に行っているためUnityのプロジェクトがかなりの容量を占めていると思います

この記事ではバージョン管理をGit、アバター管理をシーンで行う方法を紹介します
また、Githubを使ったバックアップ方法とExpressionやPlayable Layersを参照する方法を使った保守性の高いアバター管理方法についてもまとめています

この記事に書いてあることが全てではありません 難易度の高いものがあったりするので参考程度に見てください 自分はこの方法でアバターを管理しています

特徴

  • Gitでバージョン管理 (Gitの説明については後述)
  • ブランチは最低限
  • 1つのプロジェクトで管理するアバターは複数
  • アバターや衣装違いはシーンごとに管理 (Expression Menuでは着替えない)
  • 使用するソフトはUnityのみ
  • アバターの数が多くてもシェーダーのバージョンを最新に保ちやすい

環境

  • Unity 2019.4.31f1
    日本語化済みなので日本語化済み前提での指示で解説している箇所があります
  • VRChat SDK 3.0.9

Gitについて

そもそもGitとは?

アバターのバックアップを取る際に数GBもあるプロジェクトファイルをコピーしていませんか??
容量を食わず簡単にバックアップを取れる仕組みがgitです
主にプログラミングでバージョン管理や共同作業を円滑に行うために使用されます

Gitのインストール

インストーラーをダウンロードしてセットアップを完了して下さい

We bring the awesome Git VCS to Windows
gitforwindows.org

Github for Unityの導入

GitHub for Unity をインポートします
Unity上でGitまたはGithubを扱うためのアセットです

The GitHub Workflow with git LFS and file locking support, all within Unity.
unity.github.com

インポートしたら ウィンドウ から Github を選択します

ボタンを押して Initialize (初期化) します

Changes タブを開くと差分を確認できます All を押して全てのファイルにチェックを付けたあとに Commit summary import Github for Unity と入力し Commit to [master] をクリックします

この作業をコミットと呼びます 頻出する単語なので覚えておいてください 作業中に間違えてもとに戻したいときはコミットした箇所まで戻ることが出来ます

Commit summaryCommit description には何を入力してもいいですが後日見返しても分かるようなものにするのをオススメします もちろん日本語でも構いません

コミットするタイミング

  • アバターに機能を追加したとき
  • アバターの機能を変更したとき
  • パッケージをインポートしたとき

コミットはかなり頻繁に行って構いません

また、シーン上の変更をコミットしたい場合はコミットする前に ファイル から 保存 するのを忘れないでください

元に戻す

History タブから戻りたいコミットを右クリックして Revert を押します

簡単でしょ?

ブランチについて

Gitにはブランチという機能がありますが共同管理する訳でもないし自分用のプライベートなリポジトリなので使用する意味があまりないです
また、Unity上で使用した場合、切り替えに時間がかかったりするので使うのはオススメしません

慣れたら開発用と本番(アップロード)用に分けたら良いかも (この記事では解説しません)

自分のはかなり冗長な構成になっていてあまりオススメできる状態じゃない…

Githubについて

そもそもGithubとは?

Gitをアップロードするサイトです 現在はMicrosoftが運営しています
主にフリーソフトウェアの開発や公開に使われます

第三者にアバターファイルを公開することを規約で禁止しているアバターだったり二次配布が禁止されているツールを使用している場合は他人に見られない設定でアップロードすることも出来ます

万が一、PCが壊れてもGithubにアップロードしておけば復元することが出来ます

ログインする

アカウントを持っていない人はアカウントを作成します
中二病な演出が流れます

GitHub is where people build software. More than 94 million people use GitHub to…
github.com

Githubのタブの右上あたりに Sign in とあるので押します
UsernameとPasswordを入力してもいいですが何故かログイン出来ないことがあるので下の Sign in with your browser をクリックします

ブラウザが開いて自動でログインされるはずですが出来ない人はこの記事を読んで下さい

GitHub for UnityでGithubにログインしようとするとトークンの検証中にエラーが発生しましたと表示される原因と対処法 原因 2021年から存在す…
blog.yuki0311.com

Github for Unity、非常にバグが多い

リポジトリを作成する

リポジトリとはUnityでいうところのプロジェクトみたいなものです

このサイトにアクセスしてリポジトリを作成してください

GitHub is where people build software. More than 94 million people use GitHub to…
github.com

Repository name に分かりやすい名前を入力して(日本語使用不可) Private にチェックマークを付けるのを忘れないでください
Private にチェックマークを付けると第三者が見れなくなります

Create repository を押せばリポジトリを作れます

リモートオリジンの設定

Github上のリポジトリのURLをコピーします 下記のようなヤツです
https://github.com/ <ユーザー名> / <リポジトリの名前>

UnityのGithubタブのSettingsタブを開いてRepository ConfigurationRemote: originに先程コピーしたURLを貼り付けます
その後、Save Repositoryを押すのを忘れないでください

Pushを押せばGithubにコミットがアップロードされFetchを押せばGithubからダウンロードします
Pullはどっちもやります
エラーが出るならオリジンの設定が間違ってます

シーンについて

Unityにはシーンという便利なものがあります これは絶対に活用したほうが良いです

ステージ単位でアバターを管理するとマテリアル、シェーダー、Expression Menuの共通化などを行うことができ面倒なパッケージのインポートも1回で終わります

単にシーンで管理するだけでも良いですがここでは共通化についても解説します
共通化は少し難易度が高いかもしれません

ファイルから新しいシーンを選択するとシーンを作ることが出来ます
保存するのを忘れないでください ファイルから保存を選択すると保存できます
同じフォルダに入れて管理するのがおすすめです

インポートするときの注意

アバターや衣装のパッケージに付属しているシェーダーは絶対にインポートしないでください
インポートする際にチェックマークを外してください

そして、Liltoonの最新バージョンをインポートしてください
(別にLiltoonじゃなくても良いですが一番オススメです)

インポート後、マテリアルエラーが出た場合はマテリアルにシェーダーを設定し直してください
調べたらすぐ出てきます

ベースとなるアバターを用意する

要するに全裸でExpressionやPlayable Layersが設定済みの機能豊富なアバターを作ります

それとデフォルト衣装のボーンも抜いてください (簡単に抜くツールがあったら誰か教えて欲しい)
切実にモデラーの人には全裸のunitypackageを同梱してほしい

Expression Menuやシェーダーを変更する場合は全てベースのアバターを使って行い着替え差分のアバターでそれを参照させます

小物、アバターペン、コライダージャンプ、Radial Inventory、ごろ寝システムは全てベースとなるアバターに導入します

シーンを保存するのを忘れないでください(3回目)

差分アバター独自の小物を出し入れする

衣装付属の小物などの表示非表示を切り替える方法です

差分アバターに小物の出し入れギミックを実装したいのであればこれは先にやって下さい

ベースとなるアバターに空のオブジェクトをたくさん設置します
その空のオブジェクトをRadial Inventoryなどを使って表示非表示を切り替えられるようにします

差分アバターに先程作った空のオブジェクトの子に表示非表示を切り替えたい小物を配置します
インスペクターに Position ConstraintRotation Constraint またはその両方を設定してボーンに追従するようにします

複雑なギミックを実装する場合はこの方法では出来ないのでExpressionを分ける必要があります

差分アバターを作る

先程作った、ベースのアバターが入ってるシーンをコピーします
ファイルから別名で保存を選択するとシーンを別名で保存することが出来ます これは実質的なコピーです

分かりやすい名前をつけてください yukataとかparkaとか服の名前が良いと思います

新しく衣装をインポートしていつも通り着替えてください
付属しているシェーダーは絶対にインポートしないでください

着替えるツールは個人的にこれが一番好き

DynamicBoneを必要としないバージョンを追加しました。 PBまだ元気に働いています
shatoo.booth.pm

この時点で気がついた人もいると思いますがExpression、Playable Layersや素体のマテリアルがベースとなるアバターと共通なので設定を変更すると他のアバターも同じように変わります

これがシーン管理で共通化したときの強みです

差分アバターの方を変更するとツールによっては壊れたりする場合があるので注意

Quest対応

同様にベースを作って差分を作成します

Quest対応させたいPC版アバターのインスペクターにあるPipeline ManagerBlueprint IDをコピーしてQuest対応版のアバターにAttachするだけです

シーン管理、共通化の問題点

  • プロジェクトファイルの肥大化
    着替え差分ではなく全く違うアバターはプロジェクトを分けたほうが良いかも
  • 導入できるギミックに制限がある
    これが唯一のデメリットかもしれない
    導入したいアバターに新たにExpression Menuを作成しSubMenuでベースのアバターのExpression Menuを参照させれば見かけ上は表示非表示になるがFXLayer上には残るのでオススメしません
    複雑なギミックをこの方法で管理するのはあまりオススメしません
モバイルバージョンを終了