こわくないワールド作成 (応用編)
はじめに
本記事は、既存のアセットを組み合わせてワールドを作成・アップロードをした経験がある、初心者〜中級者に向けです。
とりあえずワールドを作成してみたけど、軽量化を意識したりUdonでギミックを作ってみたりといった次のステップへの踏み出し方がよくわからない…
といった方々に向けて、入り口としてオススメしたいサイトを各種紹介します。
目次
ワールド軽量化
・処理の軽量化
・容量の軽量化ワールドギミックの自作
・コードを書かない方法
・UdonSharpのすゝめおわりに
1.ワールド軽量化
ワールド作成をしていると常に頭の隅にチラつく"軽量化"という言葉。
やりたいとは思うけど…どんなものがあるのか? 何をすればいいのか?
という部分がわからない…という思いをかつて私は抱いていました。
同じ気持ちを抱いている方がいたら、↓を読んでみてください。
単にワールドの"軽量化"といっても、大きく分けて2種類あります。
ひとつはワールドの"処理"の軽量化。
これを実施することで、動きがカクカクする機会を減らすことが出来るでしょう。
もうひとつはワールドの"容量"の軽量化。
新たにワールドに入る際、必ずデータの読み込みが必要です。
ワールドの"容量"が小さくなれば、この時間を短縮することが出来ます。
先ほどご紹介した記事では、これらの2種の"軽量化"について、
いくつかの対処案とやり方の手引きが書かれています。
処理の軽量化
先ほど紹介したこちらの記事でも紹介されていたメッシュベイクという手法ですが、有料のアセットでは有るもののMesh Bakerというアセットの名前をよく耳にします。
Unity Asset Storeでは定期的にセールが開催されていますので、購入を考えている方は時折覗いてみるといいかもしれません。
ワールドだけでなく、アバターに使うことでマテリアルの削減が出来たりします。
私自身、このMesh Bakerを使っていますが最初は使い方がよくわからず
苦戦していましたので、参考にしたサイトを紹介します。
ドローコールの増減の具体例としてみるのにもおすすめです。
容量の軽量化
こちらの記事では容量の軽量化についても触れられています。
その前段として、容量が大きくなってしまう支配項はどこか?を
確認したいときには↓のサイトが参考になります。
2.ワールドギミックの自作
ワールドの作成に多少慣れてきて、「こんなギミックアイテムが欲しい」という思いをboothの検索欄に叩きつける日々を送っていらっしゃる方も
多いかと思います。
ですがやりたいことが増えてくると、やりたいことにピッタリ当てはまる
アセットが見つからずに悶々とすることもあるでしょう。
でも大丈夫です。
無いのなら、作ればいいのだから!!!!!
皆さんはいつでも、ワールドギミックを"創る側"に立つことが出来ます。
そのための手引きについて、こちらでお話しできたらと思います。
コードを書かない方法
無いなら作ればいい!とは言っても、今までにプログラミングなどに
触れたことも無いのでイチからコーディングのお勉強をしてUdonSharpを
ゴリゴリ書くのはハードルが高いと感じる方もいらっしゃるかもしれません。
そんな方でもご安心を。
実は、コーディング無しでもワールドギミック自作が出来るのです。
大丈夫です。
「Udonはもともとビジュアルプログラミングインターフェイス()
だから、それを使えばUdonSharpでコードを書かなくても良い」
などと宣うつもりはありません。
(あれを使いこなせるならUdonSharp書けるはず…)
今回ご紹介するのはこちら↓。
Trigger2to3と呼ばれるアセットです。
これはもともと、SDK2の時代の仕組みであったVRC TriggerをSDK3で
実装して使えるようにしたというものです。
私自身、VRChatの世界に入ったときには既にSDK3に完全移行されており
SDK2を今更使う必要は無いと、かつては思っておりました。
しかし、このSDK2時代のVRC Triggerは、コーディングをせずにギミックを自作する目的で使う場合、とてもとっつきやすい仕組みで出来ています。
TriggerとActionを組み合わせることで、
「いつ、どんなとき」に「なにを、どうするのか?」という部分をパーツの組み合わせで作成することが出来ますので、直感的に作りやすいです。
マニュアルも充実しているので、どんなことが出来るのか?どうやって使えばいいのか?についてもそこまで悩まずに済みます。
さらに、SDK3とてSDK2がベースにあるので、いずれSDK3のUdonSharpを
触るとしても、各種メソッドのバリエーションは結構似ているので、
UdonSharpでどう書くか?をイメージしやすくなるおまけつきです。
特にありがたいのがTrigger2to3のマニュアルに、SDK3のUdonでどのように実装しているのか?が記載されている事です。
私自身、Trigger2to3でギミックを作りながら、Udonで書くならどうするのか?をマニュアルから確認することで勉強していく…というプロセスを辿っていました。
↑の勉強スタイルは人によって向き不向きがあるとは思いますが、Trigger2to3に触れることが、UdonSharpを触ることの妨げにはならないと
考えている、ということを伝えておきたいです。
自作のワールドギミックに興味はあるけどコーディングはちょっと…
という方、是非まずは気軽に試してみてください。
UdonSharpのすゝめ
自由自在にワールドギミックを作成したいというそこのあなた!!
UdonSharpの沼泉へようこそ!!!!
UdonSharpを使えば、フレンドを投げることも、投げたフレンドに あなたが作りたいと思ったギミックを
飛行エフェクトを付けることも、地面に着弾したフレンドを爆発させる
ことだって出来るんです!!
好きにデザインし、実装することが出来ます(限度はありますが)。
ただし、UdonSharpは触っている人口がお世辞にも多いとは言えず
ノウハウを集めるのに苦労しましたので、オススメのサイトを
いくつか紹介させていただきます。
UdonSharpの学習を進める足掛かりにしていただき、あなただけのワールドを作り出すための一助になれば幸いです。
UdonSharpを使って、まずは動くものを作ってみよう!!
という目的にピッタリなのがこちら↓。
UdonSharpのインストールについてはかなりあっさりと書かれていますので、必要に応じてこちらをご参照ください。(2.SDK導入の部分)
UdonSharpの書き方だけではなく、オブジェクトにU#をアタッチするところから解説してくれており、エントリーポイントにピッタリです。
この記事をよく読み、まずはUdonSharpの使い方を理解しましょう。
↑でUdonSharpの使い方が理解出来たら、次はUdonSharpについての理解度
向上と、実例によるイメージの明確化をまとめてサポートしてくれる
こちら↓を読むのがおすすめです。
今後UdonSharpを触っていくにあたり、本当に…本当に長い付き合いになる
"同期処理"に関する解説が詳しく記載されています。
初めての方は頭を悩ませるシーンが多いかもしれませんが、根気強く
向き合いましょう。
恐らく、同期処理からは逃げられません。腹を括って戦いを挑みましょう。
ここまでくれば、UdonSharpに対する理解はかなり深まった事でしょう。
もうすこし実例として、UdonSharpの使い方を見たいという方は
コチラ↓などもおすすめです。
テレポートのギミックなのですが、ちょっとしたゲームのような作りになっています。
衝突判定などについての理解も深まる事でしょう。
あとは、この辺↓を参考にしながらお好きなギミックを作成しましょう。
一つ目は、Eventが一覧になっていて簡単な解説もついているのでとても見やすくおすすめのサイトです。
二つ目は、Playerに関する操作をしたいときに使う"VRCPlayerApi"についてまとまっているサイトです。UdonSharpではなく、ビジュアルプログラミングインターフェイスであるUdonGraphの記事なので注意しましょう。
どんなことが出来るか、どんなデータを返すか?などが日本語で分かりやすく書かれています。
追加で、個人的にイチオシのコチラ↓を共有します。
ラスクちゃんと遊ぶワールドの記事です(ラスクチャンカワイイヤッター)。
「ギミックアイテム」ではなく、「ギミックワールド」丸ごと解説してくれているので、読み解くことが出来れば大きな学びになります。
と、ここまで日本語で読みやすく解説された記事を紹介してきました。
しかし、最終的には "公式のマニュアル" に触れることになると思います。
UdonSharpの勉強を始めた頃に読んでもサッパリかと思います(笑)
とはいえ、公式のドキュメントを紹介しないわけにもいきません。
日本語の解説が存在しない場合にはコレを読みながら作業することになるからです。
とはいえ、あまり難しく考える必要はありません。
いつか使うときがくるかもなーと頭の片隅に置いておきましょう。
さてここまでで、UdonSharp学習のノウハウ紹介は終了ですが…
最後にUdonSharpのデバッグ方法を紹介しておきます。
UdonSharpのデバッグ方法
まずは、steamの設定から「デバッグメニューの有効化」を起動オプションで指定できるように変更します。
↑のサイトを参考に、起動オプションとして--enable-debug-guiを加えるように設定をしてください。
steamの設定が出来たら、UdonSharpのスクリプト内の任意の場所に、
Debug.Log("任意の文字列");
を追記しましょう。
この後VRChat内でテストした時、上記を追記した個所を読み込んだならば
"任意の文字列"の部分がコンソールに出力されるようになります。
Debug.Log("任意の文字列");は複数記載しても問題ありませんが、処理としては比較的重いので、デバッグが終わったらコメントアウトしておくようにしましょう。
スクリプトに追記が終わったら、さっそくUnityでBuild&Testを実施してみてください。
デスクトップモードでVRChatが起動したら、
半角入力にしたうえで「右Shiftキー + ` + 3」を押してログ画面を表示することが出来ます。
※ ` は@の書いてあるキーです。
Debug.Log("任意の文字列");を追記したギミックアイテムを動かし、
"任意の文字列"が表示されるのか否か(複数追記した場合、いくつ目まで表示されるか?)を確認することで、UdonSharpのデバッグを行うことが出来ます。
おわりに
以上で、こわくないワールド作成 (応用編)はおしまいです。
少しでも皆さんのワールド作成の力になれたなら幸いです。
最後に一つだけメッセージを。
必ず、定期的にバックアップを取ってください。
作業してると、バックアップが面倒になる気持ちはわかります。
ですが、最後にあなたを救うのはいつだってバックアップです。
バックアップで心のゆとりを保ちつつ、のびのびとワールド作成を
進めていきましょう!!