見出し画像

VRChatの範囲でUnityを学ぼう!

アバターのアップロード、ギミックの制作、ワールドの制作…VRChat(またはそれに準ずるアレコレ)において、私たちはUnityをほぼ確実に使う必要があります。

アバターに関して言えば、スマホアプリから有料で直接VRChat向けにアップロードできるアバター制作アプリもあったりします。
これを使えばなんとUnity要らずでアバターが上げられる!
※無論、Boothで展開されているアバターと比べると自由度などは低いですが…「誰でもアバターが持てる」という意味ではこれはこれでアリかと

「ライセンスを獲得した企業がワールドクリエイト用のアプリを展開したら
更に面白いことになりそうだよね」

ですがぶっちゃけ、「Unityの用語で(よく聞くけど)分からんもの」は結構たくさんあると思います。
ここではそれについてVRChatで取り扱われやすい範囲に絞ってザックリ解説していこう、そんな感じのnoteとなっております。

なお、キチンと詳しい情報はUnityの公式ドキュメントを読むのが良いです。
ここではザックリで説明する感じなので。


Unity起動編

プロジェクト

とりあえずUnityを開いて作るように必ず要求されるやつ

とりあえず、作業にはプロジェクトが必要になります。
このプロジェクトと呼ばれるものは、いわば作業机のようなものとなります。

例えば「アバター毎にプロジェクトを分けてるんだ~」というタイプの方は、言ってしまえば「プラモデル毎に作業机を分けて作業している」というイメージになります。

ちなみに、「同じデータ(アニメーションファイルとか)を数多くのアバターで使い回したい」という場合はプロジェクトをまとめるのも一つの手ですが、可能な限りプロジェクトは用途に応じて小分けにしたほうがUnityの起動が早くなります。

SSD環境ならともかく、HDD環境ではプロジェクトが膨大になると20分くらい起動読み込みに時間が掛かることも…

「まあ、このレベルまで行くのは100GBとか行っちゃうケースなので…普通は平気なはず」

エクスプローラーで覗く、プロジェクトの中身

プロジェクトの実態はこちら。

とりあえずは以下の認識で良いと思います。

・Assets:みなさんがインポートしたものは基本的にここに入ります
・Library:インポートしたものをビルドしたものがここに入ります
・Logs:なんかログを吐きます。
・Packages:Unity内のパッケージの取り扱い方とか書いてます。 ※最近はこちらにインポートしたものが入るケースも多いです。
・ProjectSettings:プロジェクト上の環境設定とか保管してます

基本的に気にするべきはAssetsフォルダだけで、他は「どこかにプロジェクトのバックアップ取っておきたいな~」という時にまとめてコピーしておくくらいの認識でだいたい大丈夫です。

プロジェクト立ち上げ編

やってきました、いつもの画面

ヒエラルキーやインスペクターについて

みなさんが保存しているものはあくまで「シーンファイル=ヒエラルキー内の情報」です。
覚えておきましょう

ヒエラルキーは「シーン(画像のカメラのアイコンが表示されているところ)」に置いてあるオブジェクトを管理している領域となります。

現在は「SampleScene」というシーンを開いている、という状態なのが分かります。
*マークは「更新が入ってるよ(保存できる状態だよ)」の合図です

そして、なんか「オブジェクトの位置」を調整したり、「マテリアルの設定」を変えたり色々できるのが「インスペクター」です。

今は「フォーシー」のオブジェクトを選択しているため、
そのオブジェクトの詳細情報(インスペクター)が見れます

そして、「ヒエラルキー」と「各オブジェクトのインスペクター」の内容が反映されるのが「シーン」になります。
※正確には更に細かいのがあるけれど、そういうイメージでお願いします

ヒエラルキー:「カメラ」と「ライト」と「フォーシー」
インスペクター:<各々設定が行われた>
シーン:その結果が表示される

つまるところ基本的な作業は「ヒエラルキー」と「インスペクター(詳細設定が見れる場所)」で行い、それを「シーン」で確認する、というフローになります。

シーンファイル

ちなみにシーンファイルとはこういうもの。
Unity上でUnityマークが付いているものがシーンファイルです。
よく分からずダブルクリックしないようにしましょう。

たまに購入したアバターによってはこのファイルがインポートされることがあります。

このファイルは「作業をしたヒエラルキーをそっくりそのまま読み出す(保存できる)」ものになります。
別記事で説明しているプレハブとほぼ同じものです。

ただ、プレハブと異なる点は「このファイルをダブルクリックするだけ」で「アップロードがそのまま可能なヒエラルキーの状態」に持っていけるところが強みです。
なので、「買って読み込んで改変、そしてすぐアップロードできる!」というタイプのワールド系アセットはこちらで提供されていることも多いです。

なお、VRChat界隈においては「ダブルクリックしたら今までの改変が全部吹き飛んだ(´;ω;`)ツライ」という被害報告の方が多く、便利さは中々伝わっていない…
※自分でシーンファイルを作っていない(別名で保存をしていない)場合は「SampleScene」を探してダブルクリックすれば大体は蘇生できます。

「そのためVRChat用前提=プレハブで設定済データを配布、
それ以外でリリースされてるモデル=シーンファイルで配布
みたいなイメージがなんとなくあります」

ちなみに、Unityを終了する際に見かけるかもしれない下記のエラーメッセージは「このシーンファイルを保存してないよ?(ヒエラルキーの内容消えちゃうよ?!)」という警告になります。

※ちなみに、VRCSDKのアップロード時は自動で保存されるっぽい

他のファイルってどうなってるの

「この手のファイルって操作して保存しないと…」
「編集した時点で保存されてるよ」

「シーン上に配置したデータ」の設定情報は「シーンファイル」に記録されますが、その他の「マテリアル」「EXメニューなどのアレコレ」「アニメーターコントローラー」などのファイルは編集時点でそのまま保存されます。

マテリアルなどのデータは「3Dモデルに適用されているだけ」で、「ヒエラルキー上の3Dモデルそのものに保管されているわけではない」ため。
もちろん、「別のマテリアルをアバターに当てる→シーンを保存せずUnityを終了」とした場合は「シーンファイルが保存されてないため」「マテリアルは当て直し」となります。
※マテリアルの内容そのものは保管される

「ヒエラルキー上の設定=ちゃんと保存しないとダメ
それ以外=だいたい自動で保存されてる
というイメージだと楽かも」

ただし、一部の「FBXファイル」や「テクスチャ(画像)ファイル」については下記画像のような「Apply」ボタンを押さないと保存されません。

そもそも「Apply」などをしないで切り替えようとすると
次の画像みたいにエラーメッセージが出てくる。
「Apply」なら適用、「Revert」なら元に戻す
「Cancel」は設定を見直せます。

なお、どうやら(?)Unityがクラッシュした場合にはまた話が別なようで、色々変えた設定がクラッシュ前に巻き戻っていたりします。
※ここら辺は正直もう…分かりません…

プロジェクト作業編

スクリプトのあれこれについて

Unityは仕様としてプロジェクト内の全てのデータを読み込んでから動作します。

これは前述の「3Dモデルのデータ」「マテリアル」はもちろん、「便利な改変ツール(を動かすために必要なスクリプト)」など全てのデータを読み込んでおり、最終的にUnity上に全てを展開します。
※VRCSDKもUnityに読み込んでもらってメニューバーに表示されます

ここに表示されているモノも含め、全部Unityちゃん自身が解釈してくれてるんです

この仕様のため例えば「スクリプト同士で喧嘩してしまった」「このスクリプトが欲しがっている別のスクリプトが存在しない」「ちゃんと読み込めないスクリプトをインポートした」といった事態が発生するとUnityは「その時点でスクリプトの読み込みを止めます」。

例えばこんな雑なスクリプトでも頑張って解釈しようとしちゃうんです。
意味がないので「なんじゃこりゃあああ!?!」となってエラーになるんです。

そうやってスクリプトの読み込みが止まると「VRCSDKがなんかちゃんと表示されない」、「インポートした改変ツールが表示されず使えない」といった症状の他、最終的になんかアップロードとか揺れ物の動作確認が出来なくなった…という事象に繋がります。

…そしてそんな状態でUnityの再生ボタンを押すと十中八九、以下のようなエラーメッセージが出てきます。

たまにアップロードできなくなったりする時に
Unityの再生ボタンを押すと見かけるやつ

こちらのエラーメッセージは「playmode(再生モード)にする前に全部のコンパイルエラーを修正してね!」という内容になります。

要するに「改変ツール同士が喧嘩しあってる可能性があるから(コンソールを見たうえで)それをどうにかしてくれよな!!」という事です。

コンソール開いたらなんかエラー出てました。
今回はとりあえずこの[NewBehaviourScript.cs]を削除して解決とします。
※状況に応じて異なるので英字が読めない方は周りに助けを求めよう

アニメーターコントローラーをシンプルに学ぼう

「FXレイヤーに…」という言葉が出てくると十中八九触ることになる「アニメーターコントローラー」。
こちらは各レイヤー(階層)毎に順番で「今は△のパラメータが○○だからこのアニメーションを実行してるよ!」という感じの処理を行っています。

最初は気にしなくてもいいのに、衣装着せ替え改変とかすると見る羽目になる

気をつけて欲しいところはこのアニメーションの実行処理は上から順番に「(基本的に)上書きされながら」実行されるということ。

例えば、[Left Hand]で表情を切り替えていても
[New Layer 0]で表情をまた切り替えていると[Left Hand]の表情は上書きされてしまう。

もちろん、実際に上書きされるかどうかはアニメーションの作り次第であるため「全てが上書きされてしまう」訳では無いという事は覚えておこう。

例えば一番上の「blue_on」がこのアニメーション上では"0"だが、
別のアニメーションでは"100"と設定されていた場合、
(他のパラメータも含め)どちらが後に実行されるかで最終的な結果が変わってくる

なので、例えば一番上のレイヤーに「デフォルト表情のレイヤーを用意」し、あとは後ろに表情の設定を行っていくことで「表情を取っているときはその表情」、それ以外ならば「デフォルトの表情」という感じで表情を切り替えたりも出来る。

FXレイヤーはWriteDefaultを「オフ」にしたほうが良い、という感じの運営からのお達しがあるので今のうちにアニメーターコントローラーのアレコレは学んでおくと良いです。

「上から順番に実行される、というのを覚えておくだけでも色々楽になります」