VCIのチュートリアルを試してみる
VCIのチュートリアルを2019/6/28にやったときの記事
チュートリアルで完成するもの
やってわかったこと
スクリプトのデバッグはバーチャルキャスト上でできる。バーチャルキャストの再起動は不要
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
Unity 2018.4.2f1をインストール
>※2019年6月現在、2018系なら問題ありまあせん。2018系の最終バージョンを選択してください。
余談:
Unity Hub 2.0.2でインストールしたらインストールアニメーションが1つしかインストールしていないのに2つになったりしていた。再起動で直ったのでおそらく表示だけの問題
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かどうかセットできる
チュートリアルだとColliderを設定する記述がないが、デフォルトでBox Colliderがついている
実際にためしてみたところ、つかめた
アイテムには重力がかからないので、等速直線運動をする
TODO 追記
やってみて気づいたこと

rootのscaleはSubItemのスケールに掛けられるっぽい
rootのscale.xが2でSubItemのscale.xが0.5ならscaleは1になりそう
VCIに設定するMaterialを作成する
手順通りに実施
THE SEED ONLINEにアップしたVCIのアイテムはVirtualCastで使えるのでアカウントをとっておく
THE SEEDにVCIを アップロードする
「アイテムを見る」をクリックすると表示される
VirtualCastとTHE SEED ONLINEを連携させる
もともと連携していた場合、連携を解除して再連携するまでアイテムが出現しなかった
再連携後
アップしたアイテムがあることがわかる
実際にバーチャルキャストを使うと、アイテム欄に自作アイテムが登場する
アイテムを使った際にアイテムのディレクトリが生成される。その中のluaを編集することでVCIスクリプトの挙動を編集できる
C:/Users/__USER_NAME__/AppData/LocalLow/infiniteloop Co,Ltd/VirtualCast
template.lua
を main.lua
にする
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
他のアイテムでディレクトリが作成されるのかたしかめる
できた
できない
ディレクトリができないとスクリプトがあてられない。仕方ないので、とりあえず犬にスクリプトをあててみる
動く