generated at
VCIのチュートリアルを試してみる
VCIのチュートリアルを2019/6/28にやったときの記事
その後 初めてVCIを作成するという記事が出ているので以下の内容は古い

チュートリアルで完成するもの
やってわかったこと
スクリプトのデバッグはバーチャルキャスト上でできる。バーチャルキャストの再起動は不要
VCIをつくったらTHE SEED ONLINEにあげなくてもすぐにスクリプトの開発ができる
VCIのアイテムを作る流れ
1. モデリング(省略。今回はキューブ)
2. Unity上でVCIの設定をする
コライダーや必要なスクリプト(VCI Objectスクリプト)、シェーダの設定をする
3. THE SEED ONLINEにアップする
4. バーチャルキャストでアップしたアイテムを使う
5. 4をすると生成されるディレクトリにluaスクリプトを書いていく。デバッグはそのままバーチャルキャスト上でできる
6. 5で作成したスクリプトと共に2で作成したVCIのアイテムをTSOにアップロードする

環境
Unity 2018.4.2f1
Virtual Cast

Virtual Cast Interactiveのチュートリアルをやっていく

Unity 2018.4.2f1をインストール
>※2019年6月現在、2018系なら問題ありまあせん。2018系の最終バージョンを選択してください。
余談:Unity Hub 2.0.2でインストールしたらインストールアニメーションが1つしかインストールしていないのに2つになったりしていた。再起動で直ったのでおそらく表示だけの問題
Visual Studioは別途2019をインストールしていたので、2017は入れなかった

2019年6月25日時点での最新版のUnityPackageをダウンロード
Unityを立ち上げてログイン
新規プロジェクトを作成
API compatibilityを.NET Standard 2.0から.NET 4.xに変更
マニュアルの誤植?
ランタイムを.NET 4.0に設定と書いてある箇所ではAPI compatibility levelの画像になっている。一方、インポート時にエラーが出る際にはランタイムを変更するとある。最初は文章が間違っていてランタイムではなくAPI compatibilityのこと?基素
読み込み成功(してシーンを VCI_sample として保存したあと)
>VCIを書き出した後も、セットアップに使ったSceneが必要になりますので、必ず保存してください。

ここまでで開発環境のセットアップは終了。

rootのgame objectを作成し、VCI Objectスクリプトをアタッチする
この下に実際に利用したいオブジェクトをはやしていく
VCI ObjectスクリプトのInformationに作者情報をのせる
>VCI Objectで設定するInformationとは
> 作者名や、アイコンや、ライセンス情報などを管理するためのオプションです。
> 各設定項目の詳細については VCIコンポーネントの詳細 を確認してください。
「VCIコンポーネントの詳細」にはInformationの記載なし
SubItemを作成する(0.25mのcube)
VCI Sub Itemスクリプトをアタッチする
Grabbableかどうかセットできる
別途RigidbodyCollliderが必要。VCI Sub Itemを追加すると自動的にRigidbodyは生成される
Rigidbody Use Gravity で重力の効果の対象になるかを決定できる
Collliderを追加する
VCIで利用できるColliderのリスト:vci:unitycomponent [VirtualCast]
チュートリアルだとColliderを設定する記述がないが、デフォルトでBox Colliderがついている
実際にためしてみたところ、つかめた
アイテムには重力がかからないので、等速直線運動をする
TODO 追記
やってみて気づいたこと基素
rootのscaleはSubItemのスケールに掛けられるっぽい
rootのscale.xが2でSubItemのscale.xが0.5ならscaleは1になりそう
VCIに設定するMaterialを作成する
手順通りに実施
シェーダーとしてUniGLTFUniUnlitを利用する

THE SEED ONLINEにアップしたVCIのアイテムはVirtualCastで使えるのでアカウントをとっておく
THE SEEDにVCIを アップロードする
「アイテムを見る」をクリックすると表示される
VirtualCastとTHE SEED ONLINEを連携させる
もともと連携していた場合、連携を解除して再連携するまでアイテムが出現しなかった
再連携後
アップしたアイテムがあることがわかる
実際にバーチャルキャストを使うと、アイテム欄に自作アイテムが登場する


VSCodeをつかったLuaの環境構築
アイテムを使った際にアイテムのディレクトリが生成される。その中のluaを編集することでVCIスクリプトの挙動を編集できる
C:/Users/__USER_NAME__/AppData/LocalLow/infiniteloop Co,Ltd/VirtualCast

template.lua main.lua にする
config.json(Vrtual Cast)をVirtualcastの実行ファイルがあるディレクトリに作成する
config.json
{ "niconico": { }, "embedded_script": { # スタジオ内に入室した状態でlocalhost:8080にアクセスすることでVCIアイテムのデバッグ情報を見ることができる "websocket_console_port": 8080, # VR内にコンソール画面(デバッグ情報)を表示します "vr_debug": true } }
この状態でバーチャルキャストを起動すると、コンソールが出現する。自分だけに見えるらしい
アイテムを出現するごとに、そのアイテムの出力うのためのウィンドウが増える
>バーチャルキャスト上でVCIアイテムを出すと、対象のVCIフォルダが自動生成されます。
> 例えばVCIsampleというアイテム名であれば、 VCIsample というフォルダが作成されます。
トラブル:ディレクトリが作成されない
[vci:updatelog:1.6.2a VirtualCast]からデフォルトでは作成されなくなったので、Unity側で設定変更が必要
バーチャルキャストに入出した状態で、PCブラウザで localhost:8080 でデバッグ出力が見られる
_
HTTP/1.0 500 INTERNAL ERROR System.NullReferenceException: Object reference not set to an instance of an object. at ReactiveConsole.FileMounter.Solve (System.IO.Stream s, ReactiveConsole.HttpSession session, ReactiveConsole.HttpRequest request) [0x00000] in <00000000000000000000000000000000>:0 at ReactiveConsole.DispatchSolver.Solve (System.IO.Stream s, ReactiveConsole.HttpSession session, ReactiveConsole.HttpRequest request) [0x00000] in <00000000000000000000000000000000>:0 at ReactiveConsole.HttpSession.Request (ReactiveConsole.HttpRequest request) [0x00000] in <00000000000000000000000000000000>:0 at ReactiveConsole.HttpSession.ParseHeader (System.ArraySegment`1[T] bytes) [0x00000] in <00000000000000000000000000000000>:0 at ReactiveConsole.HttpSession.PushBytes (System.ArraySegment`1[T] bytes) [0x00000] in <00000000000000000000000000000000>:0 at ReactiveConsole.HttpSession.<Start>b__20_0 (System.ArraySegment`1[T] x) [0x00000] in <00000000000000000000000000000000>:0 at System.Action`1[T].Invoke (T obj) [0x00000] in <00000000000000000000000000000000>:0 at UniRx.Observer+Subscribe`1[T].OnNext (T value) [0x00000] in <00000000000000000000000000000000>:0 at UniRx.Operators.CreateObservable`1+Create[T].OnNext (T value) [0x00000] in <00000000000000000000000000000000>:0 at ReactiveConsole.TcpReadObservable+<>c__DisplayClass0_0.<BeginRead>b__0 (System.IAsyncResult ar) [0x00000] in <00000000000000000000000000000000>:0 at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00000] in <00000000000000000000000000000000>:0
他のアイテムでディレクトリが作成されるのかたしかめる
できた
できない
ディレクトリができないとスクリプトがあてられない。仕方ないので、とりあえず犬にスクリプトをあててみる
動く