0から始めるVket入稿 基礎知識編
Unity
Unity(ユニティ)はゲーム等のアプリを開発するために使われているゲームエンジンです。
VRChatにアバターやワールドをアップロードするのにも使われています。
Vketに入稿するためにはUnityの力を借りる必要があります。
Vketの入稿に使用するUnityのバージョンは2019.4.31f1です。
Unityのインストールや入稿の手順については入稿ガイドラインを参照してください。
Unityプロジェクト
Unityを使う際は必ずUnityプロジェクトを作成します。
Unityプロジェクトとは、Unityで取り扱うファイルを全て格納しているフォルダーです。
VRChatのためにUnityを使う場合は、以下の2パターンに分かれます。
1. アバターのアップロードに使用する
アバターのモデルやテクスチャ、シェーダー、アニメーション等をフォルダーに格納します。
VRChatへのアップロードのために、アバター用のVRCSDKをインポートします。
2. ワールドのアップロードに使用する
ワールドのモデルやテクスチャ、シェーダー、Udonギミック等をフォルダーに格納します。
こちらもVRChatへのアップロードのために、ワールド用のVRCSDKをインポートします。
Vketの入稿は2の「ワールドのアップロードに使用する」に該当しますが、通常のワールドアップロードと異なり入稿のための専用ツールVketToolsをインポートして使います。
また、そのため、普段アバターやワールドをアップロードするのに使用しているUnityプロジェクトとは別のUnityプロジェクトを作って使う必要があります。
Scene
Unityを使用してアバターやワールドをアップロードしたり、Vketに入稿したりする際には、Scene(シーン)と呼ばれる作業場所のようなものを作成します。
アバターをアップロードする場合は、Scene内にアバターを複数配置し、どのアバターをアップロードするかVRCSDKのウィンドウ内で選択してアップロードします。
※1個だけアバターを配置している場合は選択せずそのアバターがアップロードされます。
一方、ワールドをアップロードする場合、Scene内に配置された物全体が1つのワールドとしてアップロードされます。これはVketに入稿する場合も同様ですが、入稿を受け付けた運営スタッフ側でさらに入稿物をSceneにたくさん並べてワールドとしてVRChatにアップロードします。
Vketの入稿では専用の入稿用Sceneに出展者のみなさんのブースを配置してもらう形になっています。
入稿用Sceneには以下のような物が最初から配置されているので、必ず入稿用Sceneを使用して入稿するようにしましょう。
- 入稿ツールが入稿ルールチェックを行うのに必要なライト等
- VRChatを起動してローカルテストを行うために必要最低限な床等
- 入稿ルールで定められているScene内のHierarchy構造
※Hierarchyについては後で説明しています。
Unityプロジェクトへのファイルインポート
Unityを使用してアバターやワールドのアップロード、Vketへの入稿を行う際には、必ずUnityプロジェクトへモデルやテクスチャ等のファイルをインポートする必要があります。
Unityの画面下部にはUnityプロジェクト内のファイルを表示する「Project」ビューと呼ばれる部分があるので、ここにファイルをドラッグアンドドロップしてインポートしましょう。
Unityパッケージ
Unityパッケージは、モデルやテクスチャ等の複数のファイルをUnityプロジェクトへインポートできる形でまとめた物です。ファイル名に .unitypackage の拡張子が付いています。
※正式には「アセットパッケージ」という名前でUnityマニュアル内で説明されています。
アセットパッケージ - Unityマニュアル
Vketへの入稿を行う際には以下のツールをUnityプロジェクトにインポートする必要がありますが、これらのツールはUnityパッケージの形で配布されています。
- VRCSDK (ワールド用VRCSDK)
- VketTools (入稿ツール)
VRCSDK
Unityを使用してアバターやワールドのアップロードを行う際には、VRCSDKと呼ばれるツールのUnityパッケージをUnityプロジェクトにインポートする必要があります。
アバターをアップロードする場合とワールドをアップロードをする場合に使用するVRCSDKは別々に分かれています。また、これら2種類のVRCSDKは1つのUnityプロジェクトに両方インポートすることはできないため、アバター用のUnityプロジェクトとワールド用のUnityプロジェクトは分ける必要があります。
Vketへの入稿ではワールド用のVRCSDKを使用します。
VRCSDKはVRChatのWebサイトからダウンロードできます。
https://vrchat.com/home/download
ワールドのVRCSDKは「VRChat Worlds」と書かれているので、アバター用と間違えないようにしましょう。
VketTools (入稿ツール)
VketTools(入稿ツール)は、出展者のみなさんがブースを入稿するために使用するツールです。
以下のような機能があり、入稿には必ず必要です。
- Unity上でVketアカウントにログインする
- 空の入稿用Sceneを作成する
- ブースが入稿ルールに従っているかどうかのチェックを行う
- 入稿を行う
アセット
Unityプロジェクト内にインポートしたモデルやテクスチャ等のファイルをアセットと呼ぶことがあります。
アセットはUnityプロジェクトのフォルダー構造の中の「Assets」という名前のフォルダー内に格納されます。Unityの画面下部の「Project」ビューにはAssetsフォルダーが最初に表示されています。
VRCSDKやVketTools等もAssetsフォルダー内にインポートされるアセットの一種になっています。
Hierarchy
Hierarchy(ヒエラルキー)とは、Scene内にブース等を配置する際の階層構造のことを指します。
Unityの画面内では、左に「Hierarchy」ビューがあり、この中には現在開いているSceneのHierarchyが表示されています。
HierarchyはWindowsのフォルダーと似たような概念で、「Hierarchy」ビューでは階層構造が▼マークで表示されています。
Vketへの入稿ではScene内に特定の階層構造を作る必要があり、入稿ルールでも説明されています。詳しくは、後述のStaticとDynamicの説明を参照してください。
ゲームオブジェクトとコンポーネント
Hierarchy上に配置するモデル等の「物」を、Unityでは「ゲームオブジェクト」と呼びます。
Hierarchy上に表示される物は全てゲームオブジェクトです。ゲームオブジェクトはモデルやライト、コライダーといった物の他にも、単に階層を作るためのフォルダーのような物も同様にゲームオブジェクトです。
ゲームオブジェクトがどのような役割を持っているかは、そのゲームオブジェクトが何の「コンポーネント」を持っているかによって変わります。コンポーネントは、Hierarchyビューでゲームオブジェクトを選択した際に画面右側の「Inspector」ビューに表示されます。
例えば、fbxファイルをHierarchyにドラッグアンドドロップして作成したゲームオブジェクトには「Mesh Filter」や「Mesh Renderer」コンポーネントが自動的に作成されます。アバターモデルのようにボーン構造を持つモデルの場合は代わりに「Skinned Mesh Renderer」コンポーネントが作成されます。
どのような役割のゲームオブジェクトにどのようなコンポーネントが必要なのかはある程度決まっており、Hierarchy上で右クリックすることでCubeやLight等の役割ごとに必要なコンポーネントが付いたゲームオブジェクトを作成することができます。「Create Empty」ではコンポーネントが何もない空の「GameObject」が作成されます。
※位置座標を示すTransformコンポーネントだけは作成されます。
「Inspector」ビューにはコンポーネント内の様々な設定値が表示されていて、これらを変更することでコンポーネントの特性を変化させることができます。
例えば、Transformコンポーネントでは3次元空間内での位置、回転角度、拡大縮小率が表示されており、数値を変更することでこれらを変化させることができます。
また、既に作成済みのゲームオブジェクトにコンポーネントを追加したり削除したりすることも可能です。
マテリアルとシェーダー
Scene内に配置した3Dモデルには、色や質感等の見た目を決めるための「マテリアル」が割り当てられます。
マテリアルにはまず「どのシェーダーを使用するか」という選択が含まれており、選択したシェーダーによってさらにシェーダー毎の細かい設定情報が決められています。
ワールドやブース等の背景モデルでは「Standard」というシェーダーを使用することが多いですが、アバターの見た目にはあまり向いていません。そのため、ブースの建物にはStandardシェーダーを、そこに配置するアバターペデスタルモデルにはアバター用のシェーダーを、というようにマテリアルを割り振ることになります。
Vketの入稿ではVketToolsに付属する形でよく使われるシェーダーがインポートされます。これらの中から使いたいシェーダーを選ぶか、それ以外を使いたい場合は別途Unityプロジェクトにインポートする必要があります。
StaticとDynamic
Unityには、Hierarchyにゲームオブジェクトを配置した時点で
「このゲームオブジェクトは固定されていて動かない」
「このゲームオブジェクトはアニメーションやピックアップ等で動く」
という情報を予め設定しておき、動かないゲームオブジェクトの描画処理を簡略化する等の最適化を行う仕組みがあります。
動かないゲームオブジェクトを「Static」、動くゲームオブジェクトを「Dynamic」と呼びます。
Vketのワールドもこの仕組みを使用してなるべく最適化を行うために、出展者のみなさんにStaticとDynamicを分けて入稿して頂く必要があります。
入稿ルールではHierarchy内の構造が決められており、「Static」という名前のゲームオブジェクト階層以下にStaticのゲームオブジェクトを、「Dynamic」という名前のゲームオブジェクト階層以下にDynamicのゲームオブジェクトを配置するようになっています。
典型的な例では、ブース背景等の動かないモデルをStaticに、アニメーションが設定されていて動くモデルをDynamicに配置します。
また、アバターペデスタルのモデルのようなアバターモデルは、アバター向けシェーダーがStaticを想定していない場合があり、その場合はDynamicにすることで見た目上の問題を回避することがあります(例: UTS2でStaticにするとアウトラインの太さが変わる)。
Prefab
Prefab(プレハブ)は、Hierarchy上に構成したゲームオブジェクト階層の一部分をアセットとして取り出して保存した物です。HierarchyからProjectビューにゲームオブジェクトをドラッグアンドドロップするだけで作成できます。
作成したPrefabは、Hierarchyにドラッグアンドドロップするとドラッグアンドドロップ先にコピーが作成されます。
複数のゲームオブジェクトを組み合わせて作った構造を再利用するために使用することができます。
VRChatでは、PhysBonesやVRC Avatar Descriptorをセットアップ済みのPrefabをHierarchyにドラッグアンドドロップしてアバターをアップロードしたり、ワールドにiwaSync動画プレイヤーのPrefabをドラッグアンドドロップして使ったり、といった場面で登場します。
Udon
UdonはVRChatワールドにギミックを実装する際に使用するプログラミング言語です。
通常、ワールドにギミックを作り込みたい場合はUdonのプログラムを作成する必要がありますが、既に作成済みのプログラムPrefabをHierarchy上にドラッグアンドドロップするだけで使えるようになっている物も多数あります。
Vketへの入稿でも、ブースでよく使うUdonギミックをPrefabとして用意しています。使い方はマニュアルを参照してください。