Sampleを参考にVRchatでworldを作成する

#VRChatSDKを理解する
既に同様の記述は有志wikiなどにも有るが、備忘録として記述。
https://docs.vrchat.com/docs/creating-your-first-world
をよく読んで準備作業をおこなう。

##環境
unity2018f4.20
vrChatsdk2

##やること

VRchatWorld製作
Sampleの内容理解

###手順

assetのcustomimportからVRCSDKをimportする

Assets/VRChat Examples/Examples2/Scenes/Example-Prefabs.unityをHierarchyへドラッグ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/765d710c-6917-51e8-f651-52075bb46559.png)

###VRCWorld

SDKの中にあるVRWorld

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/b338e7e4-3da2-05f9-d6a3-fa95dd660fa5.png)

https://docs.vrchat.com/docs/vrc_scenedescriptor

####Swaons
プレイヤーの出現位置

>デフォルトでは、VRCWorldプレハブは、ユーザーがその場所にスポーンするようになっています。
これは最もシンプルな設定で、ほとんどのユーザーが採用している設定です。

とあるため、特に必要がある場合以外はそのままで良い。




#### swaon order
スポーンの順序を設定可能

First - 常に最初のスポーンを使用。
シーケンシャル - スポーンがリストアップされている順に使用。
ランダム - ランダムにユーザーをスポーン。
デモ -　ルームスケールの中心

ランダムやシーケンシャルはゲーム目的のワールドなどに適している。

スポーンされる方向
Default - VRChat のデフォルトのスポーン設定
Align Player With Spawn Point - プレイヤーを基準にスポーン位置を設定
Align Room With Spawn Point  - ルーム（worldのこと）を基準にスポーン位置を設定

上記で設定したスポーン位置がルーム外ならばルーム内に調整する？
サイズを変更すると、出現位置の座標を増やすことができる。
初期設定ではVRCWorldになっているがVRCWorld以外のオブジェクトも指定可能。


####いまいちピンとこないので実験

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/7bebe663-ee12-6bcf-cba5-cf030e47fe97.png)

elements0にmeinCameraを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/69b7267a-091f-e210-f274-c7e642cdcd87.png)

VRCWorld>MainCamera>SecondCameraを入れ子構造にする。
右クリックメニューからCameraを追加。
MainCameraからx:10離れた位置に設定。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/44c217db-8571-2931-4d19-ea994e6b0a5b.png)

同じ要領でThirdCameraも追加し、z:に10を入力。
部屋の中にCameraが3つ作成され、スポーン位置として設定された状態。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/0d5144cd-cf13-d96c-e66e-5a544f61493d.png)

シーケンシャルに設定し、リスポーンを繰り返すと順番通りにスポーン位置が変化した。

#### Reference Camera

>Reference Camera（リファレンスカメラ） 
>>プレイヤーがルームに参加したときに適用される設定を適用できるカメラです。
>>クリッピングプレーンを調整したり、ポストプロセス効果を追加したりするのによく使われます。


プレイヤーの視界となるカメラ。
postprocessingが適用可能。
postprocessingは視覚にエフェクトを架けることができる。

パッケージマネージャーからインストールを行い、Reference Cameraにpostprocessingを追加。
ここではぼかし処理で、光源を拡散させるために強めのBloom効果を適用している。

本質的な理解を得るためにはこちらの文書をよく読もう。
https://gitlab.com/s-ilent/SCSS/-/wikis/Other/Post-Processing

以前はassetstoreから導入していたが、unity2018ではwindowメニューからPackageManagerから導入するようになった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/36c410b7-8686-0e3f-dcc6-a8cf11ffb554.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/e9aba21b-574f-bab5-ff87-6e1ccb22b69d.png)

>パッケージのインポート時にTestフォルダをインポートしないでください。スクリプトエラーが発生し、ワールドのアップロードができなくなります。

Near far適用可能。 
他のプレイヤーが近づける距離を設定可能。
値が小さいほど、カリング(オブジェクトの非表示化)が行われる距離が小さくなる。

VRCプレイヤーはNearが好きなようだ。

Respawn Height -Y
ワールドの底の高さ。
プレイヤーが落下した場合に自動的にリスポーンする限度の高さ。
あるいはpickupオブジェクトが破棄される高さ。
ワールド内にオブジェクトの破棄ポイントをつくる場合にも設定する。
VRC_ObjectSyncも設定しないとダメ。リファレンスには書いてないのが罠。

####Object Behaviour At Respawn
リスポーンかデストロイを選択可能

####Forbid User Portals
ユーザーのポータルの設置を制限する。
ゲーム目的のワールドなどでは必要かも知れない。

####Unity Version	
通常は触れる必要は無い。使用しているunityのvarがそのまま入っているはず。

####Dynamic Prefabs
スポーンされるオブジェクトのプレハブ
>実行時に動的に生成できるプレハブの配列。シーンでは参照されていないがスポーンされる必要があるプリファブは、ここにリストアップしておく必要があります。

####Dynamic Materials
動的な切り替えで使用されるマテリアル
>実行時に動的に変更できるマテリアルの配列。シーンでは参照されていないが、オブジェクトに設定する必要があるマテリアルは、ここにリストされている必要があります。
>ユーザーがサイズ/配列に加えた変更は、エクスポート時に毎回自動生成されたリストによって上書きされます。



####ワールドのビルド

> VRChat SDK > コントロールパネルを表示 > ビルダーに移動します。
>そこには、シーンで設定できるオプションや、ワールドを構築するためのオプションが表示されます。
>これらの操作を実行してみましょう。
>VRChat のレイヤーと一致するようにレイヤーを設定する。
>これは必ず行う必要があり、そうしないとワールドが正常に動作しない可能性があります。
>VRChat のレイヤーに合わせて、コリジョン レイヤーのマトリックスを設定します。
>上記を参照してください。これを飛ばしてはいけません。

と公式の解説にあるため、下記画面が出てきた場合は指示通りに設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/79614638-880d-995b-6b84-a1cb1ff20966.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643609/32dd8e04-f17b-cabf-2b8f-aede1195d78d.png)

####Local Testing
ログイン後にローカルでワールドをテストすることが可能。
Force Non-VRにチェックを入れればデスクトップモードで起動する。
私の環境ではなぜかVR機器もたちあがってしまう。
VRが優先される場合は有志製作のツールで回避可能のようだがForce non-VRが無かった時期の話のようなので試してはいない。
http://vrcprog.hatenablog.jp/entry/mywork-vrchat-launcher

####Build & Publish for windows

アップロードを行う。
アップロードでの注意事項は別途記載予定。