#はじめに
こちらの記事はVCIアドカレ2019の第25日目の記事です。
VCIアドカレ2019
#コメビュのおまけ機能
今回のアドカレの始まったころに作成したVCI「コメビュ」のおまけ機能で、部屋の人数を表示する機能を入れました。
おおまかなやり方は”サンフラワーふじ”さんに教えていただいたのですが。
結構大変でした。
#部屋の人数をどうやってとるか
そんな便利な関数は有りませんでした。
すでに人数検出機能を実現していた”サンフラワーふじ”さんにお聞きしたら、定期的にカウントしているということでした。
はぁ、やっぱり。
さて、楽な逃げ道が無かったので自分なりに解釈しておおまかなアルゴリズムを考えます。
#おおまかなアルゴリズム
VCIの特性上同じ部屋の中に居る人は同じVCIを読み込んで実行します。
こんな感じでやればできるんでは?
- VCIを出した人が人数のカウンターを1にして、カウントアップしてくださいってメッセージを送る
- VCIを実行中の人はカウントアップのメッセージを見てカウンターを+1する
- しばらく時間がたってからVCIを出した人がカウンターの数を確認する
簡単ですけど、人数取るだけで定期的な人数確認ルーチンが必要になります。
ここまでやるなら、余計な機能と見るとか、ここまでやっても必要な機能と見るか・・・
#Luaで書いてみる
実際にはupdate部分にループのカウントを入れて、動作を間引くのですが本質には関係無いの省略します。
サンプルなので、実際にはウエイトとういか、数回に1回しか実行しないようにスクリプトを記載する必要がありますのでご注意。
local ninnzuu = 0
function update()
-- 10秒に1回とかに動作を制限した方が現実的ですね
vci.state.Set('HomeMember',0) -- 人数のグローバル変数をリセットする
--(しばらくWait、値が全VCIに範囲されるまで待つ)
vci.message.Emit('ComeView',CountUp) -- カウントアップのメッセージを飛ばす
--(しばらくWait、カウントアップの処理が終わるまで待つ)
ninzuu = vci.state.Get('HomeMember') -- カウントアップの終わった値を表示
print("部屋に入っている人の人数"..ninzuu)
end
function ComeSet01(sender, name, message) --カウントアップのメッセージ処理
if message == "CountUp" then
vci.state.Add('HomeMember',1)
end
end
vci.message.On('ComeView', ComeSet01) --カウントアップのメッセージ受け取り用
書いてみると以外と面倒な処理になってしまいました。
これをそのまま使うと、VCIを複数出した時に正確にカウントされないので、oOさん作成のcytanb.luaなどを使用する必要があります。
でも、もっと簡単にできると良いのですが・・・
できらぁ!
#さぁアップデートだ
2019/12末にVCI0.24のアップデートが行われました。
良いタイミングですね、いろいろできる事が増えました。
このアップデートの中に、部屋内のアバター関連の情報を取得する関数なんてものが有りました。
これってもしかして・・・。
そんなわけで、さっそく新しい関数を使って同じことをやってみましょう。
function update()
--(適当な時間間隔で実行するように制限が必要、毎フレーム人数取っても意味が無い)
local test
test = vci.studio.GetAvatars()
print("部屋に入っている人の人数"..#test)
end
ずいぶん簡単になったね・・・。
アップデート万歳。
#コメビュのアップデート
折角なのでコメビュのアップデートもしようと思ったのですが、そのうち機能追加、要望追加、趣味追加等を行います。
より使いやすく、分かりやすく、役に立てばいいなぁと思ってますのでよろしくお願いします。
#おわりに
アドカレは最終日となりますが、機会あったらまた何か書いていきたいと思います。
今回のアドカレを企画してくださったfeathさん、参加した皆様お疲れさまでした。
まったね~ノシ