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

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

バーチャルキャスト+VCIで、ループとそうでないアニメーションを同一オブジェクトで使用する

バーチャルキャストでループアニメーションとそうでないアニメーションを同じオブジェクトに適用する場合の方法です。
複数アニメーションを設定するにあたり、VCI上の仕様でいくつか注意点があります。

今回のサンプルです。

VCIで複数のアニメーションをさせるときの注意点

1.アニメーションの作成の方法
アニメーションを設定するときは、まず「root」オブジェクトをクリックして、「Window」メニュー→「Animation」→「Animation」を選択→「Create」ボタンを押してアニメーションを作成する
2.「Animator」の無効化
1.を実行すると「root」に「Animator」が勝手にできているので、チェックを外して無効化しておく(アニメーションがひとつなら2.はやらなくてOK)
3.「Animation」コンポーネントをつける
複数アニメーションがある場合は、「root」に「Animation」コンポーネントをつけておき、「Animations」→「Size」を1以上にして(アニメーションの数だけ)該当する.animファイルをドラッグ&ドロップする
4.「Quaternion」にする
回転のアニメーションを含む場合は、「Animation」ウィンドウでアニメーションさせたいオブジェクトを右クリック→「Interpolation」→「Quaternion」を選択する
5.アニメーションさせるアイテムは複数オブジェクトから構成されててもOK
3Dアプリでアイテムを作成してグループ化した後にFBX化、それを使用してもOKです。
アニメーションさせるアイテムと空のオブジェクトを親子関係にして、親につかむ設定や衝突判定を設定します。
具体的には下記のような構成になります。青色部分がアニメーションさせるアイテム、その上の「AnimOBJ」がその親です。
f:id:prince9:20190508142923p:plain

一度アイテムをアップロードする

1.アイテムを作成後、スクリプトをつける前に、下記の方法で一度「The Seed Online」にアップロードしておく。
prince9.hatenablog.com
2.下記の「アイテムを用意して、初期位置を調整する」の1.から8.の方法で、アニメーションさせたいアイテムの親子関係を設定する
prince9.hatenablog.com
3.下記の「空のオブジェクト(ここでは「UsaAtari」オブジェクト)に対する設定」の1.から8.までの方法で、アニメーションさせたいアイテムの親に衝突判定とつかむ設定を行う
prince9.hatenablog.com

ひとつ目のアニメーションを作成する

1.下記の「アイテムを用意して、初期位置を調整する」と「アイテムをつかんだり衝突判定ができるようにする」の1.から14.まで行い、まずひとつ目のアニメーションを作成する
prince9.hatenablog.com

ふたつ目以降のアニメーションを作成する

1.「Hierarchy」の「root」をクリックした状態で、「Animation」ウィンドウを開く
2.「Preview」の下のアニメーションファイルを選択するタブをクリックし、(ここでは「ToOmoteAnim2」のところ)「Create New Clip」を選択して新しいアニメーションファイルを作成する
f:id:prince9:20190508043652p:plain
3.「Hierarchy」にあるアニメーションさせたいアイテムをクリックし、「Animation」ウィンドウをクリックする
4.「Animation」ウィンドウの赤い●をクリックして録画状態にする
5.「Add Property」をクリックし、「アニメーションさせたいアイテム(オブジェクト)の▶︎」→「Transformの▶︎」→「Position(またはRotationやScale)横の+」をクリックする
6.アニメーションさせたい時間のところに白い棒をドラッグし、移動・回転・拡大縮小をしてアニメーションを設定する
7.再生ボタンを押してアニメーションを確認する
8.赤い●をクリックして録画状態を解除する
9.必要であれば同様の方法で3つ目以降のアニメーションを作成する

「Animation」コンポーネントを設定する

1.すべてのアニメーションが設定できたら、「root」→「Inspector」→「Add Component」をクリックし、「Animation」コンポーネントを設定する
2.「Animations」→「Size」に使用するアニメーションの合計ファイル数を入力する(3パターンのアニメーションなら3)
3.使用する.animファイルをドラッグ&ドロップする
4.「root」→「Inspector」をみると、「Animator」コンポーネントが勝手にできているので、チェックを外して無効化しておく(removeはしないほうがいいっぽい)


VCIスクリプトを書く

1.Cドライブ→ユーザー→ユーザー名→AppData→LocalLow→infiniteloop Co,Ltd→VirtualCast→「EmbeddedScriptWorkspace」フォルダの中に「template.lua」があるので、それをコピーする
2.1.の「EmbeddedScriptWorkspace」フォルダの中に先ほどアップロードしたアイテムのフォルダがあるので、そのフォルダに1.をペーストする
3.2.のファイル名を「template.lua」から「main.lua」に変更する
4.3.をVSCodeで開く
5.下記のスクリプトを書く

下記のスクリプトでは、特定のアイテムをグリップした回数で表/裏切り替え+テクスチャ変更(UVスクロール)を行っています。
テクスチャ変更がなく単に表裏ひっくり返したいだけなら、「グリップ回数の変数%2」で奇数偶数判定してアニメーションをその度切り替えればOKです。
またアニメーションの状態を記録する変数として「state」を使用しています。これがないとループありとなしのアニメーションを切り替えることができません。現在のVCIの仕様では複数アニメーションを同時に再生することができないので、次のアニメーションが再生される前に必ず再生中のアニメーションを停止させておく必要があります。

--グリップ回数カウント用変数
local TouchCount1 = 0
local TouchCount2 = 0

--奇数偶数判定用変数
--local Hantei1 = 0
local Hantei2 = 0

--アニメーションの状態を記録する変数
local state=0


function onUse(use)
    
    --うさぎロッドをつかんだ場合
    if use=="UsaRod" then
    
    TouchCount1 = TouchCount1 + 1
    --Hantei1 =  TouchCount1 % 2
    
    -- うさぎロッドをグリップした(奇数)1回目、かつ状態が0
    if TouchCount1==1 and state == 0 then
        vci.assets._ALL_PlayAnimationFromIndex(0, false)
vci.assets._ALL_SetMaterialTextureOffsetFromName("FlipFrontMat",Vector2.__new(0.5,0))
        state=1
        print("1おもて")
      
--うさぎロッドをグリップした(偶数)2回目、かつ状態が1
    elseif TouchCount1==2 and state==1 then
        vci.assets._ALL_PlayAnimationFromIndex(1, false)
vci.assets._ALL_SetMaterialTextureOffsetFromName("FripBackMat",Vector2.__new(0.5,0))
        state=0
        print("1うら")
        
        -- うさぎロッドをグリップした(奇数)3回目、かつ状態が0
    elseif TouchCount1==3 and state==0 then
        vci.assets._ALL_PlayAnimationFromIndex(0, false)
       vci.assets._ALL_SetMaterialTextureOffsetFromName("FlipFrontMat",Vector2.__new(0,0.7))
        state=1
        print("2おもて")

        --うさぎロッドをグリップした(偶数)4回目、かつ状態が1
    elseif TouchCount1==4 and state==1 then
        vci.assets._ALL_PlayAnimationFromIndex(1, false)
      vci.assets._ALL_SetMaterialTextureOffsetFromName("FripBackMat",Vector2.__new(0,0.7))
        state=0
        print("2うら")

        
    end
       
    end
 
    --球体をつかんだ場合の処理-------------------------
    if use=="Tama" then
        print("玉だよ")
        TouchCount2 = TouchCount2 + 1
    Hantei2 =  TouchCount2 % 2

     -- 球体をグリップした(奇数回)、trueはループ
     if Hantei2==1 then
        vci.assets._ALL_PlayAnimationFromIndex(2, true)
        
      
--球体をグリップした(偶数回)
    elseif Hantei2==0 then
        vci.assets._ALL_StopAnimation()
        
        
    
    end
end


end
        

ORCAことはじめ(音出しまで)

ORCAサウンド系のライブコーディング環境に新たな刺客到来!なんだかレトロゲームを思わせるテンションがなかなか良いですね。


導入から音出しまでまとめてみました。
日本語チュートリアルではインストールのところが省かれていたので、個人的なメモとして。
大幅な仕様変更があったようで、YouTubeなどのチュートリアル動画の通りでは一部動かないものがあります。ご注意を!

ORCAのインストールの準備

1.下記からnode.jsをダウンロード&インストールする(私は推奨版の方にしました)。すでにnode.jsがインストール済みの方は飛ばしてOK
nodejs.org

2.下記から「Orca」をダウンロード&インストールする。寄付をお願い!と言われるので、しない場合は「No thanks, just take me to the downloads」をクリックしてダウンロード&インストールする
100r.co

3.下記からシンセ「Pilot」をダウンロード&インストールする。寄付をお願い!と言われるので、しない場合は「No thanks, just take me to the downloads」をクリックしてダウンロード&インストールする
wiki.xxiivv.com

4.「Orca」「Pilot」を起動する

音を鳴らしてみる

ORCAはステップシーケンサーのようなものなので、そのままでは音が出ません。MIDIを繋いでハード/ソフトシンセで音を出したり、OSCを使って他アプリと連携させて音を出します。
ここではソフトシンセの「Pilot」を使って音を出していきます。

1.画面中央の適当なところに「;54C」と入力する。連続入力ではなくて、矢印キーでカーソルを動かして1文字ずつ入力する
2.「;」の上に4、その左にDと入力する。シンセっぽい「ド」の音が鳴る
f:id:prince9:20190429220825p:plain
上記の「;54C48」は、
・「;」UDPという通信(気にしないでOK、とりあえずPilot使って音出す場合は入力する)
・「5」音色(0〜F)
・「4」音の高さ
・「C」ノート番号(ドレミ・・・)
・「4」音量
・「8」音の長さ

コマンドまとめ

ORCAでは主にAからZまでコマンドがあり、それぞれのアルファベットを入力することでコマンドを実行します。
そのコマンドを(分かってる範囲内で)まとめました。?はまだ私がコードを作る中で遭遇していないものです。
翻訳は本家のこちらを参考にしました。
github.com


・A 左右を足す
・B Bool変数
・C カウント
・D Bangを出力
・E Eを右に飛ばす
・F 左右が同じだとBangを送る(if)
・G 離れた位置に値を送る
・H 直下のアルファベットの活動をすべて停止
・I カウントアップ
・J 上の値を下に転送する
・K 変数を出力
・L ループ?
・M 余りの計算
・N 上にNを発射する
・O 演算子と出力を引き継ぐ?
・P 下の行に値を転送する
・Q Oと似てる?
・R ランダムな値を出力
・S 下にSを発射する
・T トラックを作る
・U S・N・E・Wを打ち返す
・V グローバル変数
・W 左にWを発射する
・X 離れた位置に値を送る
・Y 右にコピーした値を出力する
・Z Eと同じ?右にZを発射する
・# コメント。#Comment#という形で囲うように使用する
・* 強制的にBangを送る


ひとまずここから先は、よろしければ4/30(火)20:00スタートの下記の配信をご覧ください!
f:id:prince9:20190429221447p:plain
www.youtube.com

配信ではUnityのVFX Graphとの連携もご紹介します。
テキストでまとめるのは限界が・・・

また日本語チュートリアルを有志の方がまとめておられますので、こちらもご参考まで。
qiita.com
qiita.com


ORCA」お楽しみください!

バーチャルキャスト+VCIで、タッチすると(アイテム同士が接触すると)アニメーションが再生される

VCI(バーチャルキャストでアイテムを扱うための環境)を使って、アイテムにタッチするとアニメーションが再生されるようにします。
こんな感じ。

前回はグリップボタンを押すことでアクションが起きましたが、今回はアイテム同士が接触することでアクションが起こる状態を作っていきます。
prince9.hatenablog.com


これを応用すれば、「ボタンを押してアニメーションを再生する(リモコン)」も可能です。
ご本家のwikiでは例としてこちらにちょろっと書いてある程度で、詳細な説明がされていません。Unityでアニメーションを作った経験がないと、初見では分かりづらいかと思われます。
virtualcast.jp

VCIの環境を整える

1. 一度もVCIスクリプトつきのアイテムを作成・アップロードしたことがない場合は、下記の最初から「VCIスクリプトを書く」4.まで行い、Unityで環境をつくる。
prince9.hatenablog.com

初回の設定が終わっている(一度でもVCIスクリプトつきのアイテムを「The Seed Online」上にアップロードしたことがある)場合は、上記のリンクの「VCIスクリプトを書く(2回目以降はここから始める)」4.までを行う。

2.下記の条件すべてをクリアしているか確認する。クリアしていない場合は、リンクを参考にVCIスクリプトをつけたいアイテムを「The Seed Online」にアップロードして使用済みの状態にしておく
prince9.hatenablog.com

■条件
・VCIスクリプトを追加したい「つかんで動かせるVCIアイテム」をUnityで作成済み
・VCIスクリプトを追加したい「つかんで動かせるVCIアイテム」を「The Seed Online」に投稿or公開状態でアップロード済み
・VCIスクリプトを追加したい「つかんで動かせるVCIアイテム」をバーチャルキャストで一度でも呼び出して使った状態

アイテムを用意して、初期位置を調整する

今回使用するアイテムは下記の2つです。ステッキでウサギさんにタッチすると、ウサギのアニメーションが再生されるシンプルな仕組みです。

・アニメーションさせたいアイテム(今回の例だとウサギ)
・上記にタッチすることでアニメーション再生のトリガーとするアイテム(今回の例だとステッキ)

バーチャルキャスト自体、アバターがタッチしてもアクションは起こらない仕様になっています。アイテムにアクションを起こさせる場合、アイテム同士が接触する・アバターがアイテムをつかんでグリップボタンを押すの2択になります。今回はアイテム同士が接触することでアクションが起こる状態を作っていきます。

1.作成済みの「VCIスクリプトを追加したい"つかんで動かせるVCIアイテム"」があるUnityプロジェクトを開く
2.「root」の下に入っている「つかんで動かしたいアイテム(オブジェクト)」を「Hierarchy」の何もないところにドラッグし、いったん親子関係を解除する
アイテムの大きさを調整したい場合は、この時点で「R」キーを押して調整しておく
3.2.のオブジェクトをクリックし、「Inspector」→「Transform」→「Position」を一度0,0,0にする
4「Hierarchy」→「Create」をクリックし、「CreateEmpty」を選択する
5.空の「GameObject」ができているので、「GameObject」をクリックして適当な英字名に変更する(ここでは「UsaAtari」にしました)
6.5.で作った空のオブジェクトに3.の「つかんで動かしたいアイテム(オブジェクト)」をドラッグし、親子関係にする
f:id:prince9:20190416031456p:plain

7.親子関係になった8.(ここでは「UsaAtari」オブジェクト)をクリックし、Wキーを推して好きな位置に変更する。0,0,0の場合は下すぎてアバターやステージ(環境)によっては手が届かないことがあるため。アバターの顔の位置あたりが適当か?
8.7.を「root」オブジェクトにドラッグ&ドロップし、さらに親子関係にする
f:id:prince9:20190416031544p:plain

アイテムをつかんだり衝突判定ができるようにする

「つかんで動かせるVCIアイテム」を作るときと方法は同じですが、「VCISubItem」と「Box Collider」を設定するオブジェクトが違います。
公式では例としてのみ書かれていて、詳細な説明がないので注意です。

rootオブジェクトに対する設定

1.「Hierarchy」にある「root」をクリックし、「Inspector」に「VCIObject(Script)」があるか確認する。ない場合は「Add Component」をクリックし、検索窓に「VCI」と入力して「VCIObject」を選択して追加する
2.「root」がクリックされている状態で、「Window」メニュー→「Animation」→「Animation」を選択し、「Animation」の画面を出す
3.「Animation」ウィンドウが出てくるので「Create」ボタンを押す
f:id:prince9:20190416040150p:plain
4.英字で名前をつけて「Save」を押す
5.「Animation」ウィンドウの赤い●をクリックし、録画状態にする
f:id:prince9:20190416040329p:plain
6.「Add Property」をクリックし、「つかんで動かしたいアイテム(オブジェクト)の▶︎」→「Transformの▶︎」→「Position横の+」の順でクリックし、下記のような状態にする
f:id:prince9:20190416040759p:plain
7.下記に「15」と入力して、15に飛ぶ
f:id:prince9:20190416041117p:plain
8.「Scene」ビューに戻って、「Hierarchy」の「つかんで動かしたいアイテム(オブジェクト)」をクリックする
9.「W」キーを押して、上方向(Y軸方向)に少し動かす
・0の状態
f:id:prince9:20190416041206p:plain
・15の状態
f:id:prince9:20190416041235p:plain
10.「Animation」ウィンドウの「1:00」のところにある◆マークを「30」のところまでドラッグする
f:id:prince9:20190416041457p:plain
11.赤い●をクリックし、録画状態を解除する
12.「Animation」ウィンドウの赤い●の隣のボタンをクリックし、先頭に戻る
13.「Animation」ウィンドウの▶︎を押して、「Scene」ビューでアニメーションが動いているか確認する
14.「Assets」に「root」という名前のAnimation Controllerができているのを確認する
f:id:prince9:20190416063121p:plain
15.「Hierarchy」の「root」をクリックし、「Inspector」→「Add Component」をクリックする
16.「Inspector」に「Animater」が追加されていなければ、「Add Component」をクリックする。あればそのまま18.へ
17.16.がない場合は検索窓に「Animater」と入力して「Animater」をクリックする
18.「root」オブジェクトの「Inspector」→「Animater」→「Controller」の横の□に、14.で作ったAnimation Controllerをドラッグ&ドロップする
f:id:prince9:20190416063141p:plain

空のオブジェクト(ここでは「UsaAtari」オブジェクト)に対する設定

このオブジェクトに衝突判定やアイテムをつかむ設定を行います。アニメーションがついてない単なる「つかんで動かせるVCIアイテム」とは異なり、アイテムのオブジェクト自体に設定するのではない点に注意!

1.「UsaAtari」をクリックし、「Inspector」→「Add Component」をクリックする
2.検索窓に「VCI」と入力して「VCISubItem」をクリックする
3.「VCI Sub Item(Script)」がInspectorに出ていることを確認し、「Grabbable」にチェックを入れる
「Grabbable」にチェックを入れて、後述のColliderを設定することで掴めるようになります
4.大きさを変えたい場合は「Scalable」と「UniformScaling」にチェックを入れる。
UniformScalingは同じ比率で拡大縮小させる場合にチェックを入れる
5.「Rigidbody」の「Use Gravity」のチェックを外す。
「Use Gravity」のチェックを外す(重力を無視する)+「Is Kinematic」にチェックを入れないと、離したときに落下していくので注意
6.空中に留まっていて欲しいので、「Is Kinematic」にチェックを入れる
7.そのまま「Add Component」をクリックし、検索窓に「Box Collider」と入力して「Box Collider」をクリックする
8.「Edit Collider」ボタンをクリックして画面上で緑の■を動かし、アイテムをタッチしたい+つかみたい範囲が入るように大きさを調整する。
今回はウサギのボディあたりを範囲とした
f:id:prince9:20190416034826p:plain

設定済みの状態がこちらです。「Rigidbody」の「Mass」を10にすることで、つかんだときにあまりフラフラしないようにしています。
f:id:prince9:20190416034930p:plain

タッチされてアクションが起こるオブジェクト(アイテム)に対する設定

特に設定はありません

アクションのトリガーとなるアイテムに対する設定

1.「Assets」に「.fbx」「.glb」形式どちらかのファイルをドラッグ&ドロップして読み込ませる。今回は「Usacon」というオブジェクト名
2.1.を「Hierarchy」の何もないところにドラッグ&ドロップする
3.2.がクリックされている状態で、「W」キーを押して位置を調整する。アバターの顔あたりが無難?
4.3.を「root」オブジェクトにドラッグ&ドロップして、下記のような状態にする
f:id:prince9:20190416043221p:plain
5.4.がクリックされている状態で、「Inspector」→「Add Component」をクリックする
6.検索窓に「VCI」と入力して「VCISubItem」をクリックする
7.「VCI Sub Item(Script)」がInspectorに出ていることを確認し、「Grabbable」にチェックを入れる
「Grabbable」にチェックを入れて、後述のColliderを設定することで掴めるようになります
8.大きさを変えたい場合は「Scalable」と「UniformScaling」にチェックを入れる。
UniformScalingは同じ比率で拡大縮小させる場合にチェックを入れる
9.「Rigidbody」の「Use Gravity」のチェックを外す。
「Use Gravity」のチェックを外す(重力を無視する)+「Is Kinematic」にチェックを入れないと、離したときに落下していくので注意
10.空中に留まっていて欲しいので、「Is Kinematic」にチェックを入れる
11.そのまま「Add Component」をクリックし、検索窓に「Box Collider」と入力して「Box Collider」をクリックする
12.「Edit Collider」ボタンをクリックして画面上で緑の■を動かし、アイテムをタッチしたい+つかみたい範囲が入るように大きさを調整する

設定済みの状態がこちらです。
f:id:prince9:20190416043452p:plain

VCIスクリプトを書く

ようやく下準備が完了しました。後はスクリプトを書いて「root」にコピペするだけです。
今回は「Usacon」というステッキ型のオブジェクトをつかんだ状態でウサギにタッチすると、ウサギがアニメーションする流れになっています。

要素として、
・ステッキとウサギの衝突判定
・衝突するとアニメーションが一度再生される(ループなし)
となります。

実際のコードはこちら。

---[SubItemの所有権]アイテムにCollider(not Trigger)が接触したときに呼ばれる。
---@param item string @SubItem名
---@param hit string @Collider名

function onCollisionEnter(item, hit)
    if (item == "Usacon" and hit == "UsaAtari") or (item == "UsaAtari" and hit == "Usacon") then
        vci.assets._ALL_PlayAnimationFromName("JumpAnim",false)
    end
end

function onCollisionEnter(item, hit)〜でアイテム同士が接触したときの状態を書きます。
if以下〜は、もしアイテム「Usacon」と「UsaAtari」が接触したら、で、
vci.assets._ALL_PlayAnimationFromName〜は「JumpAnim」というアニメーションを一度再生しなさい、という流れです。

vci.assets._ALL_PlayAnimationFromName("アニメーションのファイル名",タッチごとに一度再生ならfalse。ループ再生させるならtrue)となります。
ここでもし「Stopcon」という別アイテムと「Usacon(ステッキ)」が接触したときに再生を止めたいという場合は、function onCollisionEnter(item, hit)の部分に下記を追加します。

    if (item == "Usacon" and hit == "Stopcon") or (item == "Stopcon" and hit == "Usacon") then
        vci.assets._ALL_StopAnimation()
    end

再生と停止両方を入れたスクリプト全体としては下記になります。

function onCollisionEnter(item, hit)
    if (item == "Usacon" and hit == "UsaAtari") or (item == "UsaAtari" and hit == "Usacon") then
        vci.assets._ALL_PlayAnimationFromName("JumpAnim",true)
    end

  if (item == "Usacon" and hit == "Stopcon") or (item == "Stopcon" and hit == "Usacon") then
        vci.assets._ALL_StopAnimation()
    end


end

|

vci.assets._ALL_StopAnimation()で止まります。

VCIスクリプトを適用する

1.「root」オブジェクトをクリックし「Inspector」→「Scripts」に下記を入力する
・Size → 1にする
・Name →「main.lua」と入力
・Source →「VCIスクリプトを書く」項目ので書いたスクリプトをコピペする。必要なコード全体をここにコピペする形です

VCIアイテムを書き出す

1.「Hierarchy」の「root」をクリックし、「VCI」メニュー→「UniVCI-バージョン」→「Export VCI」を選択する
2.ウィンドウが開くので、「新しいフォルダー」をクリックし、「Sample」と名前をつける
3.「Sample」フォルダをダブルクリックし、英語でファイル名をつけて「保存」を押す

The Seed Onlineにアップロードする

1.「The Seed Online」にアクセスする
seed.online

2.ログイン後、すでにアップロード済みの「つかんで動かせるVCIアイテム」をクリックする
3.「別のファイルを再アップロードする」をクリックし、「VCIアイテムを書き出す」3.で書き出した「.vci」ファイルをクリックする
4.「選択」ボタンを押して再アップロードする
8.下の方の「利用規約に同意する」にチェックを入れる
9. バーチャルキャストとThe Seed Onlineを連携した上でバーチャルキャストに入ると、アイテムのところに出てくるので使えるようになる

バーチャルキャスト+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.バーチャルキャスト上で動くかどうか確認する

バーチャルキャストに3Dオブジェクトを持ち込んで、つかんだりする

バーチャルキャストに3Dオブジェクトを持ち込んで、小道具として使用する方法です。
「The Seed Online」にアップロードすることで簡単にバーチャルキャストで使用することができるのですが、アイテムを登録するだけではつかんだり移動させたりができませんでした。
seed.online

小道具をつかむ・移動させる・拡大縮小するためには、「VCI」として書き出さないといけないようです。
今回は小道具を持ち込み、バーチャルキャスト内でつかんだりして使用できるようにします。
急ぎで自分メモしたので、図なしの箇条書きで見にくくてすみません。

UnityはMacでも動きますが、VCIの開発環境がWindowsのみのため、Windowsマシンで行います。

記事を作成するにあたり、下記を参考にさせて頂きました。ありがとうございます。
(下記3つ、バージョンアップにより微妙に変わっているところがあります。この記事は2019年3/21時点の最新バージョンで行ったものです)
また下記のサンプルでは立方体を作ってアップロードしていますが、この記事はすでに作成済みの3Dモデルをアップロードしています(.glbファイル推奨ですが、FBXもできました。おそらく書き出しのときに変換しているかと)。
virtualcast.jp
https://niconare.nicovideo.jp/watch/kn4137
https://niconare.nicovideo.jp/watch/kn4199

こんな感じで某激レアさんのフリップボード?(司会のアナウンサーさんがホワイトボードに貼り付けてるアレ)を作ってみました。サイズ的にもちょうどいい感じ。
f:id:prince9:20190321064856j:plain

ちなみに背景をアニメーションさせる場合はこちらです。
virtualcast.jp


UnityでVCIを書く環境を整える(初回のみ)

1.最新版のUnity(ベータ版ではない方)をダウンロード&インストールする
2.Unityを開いて新規プロジェクトを作成する。このときプロジェクト名は英語で「VCI_Test1」など分かりやすい名前をつける。
「Enable Unity Analytics」は一応ONにしておく
3.「Edit」メニュー→「Project Settings」を選択し、左側の「Player」をクリック。次に右側の「Other Settings」をクリック
4.「Configuration」と書かれた太字の項目を探し、「Scripting Runtime Version」の項目を「.NET 4.x Equivalent」にする。
変更した場合は「Restart」というボタンが出てくるので、それを押してUnityを再起動する
5.2.で作ったUnityプロジェクトを開いた状態で、下記からUniVCIのUnityPackage最新版をダウンロードする
github.com

6.ダウンロードしたUnityPackageを「Assets」にドラッグ&ドロップし、「Import」ボタンを押す

UnityでVCIを書く環境を整える(2回目以降はここから下を実行)

1.Unityを開いて新規プロジェクトを作成する。このときプロジェクト名は英語で分かりやすい名前をつける。
「Enable Unity Analytics」は一応ONにしておく
2.下記からUniVCIのUnityPackage最新版をダウンロードする
github.com

3.ダウンロードしたUnityPackageを「Assets」にドラッグ&ドロップし、「Import」ボタンを押す

サンプルを作成する

公式でも発表があったように、「root」の中に操作したいオブジェクトを複数突っ込む形です。また操作したいオブジェクトの下に操作したいオブジェクトを置くことはできません。

1.「Hierarchy」→「Create」をクリックし、「CreateEmpty」を選択する
2.空の「GameObject」ができているので、「GameObject」をクリックして「root」に名前を変更する
3.「root」がクリックされている状態で、右側の「Inspector」を見て、「Transform」→「Position」「Rotation」が(0,0,0) 、「Scale」が(1,1,1)になっているか確認する
4.そのまま「Add Component」をクリックし、検索窓に「VCI」と入力して「VCIObject」をクリックする
5.「VCIObject(Script)」が追加されていることを確認し、「Information」を下記のように入力する。ここはライセンスなどを入力するところで、VRMでいうアバター名などの設定項目に該当する
・「Title」→ 英語名で
・「Version→ 「1」
・「Autho」→ 制作者の名前を英語名で
・「Description」→空欄でもOK、アイテムの説明
6.「Assets」に「.glb」または「.fbx」の拡張子がついた3Dモデルをドラッグ&ドロップして読み込む(「.glb」ファイルはメタセコ等の3Dアプリで書き出し可能)
7.3Dモデルのファイル名のついた青い立方体を「Hierarchy」にドラッグ&ドロップする
8.人型の3Dモデルを読み込んでおき、7.のオブジェクトのサイズを調整する
9.サイズ調整が終わったら、7.のオブジェクトを「Hierarchy」の「root」にドラッグ&ドロップして、rootの子にする

つかめるようにするか・浮くようにするか設定する

1「root」にドラッグ&ドロップしたオブジェクトをクリックし、右側の「Inspector」の「Add Component」をクリックする
2.検索窓に「VCI」と入力して「VCISubItem」をクリックする
3.「VCI Sub Item(Script)」がInspectorに出ていることを確認し、「Grabbable」にチェックを入れる
「Grabbable」にチェックを入れて、後述のColliderを設定することで掴めるようになります
4.大きさを変えたい場合は「Scalable」と「UniformScaling」にチェックを入れる。
UniformScalingは同じ比率で拡大縮小させる場合にチェックを入れる
5.「Rigidbody」の「Use Gravity」のチェックを外す。「Use Gravity」のチェックを外す(重力を無視する)+「Is Kinematic」にチェックを入れないと、離したときに落下していくので注意
6.空中に留まっていて欲しいので、「Is Kinematic」にチェックを入れる
7.そのまま「Add Component」をクリックし、検索窓に「Box Collider」と入力して「Box Collider」をクリックする
8.オブジェクトの大きさに合うように「Center」「Size」の値を調整する。「X」の文字にマウスカーソルを合わせて左右に動かすと、画面を見ながら数値を変化させることができる。
もしくは「Edit Collider」ボタンをクリックして画面上で緑の■を動かすと、画面を見ながら大きさを変更することもできる


シェーダを設定する

1.「Assets」→「読み込んだ3Dオブジェクト名.Materials」フォルダを探し、マテリアルをクリックする
2.その状態で「Inspector」→「Shader」→「Standard」をクリックする
3.シェーダを「UniGLTF」→「UniUnlit」に変更する(VRM→MToonもOK)
※影をつけない場合は「UniUnlit」、影をつける場合は「StandardVColor」にする。アニメっぽくする場合は「MToon」に


書き出す

1.「Hierarchy」の「root」をクリックし、「VCI」メニュー→「UniVCI-バージョン」→「Export VCI」を選択する
2.ウィンドウが開くので、「新しいフォルダー」をクリックし、「Sample」と名前をつける
3.「Sample」フォルダをダブルクリックし、英語でファイル名をつけて「保存」を押す



The Seed Onlineにアップロードする

1.Unityを終了し、「The Seed Online」にアクセスする
seed.online

2.アカウント登録後、「アップロード」ボタンを押す。その後「利用規約に同意する」にチェックを入れる
3.「投稿するアイテムタイプ」を「小道具(VCI・GLB)」に変更し、立方体アイコンをクリックする
4.先ほど作ったUnityのプロジェクトフォルダを探し、「Assets」→「Sample」→「.vci」(「書き出す」3.で保存した.vciファイル)を探してクリック、「開く」を押す
5.「アップロードされました」との表示が出たら、「アイテムを見る」をクリックする
6.立方体が表示されていることを確認し、「アイコンを撮影」のボタンを押す。そうするとアイコン画像が登録される
7.「アイテム名」を変更する
8.下の方の「利用規約に同意する」にチェックを入れる
9. バーチャルキャストとThe Seed Onlineを連携した上でバーチャルキャストに入ると、アイテムのところに出てくるので使えるようになる

バーチャルキャストでボイスチェンジ配信+Discordも使用

ボイスチェンジャーを使ったバーチャルキャストでの配信の音まわり・キャプチャアプリ「Luppet」とボイチェンを使うときの音周り・バーチャルキャスト+Discordを使った配信の音まわりに関するメモです。
バーチャルキャストとなっていますが、clusterでも設定は同じです(Discordと併用しない限り)。

※4/26(金)訂正+Luppetを使った配信の音回り設定を追加しました

ボイスチェンジャーを使ったバーチャルキャストでの配信の音まわり設定

0.Voicemeeter BananaとVB-CABLEをダウンロード&インストールする
www.vb-audio.com
www.vb-audio.com


1.VR機器を接続した後、SreamVRを立ち上げる。そして「SteamVRバージョン名」のところを右クリックし、「設定」を選択する
さらにSteamVRの「設定」を下記のようにする(一度設定したら次から飛ばしてOK)
f:id:prince9:20190318033958p:plain

2.サウンドコントロールパネルで下記のように設定する
f:id:prince9:20190318033657p:plain
f:id:prince9:20190318033725p:plain

3.Voicemeeter Bananaを立ち上げ、下記のような設定にする。
自分の声のモニタを切りたい場合は、Hardware InputのA1を選択しないようにする
f:id:prince9:20190318041529p:plain

4.ボイチェンアプリを立ち上げて下記のような設定にする。まだONにしない
(下記はバ美声の例です)
f:id:prince9:20190318034123p:plain

5.バーチャルキャストを立ち上げ、スタジオに入ってキャリブレーションの前まで行う(HMDをつけて~の前まで)
サウンドは「規定のデバイス(VoiceMeeter Output = B1)」でOK)

6.ボイチェンをONにする

7.バーチャルキャストでキャリブレーションを行い、完全にスタジオに入る

8.OBSを立ち上げ、下記のように設定する
デスクトップ音声(VoiceMeeter Input=AI=規定の再生デバイス) :バーチャルキャストの他出演者さん(凸者さん)+バーチャルキャストUI音
マイク音声(VoiceMeeter Output=B1=規定の録音デバイス):自分のボイチェン後の音声
f:id:prince9:20190318041830p:plain

9.配信開始

ボイスチェンジャーを使ったLuppetでの配信の音まわり設定

Luppet(LeapMotionを使った動きをキャプチャするアプリ)とボイチェンを使ってOBSで配信する設定です。
バーチャルキャストではVR機器のマイクを使用していましたが、ここではPC用マイクを使用します。
私の環境ではなぜかVoicemeeter Bananaを使うと音が凄まじく割れてしまったので(VST系未使用)、フリーDTMアプリの「reaper」を使用しました。

1.サウンドコントロールパネルで、下記のようになっているか確認する
f:id:prince9:20190318033657p:plain
f:id:prince9:20190318033725p:plain

2.ボイチェンを立ち上げ、以下のように設定する(まだONにしない)
f:id:prince9:20190427071519p:plain

3.reperを立ち上げ、「Options」→「Prefernce」から下記のような設定にする
f:id:prince9:20190427071209p:plain

4.ボイチェンをONにする

5.OBSを立ち上げ、以下のような設定にする
f:id:prince9:20190427071734p:plain

6.配信開始

ボイスチェンジを使ったバーチャルキャスト+Discordでの配信の音まわり設定(VR機器使用者さんとスマホ使用者さんの共演)

バーチャルキャストでの出演者さんとDiscordを使った音声のみの出演者さんが共演する場合の設定です。
映像はバーチャルキャスト、音声はDiscordでやりとりを行います。

ややこしいので、下記で書かれている設定をすでに行っている場合(設定済みの場合)の流れを以下にまとめました。アプリの起動順も重要になるので、気を付けてください。

設定済みの場合の起動順について

1.Voicemeeter Bananaを立ち上げる
2.ボイチェンを立ち上げる(まだONにしない)
3.バーチャルキャストを立ち上げ、左上の設定アイコンから「入力デバイス」を「CABLE Output」にして、凸者音声が0になっていることを確認する
4.スタジオに入り、キャリブレーションの前で止まる(HMDをつけてください~の前の段階)
4.Discordを立ち上げる
5.ボイチェンをONにする
6.Discordの音声チャンネルをクリックしてチャンネルに入る
7.HMDをつけてバーチャルキャストでキャリブレーションを行う
8.スタジオに完全に入ったら、OBSを立ち上げて配信する

設定していない場合の設定項目&起動順

0.Voicemeeter BananaとVB-CABLEをダウンロード&インストールする
www.vb-audio.com
www.vb-audio.com

1.VR機器を接続した後、SreamVRを立ち上げる。そして「SteamVRバージョン名」のところを右クリックし、「設定」を選択する
さらにSteamVRの「設定」を下記のようにする(一度設定したら次から飛ばしてOK)
f:id:prince9:20190318033958p:plain

2.サウンドコントロールパネルで下記のように設定する
f:id:prince9:20190318033657p:plain
f:id:prince9:20190318033725p:plain

3.Voicemeeter Bananaを立ち上げ、下記のような設定にする。
自分の声のモニタを切りたい場合は、Hardware InputのA1を選択しないようにする
f:id:prince9:20190427003409p:plain

4.ボイチェンアプリを立ち上げて下記のような設定にする。まだONにしない
(下記はバ美声の例です)
f:id:prince9:20190318034123p:plain

5.バーチャルキャストを立ち上げ、画面左上の歯車マークをクリックし、以下のように設定して「スタジオに入る」を押す。
その後キャリブレーションする前まで行う。このとき凸者の音声は「消音」にしておく。Discordのみ参加可能なメンバーがいる場合は、音声のやりとりをすべてDiscord上で行う。消音にしておけば、リップシンクアニメーションのみ表示されるので問題なし
f:id:prince9:20190427012446p:plain

6.PC版DIscordを立ち上げ、「アプリの設定」→「音声・ビデオ」→「音声設定」の項目を下記のようにする
f:id:prince9:20190427041207p:plain

7.ボイチェンをONにする

7.「グループアイコン」→「VOICE CHANNELS」の該当するチャンネルをクリックして音声通話状態にする

8.バーチャルキャストでキャリブレーションを行う

9.OBSを立ち上げ、下記のように設定する。マイクに自分のボイチェン声が、デスクトップ音声にDiscordの音が来ているハズです
f:id:prince9:20190427041104p:plain

10.配信開始

VR機器を使わない、Discordスマホアプリ使用の場合

1.Discordアプリを立ち上げる
2.メニューアイコンをタップし、下の歯車マークをタップする。「アプリの設定」→「音声」をタップし、下記のようにする
f:id:prince9:20190318045358p:plain
f:id:prince9:20190318045019p:plain

3.「グループアイコン」→「VOICE CHANNELS」の該当するチャンネルをタップする。
「ボイスチャンネルに接続」が出る場合もあるので、出ていたらそれもタップする
f:id:prince9:20190318045852p:plain

VRM(VRoid産)にパーツを追加して再びVRMに戻す

VRoidで出力したり他サイトで購入したVRMアバターにパーツを付け足して、再度VRMに戻す方法です。
Blenderを使用して変換する方法は紹介されていますが、「再度VRM化する際にボーンの割り当てが変更になっていることがある」という注意点があります。
今回はMayaを使ってパーツを追加していますが、Blenderでも注意点は同じです。

★VRoidStudio-v0.5.4-p2以降のバージョンでは、スキニングのあるなし関わらず、Unityに持っていった際に上手くいきませんでした

Mayaを使ってパーツ追加をする(Blenderの場合は2.3を飛ばす)

1.BlenderVRMを読み込み、FBX化

Mayaを使う場合はUnityでのアセットは使用厳禁。BlendShapeがおかしくなります。
プラグインの追加・VRM読み込み・FBX書き出し方法はこちらを参照します。このときBlenderのバージョンは2.8を使用します。
toylabo.tech

MacBlenderではVRMファイルの読み込みに失敗することがたまにあります。
失敗したか否かは見た目からは分かりません。エラーみたいなのも画面上には表示されませんでした。
Mayaに読み込んだ状態でボーンの形があからさまにおかしくなっている場合は失敗している可能性が高いです。

下記が成功例です。ボーンが身体全体を覆っている状態は失敗している可能性があります。
f:id:prince9:20190315235948p:plain

パーツ追加でBlenderを使用する場合は、この後2.と3.を飛ばしてパーツを追加・スキニング(ウエイト塗り)をしていきます。

2.1.で書き出したものをMayaで読み込み、パーツ追加・スキニング

スキニングが終わったら、ヒストリーを削除してから保存とFBX書き出しを行います。
追加パーツを移動・拡大縮小・回転させた際は、スキニング前に「修正」メニュー→「トランスフォームのフリーズ」をしておきます。
追加パーツは別シーンで作った後、モデルのみ消去して「追加パーツのみのFBXファイル」を作って読み込むとトラブルがなさげでした。
ヒストリーが残っているとエラーが起こりやすいです。

※スキニングによってはヒストリーを削除するとUnityでエラーが出ることがあります。
パーツを追加してそれのみFBXで書き出す→読み込み→トランスフォームのフリーズ→スキニング→書き出しがいちばん無難かもしれません

f:id:prince9:20190315192209p:plain

3.2.をBlenderで読み込み、FBXで書き出し(未確証ですが、3.をやらないとVRM化でエラーが起こる)

この作業の必要性が個人的に???だったのですが、ここを通さないとUnityでVRM化の際にBlendShape関連のエラーが起きました。ので一応記載。
書き出しの設定方法は1.と同じです。
toylabo.tech

1度目のVRM化(Blender使いもここ注意)

4.Unityで書き出したFBXファイルを読み込み、1回目のVRM化を行う(Blenderのみの場合も、VRoidを使用している場合はここ重要)

VRMで書き出す前に下記の作業をします。VRoidから書き出したモデルを使用している場合は必ず必要になります
1.Projectの中のFBXファイルをクリック
2.Inspectorが出てくるので、「Rig」タブから「Animation Type」を「Humanoid」にして一度「Apply」を押す
3.「Configure...」にチェックが入っていればOK
4.「Configure...」をクリックし、「Head」ボタンをクリックする

f:id:prince9:20190315193913p:plain
↑Headボタンをクリックした状態

5.Left Eyeの横の「J_Adj_L_FaceEyeSet」をクリックし、Hierarchyの中の「J_Adj_L_FaceEye」をクリックする
f:id:prince9:20190315194229p:plain

6.同様にRight Eyeの横の「J_Adj_R_FaceEyeSet」をクリックし、Hierarchyの中の「J_Adj_R_FaceEye」をクリックする
7.Headのボーンの割り当てが下記のようになっているか確認する。jawにボーンが入っていたら、jawの右の◎をクリックして「None」を選択する
f:id:prince9:20190315194348p:plain

設定が終わったら、「Apply」→「Done」の順にボタンを押す

8.1度目のVRM化。マテリアルとテクスチャはこの後設定するので、Humanoid化とボーンの割り当てを変更したらVRM化を行う。
FBXファイルをHierarchyに配置してクリック→「VRM」メニューの「UniVRM-バージョン」を選択→「Export humanoid」で1度目の書き出し
9.下記を参考にして、マテリアルとテクスチャを再設定する
qiita.com
10.こちらのやり方で揺れモノやコライダーの設定を再設定する
scrapbox.io
※上記の「[設定を出力する手順]」でHierarchy上にモデル1体のみ置くことを推奨されています。
この場合、このようにしてモデル1体のみ表示します。
1.「Assets」を右クリックして「Create」→「Prefub」を選択
2.新しくできた「New Prefub」の名前を英語で変更する
3.Hierarchy上のモデルを2.にドラッグ&ドロップする
4.Hierarchy上のモデルを右クリックし、「Delete」で消す
5.再度モデルを置く場合は3.でできたPrefubをHierarchyにドラッグ&ドロップする

5.その他細かいところを修正する

2度目のVRM書き出しを行う前に、10.では調整しきれていない箇所やBlendShape(表情)の再設定を行う。
VRoidからの書き出しの場合は、VRMアバターを選択して出てくるInspectorにて下記を修正する。
VRM Look At Bone Applyerの「Degree Mapping」→「Horizontal Outer」「Horizontal Inner」の「Curve X 〜」と「Curve Y 〜」の値を下記のようにする
f:id:prince9:20190315194919p:plain

VRM Blend Shape Proxyの「Blend Shape Avatar」→「BlendShape」をダブルクリックして、「LOOK〜」以外の表情を設定する
→「LOOK〜」は未設定でもOKだが、下記の方法で設定するとプログラム上でいぢりやすくなる。
1.Blend Shapeの設定画面を開いた状態で、「LOOKUP」ボタンをクリックする
2.「Material List」タブをクリックして「+」を押してから、VRoidの場合は下記のように設定する。
「LOOKUP(上を向いた状態)」では「Offset」のYの値を変えることになる。この値はモデルによって違うので、下の「BlendShape」画面を見ながら調整する
f:id:prince9:20190315195913p:plain
3.他の「LOOK〜」も同様に設定する

2度目のVRM

6.2度目のVRM書き出しを行う

1回目のVRM書き出しで作成されたVRMファイルをHierarchyに配置してクリック→「VRM」メニューの「UniVRM-バージョン」を選択→「Export humanoid」で2度目の書き出し


スキニングがちゃんと出来ていれば、下記のようにFBX化の際に追加した鈴が髪の毛(揺れモノ設定あり)に追従します。
hub.vroid.com