そうだ、箱を作ろう！第2回目（終わり）

#はじめに
そうだ、箱を作ろう！第2回です。

大事なことなので第1回にも書きましたが箱を作るだけなら公式WikiにもVCI作成方法
（*https://virtualcast.jp/wiki/vci/make*）があります。
**基本的には↑↑の情報の焼き回しです。**

第1回目ではルートオブジェクト及びVCI Objectの作成。箱の作成とTransform設定が終わりました。
実はこの状態でもアイテムとしては機能するのですが、
持つことが出来ないので第2回ではもてるようにしたいと思います。

#アイテムを持てるようにしよう！
**・VCISubItemの追加**
　Unity画面の左側「ヒラエルキー」からルートオブジェクトである「箱作り」配下にある
　オブジェクト「cube」または第1回目で付けた任意の名前のオブジェクトを選択しましょう。

　Unity画面の右側「インスペクター」から「コンポーネントを追加」をクリックしましょう。
　さらに「vci」を検索し、「VCI Sub Item」をクリックしてください。
![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/cbbc7c8e-c302-44e1-747d-e50dc5eff194.jpeg)

**・VCISubItemの設定**
　「VCI Sub Item」と「Rigidbody」がインポートされましたが、まずは「VCI Sub Item」から
　アイテムとして持てる、大きさを変える、引き寄せる等の有効無効を設定します。
　Grabbable　　：チェックを入れると持てます
　Scalable　　　 ：チェックを入れると拡大縮小できます
　UniformScaling ：チェックを入れると拡大縮小時のXYZ比率を維持します
　Attractable　　：チェックを入れるとアイテム引き寄せが出来ます。
　GroupId　　　：所有権のグループID

　忘れがちですが最低でも「Grabbable」と「Attractable」はチェックを入れ、
　「GroupId」は「1」にしましょう。
![12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/1538e3bd-835f-8d0d-d73b-dc16178fff9b.jpeg)

　GroupIdについて公式が絵を描いてくれているのでここを見ましょう。
　*https://virtualcast.jp/wiki/vci/component/sdk/subitem/groupid*

**・Rigidbodyの設定**
　ここでは物理的な挙動について設定します。
　が、基本的には2カ所の設定についてどうするかになります。

　Use Gravity　：チェックを入れると重力の影響を受けます。
　Is Kinematic ：チェックを入れるとアイテムを固定できます。

　一般的なアイテムであれば「Use Gravity」無効、「Is Kinematic」チェック入れが多いかと思います。
　また、ある方向にだけ移動または回転させたくない場合、「Constraints」のxxを固定にチェック入れると
　移動または回転に制限がかかります。
![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/f6cc4383-b737-ef58-171b-a7408f40d09c.jpeg)

**・つまりどういうことRigidbody**
　「Use Gravity」にチェックを入れると物理演算が始まり、アイテムが下方向に落下します。
　このときの挙動はアイテムの「質量」や「抗力（空気抵抗）」「角抗力（トルクによる空気抵抗）」から演算されます。
　これらをうまく設定することで投げるボール等を作成することが出来ます。
　投げる必要が無ければ「Use Gravity」は無効でよいということです。

　「Is Kinematic」は先に説明したとおりアイテムを固定するかどうかです。
　「Use Gravity」及び「Is Kinematic」が無効の場合、アイテムを投げると無重力状態で飛んでいきます。
　「Use Gravity」及び「Is Kinematic」を有効にしてしまうと固定化が行われているため、アイテムが落下することはありません。
　一般的には「Use Gravity」か「Is Kinematic」のどちらかにチェックを入れることになるかと思われます。
　気になる人は公式を参照してください。
*https://virtualcast.jp/wiki/vci/component/unitycomponent/rigidbody/*

**・マテリアルの作成準備**
　ここまでで持つことの出来る0.6立方メートルの箱を作成することが出来ました。
　しかし真っ白な箱が出来たので色を変えましょう！（ここで説明するのは結局単色ですが・・）
　
　いきなりマテリアルを作成しても良いのですが、フォルダーが汚くなるので準備しましょう。
　Unity画面の下「プロジェクトウインドウ」の「Assets」の何もないところを右クリックし、
　「作成」→「フォルダー」を選択し、名前を「箱作り」としておきましょう。
![14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/8f4dd027-5ea1-8b0e-e4b2-129140db8419.jpeg)

**・マテリアルの作成**
　作成した「箱作り」フォルダーをダブルクリックすることで移動することが出来ます。
　再び何もないところを右クリックし、「作成」→「マテリアル」を選択しましょう。
　名前は任意で。
![15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/fd3606fc-707a-0b27-79cf-b26e82287afc.jpeg)

**・マテリアルの設定**
　作成したマテリアルを選択し、インスペクターの「Shader」から、使用するシェーダーを選択しましょう。
　バーチャルキャストでは3つのシェーダーが使用可能です。
　Standar　　　　 ：標準シェーダーです。
　VRM→MToon　　 ：VRMでよく使用するトゥーンシェーダーです。
　UniGLTF→UniUnlit：陰影処理しないシェーダーです。

　今回は公式のVCI作成説明にならい、UniUnlitを使用しましょう。
![16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/b6347f2b-4836-084a-8db0-61572b99f9a5.jpeg)

**・マテリアルの色変更**
　作成したマテリアルはdefaultの白色です。単色であれば色を変えるのは簡単です。
　「Mini Map」→「アルベド」右側にある白いボックスをクリックすると、カラーマップが出てきます。
　好きな色に変更しましょう。
　マテリアルについては光沢等細かな設定があるけども今回は省略。
![17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/131578ac-f2d2-6d15-ffe0-3db877033759.jpeg)

**・オブジェクトの色変更**
　ヒエラルキーから「cube」または第1回目で付けた任意の名前のオブジェクトを選択し、
　インスペクターの「Mesh Renderer」→「マテリアル」→「Default-Material」横の
　「◎」をクリックするとマテリアルの選択ウインドウが出てきます。
　先ほど作成したマテリアルを選択しましょう。
![18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/e91a78fb-872e-3055-09c2-3799791b00a4.jpeg)
※マテリアルがいっぱいでよくわからない場合。
　Unity画面の下側プロジェクトウィンドウから変更したいマテリアルを直接
「Default-Material」へドラッグすることで変更することが可能です。
![19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/bf3a325e-4d8a-9f71-b31a-af49d52d75ce.jpeg)

**・VCIの出力**
　箱が出来たところでいよいよVCIとして出力です。
　ヒエラルキーからルートオブジェクト「箱作り」を選択し、
　Unityメニュー上段の「VCI」→「Export VCI」をクリック。
　「エクスポート成功」と出れば完了です。
　シードオンラインにアップロードし、動作を確認しましょう。
 ※ルートオブジェクトまたは選択したオブジェクトに「VCI Object」が存在しないとエラーです。
![20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/12bd0afe-0970-c157-c7c2-acf3ee8fa490.jpeg)
![21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/1fe7d679-c8c1-7b7d-4dea-d86f4052d04d.jpeg)

#注意事項
　公式の説明にも書かれているのでここにも記載します。
　ルートオブジェクトの配下にSubItemオブジェクトを複数配置することは可能です。
　　SubItemオブジェクトの配下にさらにオブジェクトを配置することも可能です。
　しかし、SubItemオブジェクトの配下にSubItemオブジェクトを配置することは出来ません。
![22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/c877dbb9-d927-e5a4-a876-6e9a34d7f137.jpeg)
　例としてSubItem2の配下にSubItem4を作成することは出来ないのです。
　また、SubItem1をつかむことによって箱と球を同時に移動すことは出来ますが、
　SubItem1を動かしてもSubItem2・3はそれぞれ同時に移動してくれません。
　
　初めてVCIに触れる人はSubItemが複数存在することが想像できないかもしれませんが、
　何らかのメニューやボタンを作りたいと思ったとき、この問題に直面します。
　頭の片隅にでも覚えていてくれればと思います。


#最後に
公式Wikiの焼き回しとはいえ記事が2回に分かれてしまいました。
やることがいっぱいで難しいように思えるかもしれませんが、
慣れてくると何も考えなくてもやれちゃうものです。
むしろモデリングやLuaのほうが頭を抱えます。

私も始めは箱作りから入りました。
公式Wikiで挫折した人も、これを見て再チャレンジし箱を作れるようになってくれれば幸いです。