• VCIスクリプトってのをやってみる(サンプラー)05完成

    2019-06-28 19:002
    サンプラサンプラ騒いでたら「サンプラーってべつに音を出す機械のことじゃないからね」っと姉に突っ込まれるけどナンプラーでもバンプレーでもベントレーでもなんでもいいの。
    私に必要なのは音の出るVCIなの。使い道は考えてないけど。

    完成したよ!

    動画だとこんな感じ
    Twitter
    https://twitter.com/tmplcn/status/1144538018545430528

    SeedOnlineで公開しようかと思うしたんだけどロクな音が入ってないのでマジで使い道がないと思う。
    サンプラー01
    あとでホラーな音源(なんで?)入れたやつアップロードするね。

    スクリプト書くのに絶対読まないと駄目なやーつ

    VCIスクリプトリファレンス

    https://virtualcast.jp/wiki/doku.php?id=vci:script:reference

    情報量が多くて全部読むのは無理だ…目についたところだけ

    Lua 5.2 リファレンスマニュアル

    http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html

    VCIで音楽を再生する

    https://virtualcast.jp/wiki/doku.php?id=vci:sample:audio:tutorial


    配列とループで短くしてみた
    先生!できました!


    自分、小学生のはじめてのプログラミング みたいな考え方しかできないので
    初心者っぽく1行ずつ解説します。
    これからVCI始める同志に捧げます。
    music = { "Claps","Cymbal","Dog2","midnightVoice","Snare","Vibraslap"}--音ファイル名を配列に格納
    local table = {}--空のテーブルを作る
    local last_music=""--変数名を宣言(空の変数を作る)
    for i = 1, #music do--配列”music”の数だけ処理を繰り返す
    table[ "button0"..i ] = music[i]--ボタン名と音ファイル名を連想配列にする
    end

    function onTriggerEnter(item, hit)--なんかに触ったら
    if (hit == "HandPointMarker" and string.find(item, "button") ) then--手にあたってしかも相手の名前に"button"って単語が入ってたら
    if (last_music ~= "" )then--もし変数"last_music"が空じゃなかったら
    vci.assets._ALL_StopAudioFromName(last_music)--last_musicを止めます
    end
    vci.assets._ALL_PlayAudioFromName(table[item])--触ったボタンに該当する音を鳴らします
    last_music=table[item]--今鳴らした音の名前をlast_musicに代入します
    end
    end


    自分がわかりにくかった行を追加で解説

    for i = 1, #music do--配列”music”の数だけ処理を繰り返す
     table[ "button0"..i ] = music[i]--ボタン名と音ファイル名を連想配列にする
    end

    連想配列にしておくと、button01の音=Claps って直感で分かりやすくなるのでやってみたのだけど、リファレンス見ながらアレコレやってるうちにうまくいった ってパターンのやつなので こういう書き方ができる っていう参考にしてください。


    if (hit == "HandPointMarker" and string.find(item, "button") ) then

    and しかも、さらに みたいな意味
    string.find (s, pattern) patternにマッチする文字を探す
    前回書いたスクリプトでは何かに当たるたびに音が鳴っていたので手だけに反応するようにした。
    具体的には手(HandPointMarker)で、触ったitemの名前にbutton01とかbutton02、みたいに"button"って文字が入っている時だけ以降の処理をするっていう行。


    if (last_music ~= "" )thenvci.assets._ALL_StopAudioFromName(last_music)end

    ~= 等しくない、の意味。
    起動して最初の1回目はlast_musicが空なのでそのままだとエラーになる
    last_music ~= "" は初回でエラーになっちゃうのを防ぐ処理。
    続いて前の音が鳴っている途中でボタンに触れたら音を止めて触ったボタンの音を出す処理をやってる。


    ------------------------------------------------------

    スクリプトを書くのに便利だったもの

    Lua スクリプト Windows用シミュレーター


    VSCodeでは指摘されなかったlua文法エラーを教えてくれた!
    VCIのComponentとかは当然判断してくれないし、けっこー古いアプリだから新しい書式とかには対応してないんだろう、たぶん。

    Vキャスを立ち上げれば(VScodeでデバッガを使用する方法)同じようにエラーを確認できるんだけど1行書き直すごとにアップロードするのはすごく手間がかかる。
    初歩の初歩 な構文エラーを連発する自分にはありがたかった。




    上の例だと1行目の配列musicが宣言されてないよって教えてくれてる。
    VSCodeはこの程度の初歩的なミスはミスと認めてくれないのや。知らんけど。



    あ、あとVSI Sub ItemのグループIDを設定しておいた。
    意味は分かんないんだけど なんとなくしといたほうがいいのかな?
    って←ツッコミ待ち




    以上、つたない記事にお付き合いありがとうございました。

    ここ違うよ、とかこうしたほうがいいよ とかアドバイスありましたらコメントください
    ・ω・)ノシ









  • 広告
  • VCIスクリプトってのをやってみる(サンプラー)04

    2019-06-26 20:57
    サンプラー!オリジナルのサンプラーを使いたいの。
    なんかくだらない音が出そうなサンプラー!
    サンプラーがゲシュタルト崩壊してテンプラーとの違いが分からないよ もう。

    そしてこないだ作ったライダーベルトだよ 音を出せるようになったら歌うベルト作れるかな!
    タ・ト・バ! タトバタ・ト・バ!


    ようやくスクリプトだよ!
    こっからが本番かと思ったら、ここまでですっかり疲弊してますけど。
    最初に動くスクリプトを書くまでが大変だったのでそのままサンプルとして挙げておくよ。
    どういう挙動をしてるのか見るためにprintをいっぱい書きました。
    local music = { "Claps","Cymbal","Dog2","midnightVoice","Snare","Vibraslap"}--音データの名前を配列に格納
    local table = {}--空の配列を用意
    for i = 1, 6 do--button01~button06まで名前を付けて配列に格納
    table[i] = "button0"..i
    end
    for i = 1, #table do
    print("table "..i.." の値は "..table[i])--配列ができたかどうだか中身を1行ずつ出力
    end


    --手で触って判別できるか
    function onTriggerEnter(item, hit)--触ったものとか触られたものとかのオブジェクト名を取得
    print("ietm"..item.."です")--触られたほうかな
    print("hit"..hit.."です")--それとも触ったほうかも
    print("ここまでおk")--とりあえずここまではエラー出てないよ


    for i = 1, #table do--ボタンの数分だけループ処理
    print("table "..i.." の値は "..table[i])--今処理してるループの値はコレ
    print("hitの値は"..hit.."です")--触ってるほうの手とかその他の名前が取得できるよ
    print("ボタンは"..item.."です")--ボタンの名前はitemで取得できるっぽいね

    if (item == table[i]) then--触ったボタンと名前が同じだったら音を鳴らす
    vci.assets._ALL_PlayAudioFromName(music[i])
    break--音を鳴らしたらループ処理を抜ける
    end
    end

    end
    やった!とりあえず音が鳴った!
    持ち運び出来て、ボタンを手で触って音が出せる そんな必要最小限のサンプラーだぞ!

    でもまだもうちょっと工夫が必要そう。
    手で触った時だけじゃなくて 何にあたっても音が出てしまうので不用意に振り回すとうるさくてかなわぬ。
    手だけに反応するようにしたい。

    それから一度鳴り始めたら一曲分鳴りっぱなしになるので、少し長い効果音だと次の音と被って邪魔になる。
    違うボタンを押したら前の音が止まるようにしたい。


    次回で最後、のはず!




  • VCIスクリプトってのをやってみる(サンプラー)番外:VSCodeの導入

    2019-06-26 04:51
    サンプラーが欲しいんだ、神様。 コンパクトサイズでいい、ボタンも6個でいい。
    歩きながらでも使えて、押すと音が出るだけ、そんな、 簡単なサンプラーが欲しいんだ!

    スクリプトはrootに作ったゲームオブジェクト VCI Objectに直接記述するか、外部のluaファイルをリンクすればいいらしい。
    Unityの記述スペースはちっちゃくて見にくいのでエディタを使います。

    前の記事で"普通のエディターでも大丈夫っぽい"って書いたけど
    ちゃんとVCI作るつもりならやっぱり公式の手順通りにやったほうがいいんだろう、そうなんだろう。
    よし、VSCode使うよ。

    公式にVisual Stuio Codeの導入方法が書いてある
    https://virtualcast.jp/wiki/doku.php?id=vscode:tutorial

    そのまえに確認事項

    上記のページの説明は該当するVCIモデルのフォルダが作成されてることが前提だけど
    バーチャルキャスト1.6.2aのVCI更新
    https://virtualcast.jp/wiki/doku.php?id=vci:updatelog:1.6.2a

    で、

    デフォルトで以下の機能が無効になります。

    • VCIロード時に VCIフォルダ を作成する。
    • VCIロード時にVCIに記述されたスクリプトを VCIフォルダ/_main.lua にコピーする
    • 対象の VCIフォルダ/main.lua の更新を監視して、更新時にスクリプトをリロードする
    に変更されてる。
    VSCode導入する前に、Unity上でScript Enable Debuggingにチェックを入れてからVCIを出力するの。





    出力しただけではだめで、THE SEED ONLINEにアップロードして、さらに 最低一回はバーチャルキャスト内でモデルを呼び出した経歴がないとあかんのや。

    ようやくVSCodeのインストール

    実行ファイルをダウンロードしてインストールするのは通常通りなので略。
    検索バーで[VSCode-EmmyLua]と入力し、プラグインを追加してください。

    って書いてあるけど No extensions found. になった。"EmmyLua"で検索するとそれっぽいのがあったのでそれをインストールしたよ。



    日本語化するには
    Japanese Language Pack for Visual Studio Code
    で検索してインストール。



    command + shift + p

    を押してコマンドパレット(入力欄)を表示させ、”config”って打ったら
    Configure Display Languageってのがあったので そこからjpを選んで日本語化もできた。




    ふぅ~エディタ使いたいだけなのになかなかハードルが高い…こんな本格的なもの私に必要だろうか…
    入力補助は便利だけど、まちがって必要な行を消しちゃってもエラー内容は指摘してくれるのかな?
    使い方全然わかんないです。

    エラーが出るかどうか調べるの、公式にありました

    VScodeでデバッガを使用する方法

    https://virtualcast.jp/wiki/doku.php?id=vscode:debugger

    これも全部やるんですか?
    恐ろしくハードル高いよ、書いてある通りにやっていくね。

    まず、VirtualCastを立ち上げてスタジオに入り、デバックを行うVCIを取り出します。その後、VScodeの[デバッグ]>[デバッグ開始]からデバッガを起動します
    立ち上げたよ!そして! そして…?
    ゴメン よくわからない。




    バーチャルキャストを立ち上げる前でも文法エラーなんかはVSCodeで確認できた。
    左下のエラー1って出てるx印を押したらエラーの内容が表示された!
    「31行目あたりに"end"が抜けてるんじゃない?」っていう警告だと思う たぶん。


    まーいいや!こんな感じでスクリプトを書いていくね。


    続く。