「アップデータ4.0.3.5のFOV制御の”バグ”について」
電波ゆんゆん
中の人向けのバグレポート。
一般的なユーザーは無理に読まなくてもいいし、仮に読んだとして理解できなくても悩まなくていいです。
これについて。
一言でまとめると、
・地上カメラオブジェクトで実行されるSetCameraFOV命令によって、編成カメラのFOVを変更することが出来る。
ということになるが、これはバグの類であろうと思われる。理由は以下の通り。
・アップデータ付属のreadmeにその旨が明記されていない。
・VRM4スクリプトの基本ポリシーであるはずの「命令が記述されたオブジェクトに影響を与える」から逸脱している。
・複数の地上カメラでSetCameraFOV命令が実行された場合(演出上の事前準備として当然あり得る)最後に実行された命令のパラメータが本来無関係な編成カメラに影響を与えるのは不合理である。
おそらくは、4.0.3.5で実施された修正の中でも「スクリプトで地上カメラと車両のカメラを切り替えたときの一部動作を変更しました」とされているものに関連して発生した問題であろうと思われるが、結果的に編成カメラに対する新機能追加のような形になってしまっている(にも関わらず、前述したようにVRM4スクリプトの仕様との整合性を欠いている)ので、ユーザーがこれを当然のものとして利用し始める前に、然るべく修正がおこなわれることを期待する。
具体的には、
・地上カメラオブジェクトで実行されるSetCameraFOV命令が、いかなる場合においても編成カメラに影響を与えないようにする。
・編成オブジェクトでもSetCameraFOV命令が使えるように拡張する。
である。バグ修正と言う意味では前者のみで良いと思うが、編成カメラFOVの動的な変更が可能であることを、意図せぬこととは言えユーザーに示してしまった以上、後者の機能追加もおこなわれて然りと思う。
補足。
以下はブラックボックス的な解析から得た仮説であるが、地上カメラが配置された部品毎に独自のプロパティを持つオブジェクトであるのに対し、編成カメラはレイアウトオブジェクトに従属する特殊なオブジェクトであって、自身がフォーカスしたり追従したりする編成をプロパティとして有していると考えられる。
この差異から、編成スクリプトからSetCmeraFOV(またはそれに類する命令)を駆動することは、エンドユーザーが考える以上に面倒な実装になるのだろう、ということは想定可能だ。つまり、ビュワープログラムは、編成オブジェクトでSetCameraFOVが実行されたとき、その編成に属するプロパティを更新するのではなく、まずはレイアウトオブジェクトのフォーカスされている編成を示すプロパティがその編成に向いているかを確認し、向いている場合に限りFOVプロパティを更新する、という手順を踏まなければならない。
加えて、すべての編成のFOVが連動することは(たとえ実装がそうであったとしても)ユーザーからすれば不条理きわまりないから、FocusOut/Inイベントに連動して編成カメラのFOVの値を退避/更新し、それぞれの編成が固有にFOVを有しているかのように「見せかける」といった工夫も必要だろう。これはユーザー自身がスクリプトで書くことも出来るが、ユーザー任せにするのはあまりに無作法な実装のように思う。
* * *
よもや、とは思うが。
今回のコレが、意図せぬバグではなく、確信犯的に実装された「オマケ機能」なのだとしたら、少なくともボクは、開発者のシステムデザインのセンスを疑う、と断言しておく。ユーザーに必ずしもレディネスがないことを承知の上で提供したパラダイムを、自らブチ壊してどうするよ?