まず結論
- 公式に書いてある説明通りにすれば使えてたよ
- VCIのスクリプトの開始はバーチャルキャスト側からだよ
- 最初の処理は一時停止しないよ。数十フレームしてから止まるよ
この記事にはMoonSharp Debugの使い方は書かれていません。
MoonSharp Debugの使い方については拙著の補足記事
「VCIデバッグ時の簡単なMoonSharp Debugの使い方」
を参考にしてください。
導入
みなさんこんにちは!VCIスクリプト書いてますか?
スクリプトを作っているとよくわからないバグが出るときがありますよね?
そんなとき役立つのがデバッガーです。
VSCodeにはVCIスクリプトのデバッガーに使えるMoonSharp Debugという拡張機能があります。
これを使えばバーチャルキャスト内で動かしているVCIのスクリプトの 一時停止 や 一時停止中の変数の中身の確認 などができます。
つまりprint文を書かなくてもスクリプトの動きを確認できるのです!
(※他の人との同期挙動の検証除く)
・・・なのですが私が初めてMoonSharp Debugを導入したときうまく使えず「どこかの設定が間違っていて使えないのかな?」と思って2年くらいずっと放置してました。
実は使えていたにも関わらず!
そして最近ようやく使い方を「完全に理解した!」ので
- 何故使い方がわからなかったのか?
- 何に引っかかっていたのか
を書いていきます。
まずは環境設定
環境設定は公式の説明ページを参照ください。
ここから先は環境設定が完了しているものとして話を進めていきます。
世間一般的(主観)なデバッガーとは?
世間一般で一番使われているであろうデバッガーと言えば?
それはExcelやWordのマクロ作成で使われる Visual Basic Editor ですね!(主観)
(特にExcelのマクロはどこにでもいますね)
Visual Basic Editorはスクリプトを書いて再生ボタンを押してあげれば動きます。
止めたいところがあれば行の左側をクリックしてマークを付けてあげればそこで止まります。
スクリプトの作成は別としてデバッガーであるVisual Basic Editorの使い方自体は簡単です。
有名なIDEのVisual Studioとかも大体同じですね。
じゃあMoonSharp Debugは?
今度はVSCodeでやっていきましょう。
VSCodeを立ち上げてデバッグしたいスクリプトファイルを選んだら
の赤枠で囲んだ部分にあるを押すと↓のようにデバッグ用のペインが表示されます。
デバッグ用ペインの上の方にはVisual Basic Editorと同じように再生ボタン
がありますね!
バーチャルキャストを起動してない状態でとりあえず押してみる。
はいVSCodeさんに怒られました。
どうやら 「127.0.0.1:41921に繋がんねーんだけど?ちゃんと設定してる?」 と言っているようです。
バーチャルキャストを起動して再生ボタンを押してみる。
ではバーチャルキャストを起動します。
VCIを出すよりもっと前のスタジオやルームにすら入っていないトップ画面の状態でやってみます。
何やらツールボタンみたいなものが出てきて 「MoonSharpと繋がったよ!」 と言われました。
Q:んで再生ボタンを押したけどVCIスクリプトは動かないの?
A:はい。これだけじゃ動きませんしMoonSharp Debugにスクリプトを動かす機能はありません。
先ほどの再生ボタンをよく見ると MoonSharp Attach と書かれていますね。
つまりこのボタンはスクリプトを動かすボタンではなく、 バーチャルキャスト(の中のMoonSharp)に接続するためのボタン だったというわけです。
なのでスクリプトを動かしてデバッグするにはバーチャルキャスト内でVCIを取り出してから行わないといけません。
まぁデバッグはVCIオブジェクト自体の動きも見ながら行いたいので当然と言えば当然ですね。
でもこれVisual Basic Editorみたいなのしか知らない私は最初全然わかりませんでした。
それとMoonSharp Debugにはスクリプトの再実行機能もありません。
再実行したい場合は通常のようにバーチャルキャスト上で再読み込みするか、デバッグ用のスクリプトファイルを上書き保存する方法で行います。
バーチャルキャストとMoonSharp Debugとのやり取り
大体次みたいな感じです。
- まず接続
(接続の際にデバッグしたいVCIを出してなかった場合は、VCIを出した後にツールボタンのを押してください。)
基本的にMoonSharp Debugでやるのは一時停止位置の指定になります。
改めて最初から実行したい場合は先ほど説明したようにバーチャルキャストで操作して行います。
なお、この説明で書かれているバーチャルキャストというのはローカルで動いているアプリケーション側のことです。
MoonSharp Debugがインターネット上のバーチャルキャストのサーバーと直接やり取りをすることはありません。
最大の罠 ~始めの方の処理は一時停止しない!~
それではやってみましょう。
これを動かした場合、3行目の
local x = "World"
で停止するので、最後のprint文の「end」は表示されないはずです。
実行結果はこちら
「end」が表示されてしまってます。止まってません。
これ何度やっても結果は変わりません。
2年前の私はここで自分の設定が間違ってると思いMoonSharp Debugを使うのを諦めてしまいました。
実はこの状態でもちゃんとMoonSharp Debugはちゃんと動いている のですがとある仕様?により止まらなかったのです。
追試
そして結果はこちら
MoonSharp Debugが動くVSCode側では8行目で停止したと表示されました。
バーチャルキャスト側はというと・・・
62カウントされたところで停止していました。
つまりどういうことかというと
MoonSharp Debugで一時停止箇所を指定しても最初のある程度の時間は停止をできないようです。
たぶんバーチャルキャストとMoonSharp Debugとの通信でどうしてもラグが発生してしまうためで仕様上のものと思います。
MoonSharp Debugを使うときはこの点に注意が必要です。
おしまいに
というわけで今回は「私はどうしてMoonSharp Debugを使えなかったのか?」という内容で記事を書いてみました。
デバッグ作業は辛いものですが、この記事が少しでもみなさんの役に立てば幸いです。
それではまたの機会に