まゆたまガジェット開発逆引き辞典

電子工作やプログラミングのHowtoを逆引き形式で掲載しています。作りたいモノを決めて学んでいくスタイル。プログラマではないので、コードの汚さはお許しを。参照していないものに関しては、コピペ改変まったく問いません

バーチャルキャスト+VCIでグリップボタンを押すとアクションが起こるオブジェクトを作る

バーチャルキャストで「オブジェクトをつかんだ状態でグリップボタンを押すと、オブジェクトの表情が変わる」ものを作ります。
Lua」言語で書かれたVCIスクリプトをオブジェクトに適用することで、アクションによって反応するオブジェクトを作成することができます。
例によって忘れないよう急ぎのメモなので、スクショが極端に少ないですが、ご容赦ください。

VCIスクリプトの開発環境を整える(初回のみ)

下記を参照していきます。基本的には流れは同じですが、Windowsを熟知している方向けなのか微妙に設定のプロセスが飛んでるところがあったので、補完的な意味でメモすることにしました。
virtualcast.jp

まず、下記すべてをクリアした状態であることを確認して始めます。
・VCIスクリプトを追加したい「つかんで動かせるVCIオブジェクト」をUnityで作成済み
・VCIスクリプトを追加したい「つかんで動かせるVCIオブジェクト」を「The Seed Online」に投稿or公開状態でアップロード済み
・VCIスクリプトを追加したい「つかんで動かせるVCIオブジェクト」をバーチャルキャストで一度でも呼び出して使った状態

クリアしていない場合は、下記を参考にまずオブジェクト(アイテム)を作成します。
prince9.hatenablog.com
作成済みの「つかんで動かせるVCIオブジェクト」にVCIスクリプトを付け足していく形になります。


公式の各種サンプルはこちらになります。
virtualcast.jp



1.「The Seed Online」からVCIスクリプトつきのオブジェクトを取り込んでおく(自作のものに限らず、何でもOK)。
seed.online

ここでは下記を取り込みました
seed.online

2.バーチャルキャスト上で1.のオブジェクトと作成済みの「つかんで動かせるVCIオブジェクト」を読み込み、試しに使ってみる
3.バーチャルキャストを終了する
4.開発環境の「VSCode」をダウンロード&インストールする
code.visualstudio.com
5.Javaがインストールされていなければ、下記からダウンロード&インストールする(オンラインでいいかと思います)
www.java.com
6.インストールが終了したら、PCを再起動する
7.VSCodeを開き、左にある拡張機能のアイコンをクリックする
8.検索スペースのところに「VSCode-EmmyLua」と入力すると右側に「EmmyLua」が出てくるので、「インストール」をクリックする
9.Cドライブ→ユーザー→ユーザー名とクリックしていき、「表示」タブをクリックする
10.そうすると「隠しファイル」という項目があるので、□をクリックして隠しファイルを表示させる

www.jaskun.com

11.隠しファイルを表示させると「AppData」というフォルダが見えるので、AppData→LocalLow→infiniteloop Co,Ltd→VirtualCastとクリックしていき、「EmbeddedScriptWorkspace」フォルダがあるか確認する
12.VSCodeの「ファイル」メニュー→「フォルダーを開く」を選択し、11.のパスの「EmbeddedScriptWorkspace」フォルダを選択して開く
13.「types.lua」「template.lua」がVSCode上(左のウィンドウ)にあるか確認する


VCIスクリプトを書く(2回目以降はここから始める)

1.「EmbeddedScriptWorkspace」フォルダをエクスプローラで開いて「つかんで動かせるVCIオブジェクト」名のフォルダ名があるか確認する
2.「EmbeddedScriptWorkspace」フォルダにある「template.lua」をコピーする
3.「EmbeddedScriptWorkspace」フォルダ→「つかんで動かせるVCIオブジェクト」名のフォルダに2.をペーストする
4.3.でペーストした「template.lua」を「main.lua」に名前を変更する
5.4.の「main.lua」をVSCodeで開き、スクリプトを入力する
6.5.を保存する(VSCodeはまだ閉じない)
7.6.をコピーする


VCIスクリプトをオブジェクトに適用する

1.「つかんで動かせるVCIオブジェクト」を作成したUnityプロジェクトをUnityで開いて、シーンを読み込む
2.rootオブジェクトをクリックし「Inspector」→「Scripts」に下記を入力する
・Size → 1にする
・Name →「main.lua」と入力
・Source →「VCIスクリプトを書く」項目の7.でコピーしたものをペーストする。必要なコード全体をここにコピペする形です

スクリプトは下記になります。というより、ポスターのサンプルとほぼ同じです。
virtualcast.jp

サンプルの例ではUVが3×3となっていますが、ここでは2×2にしています。
またマテリアル名は「Usamat」にしています。

local assets = vci.assets
local count = 0
if vci.state.Get("COUNT") then
    count = vci.state.Get("COUNT")
end
local TOTAL = 4

function SetCounterOffset(count)
    local offset = Vector2.zero
 
    -- y shift
 local Yshift = math.floor(count / 2)
    offset.y = -(1/2) * Yshift
    
 
    -- x shift
    local Xshift = count % 2
    offset.x = (1/3) * Xshift
 
    vci.assets._ALL_SetMaterialTextureOffsetFromName("Usamat", offset)
end
SetTextureOffset(count)
 
function onUse(use)
    if count >= TOTAL-1 then
        count = 0
    else
        count = count + 1
    end
    vci.state.Set("COUNT", count)
    SetTextureOffset(count)
end

再度VCIオブジェクトとして書き出す

1.シーンを保存し、再度VCIオブジェクトとして書き出す
下記の「書き出す」項目を参照

prince9.hatenablog.com

2.「The Seed Online」で「つかんで動かせるVCIオブジェクト」のページを開き、「別のファイルを再アップロードする」をクリックする
3.1.で書き出した「.vci」ファイルを選択し、アップロードする
4.バーチャルキャスト上で動くかどうか確認する