VRMNXでログ出力に使うvrmapi.LOG()ですが,いや,実はコレが文句タラタラでして・・・。
- 型がstr, int, floatしか受け付けてくれない
- したがってうっかりdictやlistを入れるとTypeErrorが出てくる
- listやdictを使うシーンでのデバッグではstr()を噛まさないといけないけど面倒くさいし,忘れる
- pythonオブジェクトのstr属性のことを何だと思っているんだ!
こういうものは,仕方がないので自分で何とかする。
def LOG(*objects, sep=' ', end=''): """すこし賢いログ出力。 Python標準のprint()とほぼ同じ形式でVRMNXのスクリプトLOGに出力します。 objectsのすべてにstr()を引っかけて,sepで区切りながらつなげて出力します。 スクリプトLOGではString型と表示されますがobjectsの実体とは無関係です。 sep, endを設定する場合キーワード引数で設定してください。 Args: objects: LOGに出したいオブジェクト。str()した上で出力します。 sep: objectどうしの区切り。 end: 行末。 """ output = sep.join(map(str, objects)) + end vrmapi.LOG(output)
文句タラタラだけど,旧世代のVRMスクリプトよりは5000兆倍素晴らしいのでがんばってやっています。
でも実は,地味にすごい(?)機能もログウィンドウには付いています。
エラーロガーとしては当たり前の機能なような気もしますが,VRMNXのPythonエンジンはどのオブジェクトに書いたコードも区別なく実行する…ように見えていたのに,VRMNX側(vrmapiの実体)には区別できるらしいです。