【怎麼生】
I.MAGiCスクリプト会議室メッセージNo.242で話題になった「call/SetEvent系命令でメソッド名を綴り間違えた場合、その場所をみつけるのが難しい」について、なんとか簡単にエラー個所をみつける方法はないですか?
【説破】 4.0.3.2
あります。
が、この方法は若干の危険を伴いますので、以下の説明を全部ちゃんと読んで、その意味することが理解できた人だけ試みてください。鵜呑みしたまま折角の製作中レイアウトを潰してしまっても、ボクの知ったこっちゃないので、そこんとこはよろしくです。
まず、この問題についておさらいしておきましょう。
call/SetEvent系命令で実行するメソッド名を書き間違えた(実行したいメソッドは存在するのだが、ある行でだけそのメソッド名を綴り間違えている)場合、ビュワーの起動時に、
{綴り間違えたメソッド名} 未定義のメゾットを参照した
というエラーが表示されます。
これでは、レイアウトのあちこちに散らばっているスクリプトの、どこにその綴り間違いがあるのかわかりません。
もちろん、このスクリプトを書いたのはあなた自身のはずですから、問題のメソッドを実行しようとするcall/SetEvent系命令が、せいぜい2〜3のオブジェクトのどこかだ、と絞り込むことが出来れば見つけることは困難ではないでしょう。
一方で、ある程度以上に複雑な自動運転を試みている場合、似たようなスクリプトが数十以上のオブジェクトに渡って散らばっている場合があり、これらを1つ1つ開いて綴り間違いを探すのは、どうして骨の折れる作業です。
そもそも人間の脳味噌は、活字を読むに際し、必ず「ここにはこう書いてあるはずだ」という予断をもって臨むように設計されています。従って、自分が書いた文章の誤字脱字というのは、探すのが極めて難しいですし、予断をもって臨むことができない=
自分の想像を超えた思考を有する人によって書かれた文章は極めて読み辛いものになります。
戯言はさておき。
自分で書いてしまった間違いを見つけるためにどうすればいいか。答えは簡単で、どうせ読んでも「自分は間違えていないはず」という思い込みに邪魔されるに決まっているのですから「読まなければいい」。
* * *
基本的な考え方は「エラーが出なくなるまで、部品を消していく」です。
綴り間違いを含む部品がレイアウト上に存在する限り、VRMビュワーは起動できません。逆に、綴り間違いを含む部品がなくなればビュワーは起動するはずですから、部品を1つずつ消していって、ビュワーが起動するようになった直前に消した部品の中に、問題となる綴り間違いがあることが確実になります。
<手順>
(1) 作業中の(エラーが発生している)レイアウトを保存して一旦レイアウターを終了します。
(2) [重要]レイアウトファイルを万が一に備えてコピーします。
(3) コピーした方のレイアウトを開きます。
(4) 綴り間違いスクリプトを含む可能性のある部品を1つ〔削除〕します。
(5) ビュワーの起動を試みます。起動できれば(4)で消した部品のスクリプトの中に綴り間違いがあったことになります。
(6) ビュワーが起動できるようになるまで、(4)〜(5)を繰り返します。
(7) ビュワーが起動できたら〔元に戻す〕で、最後に削除した部品の名前を確認します。
(8) 元のレイアウトを開き、(7)で確認した部品のスクリプトのcall/SetEvent系命令が書かれた行を見ていけば、そこに綴り間違いがあるはずです。
注意事項をいくつか。
レイアウトファイルのコピーを作る手順は、絶対に守るべきです。これには明確な理由があります。VRM4.0.3.2では〔元に戻す〕操作をおこなった場合、部品の名前と場所は復元されますが、そこに含まれていたスクリプト(編成の場合はリソースも)が復元されません。
従って、作業中のレイアウトにそのままこの手順を適用すると、〔元に戻す〕を繰り返しても「元に戻らない」ことになります。万が一、この作業中に〔上書き保存〕をしてしまった日には泣くに泣けません。
(5)の時点で、エラーがなくなるどころか増える場合があり得ます。これは、部品を削除しているのですから、その部品の名前であるとか、そこに含まれるグローバル変数/メソッドを参照するスクリプトがエラーを出すことによります。
これは、少なくともこの作業を進める段には無視して構いません。最初に問題となったエラーメッセージが出なくなるまで、この作業を繰り返せば良いだけの話です。逆に、最初に問題となったエラーをちゃんと覚えておかないと、エラーが増える一方で、どの部品を消した時点で綴り間違いを含む部品に当たったのかがわからなくなります。
この方法は、未定義メソッドエラーの他、外部参照をおこなっているグローバル変数の未定義エラーでも利用できます。お困りの方はお試しあれ。但し、最初にも書いたように、この手順を誤って適用して虎の子のレイアウトを潰してしまっても、ボクちゃんの知ったこっちゃないのでよろしく。