PmxEはプラグインでやったときとか、TransFormViewから変形した時とか、
なんかふとした時に、jointの値に「NaN」が入ってしまうことがある。
当然ながらちゃんとした数値ではないので、動かすとアババババってする。
でもこれPmxEの「PMXデータの状態確認」では引っかからない。
(ファイル>PMXデータの状態確認で、△や✕がついてると正常に動かない可能性があるので、
モデルが完成したぞい!と思ったら配布する前にチェックするといいよ。
あと配布モデルをもらってきておかしいな?と思ったらここからチェックするといいよ。)
「PMXデータの状態確認」で引っかからないの、モデラー(セットアッパー)としては結構やっかいで、
知らないうちにデータがアウトになってるのやめて欲しい。
(知らないうちに軸制限が狂うのもやめて欲しい)
チェックするプラグインが欲しいよね、という話があったので作った。
もうちょっと手直しして一般配布します。
プログラミングとかやってない人には分からないと思うので一応説明すると、
NaNというのは、まあなんだ、簡単に言うと
「プログラム上は数値として扱うけど、正常でない数値」 のことだ。
0を0で割るとか、虚数(2乗すると-1になるやつ)とかね。
なので正常でない角度を指定されてもMMDくんが混乱するのでアババババってなるんですけど。
--ここからプログラミングの話なので読まなくていいです。--
で、このNaNが入ってしまったPmxデータをもらったんですけど、
jointの数値をC#で取り出す場合って、型はfloatなんですよ。
角度制限下限は
this.PMX.Joint[i].Limit_AngleLow
でV3で取り出せるんですけど。
スマートにやる方法が分からなかったので、
float.IsNaN(this.PMX.Joint[i].Limit_AngleLow.X)
でTRUE/FALSEをチェックしてみたんですけど、全部FALSE。
(jointは変数に入れてるので、いちいちthis.PMX.Joint[i]とは書いてないです。大丈夫です。)
で、メッセージボックスで該当のjointインデックスの値を表示してみると、ちゃんとNaNと表示されるんですね。
でもメッセージボックスはstring型なので、stringに型変換して入れてるんですけど。
最終的に
this.PMX.Joint[i].Limit_AngleLow.X.ToString() == "NaN"
で、TRUEになりました。
お前string型だったんかーーーーい。
っていう。
float型の中にstring型のNaNって入れられるものなの??
というかこれは無理矢理stringにしてるだけで、floatのNaNとして扱ってるの?
いや、扱ってないよな?IsNaNでFALSEでもんな??
jointをcsvコピーしたら確かにそのままNaNって入ってたので、
薄々stringじゃないかなこれ…とは思ってたんですけど、まさかなーと思ったし、
この値取り出してきたらfloatだよ!!って怒られた(VSEに)ので、最初にIsNaNにしたんですよ!
私はプログラミングド素人なのでなんか間違ってたら教えて下さい。
ということで、チェックはできるようになったので、
あとはNaNが入ってる所を自動的に"0"に置き換えるかどうかのチェックボックスを作ります。
ダイアログ出して選択した結果をもらってくるの死ぬほど苦手なので、ダメだったら2種類同梱します。
Class間の数値のやり取りの概念が未だにわからないんだ。
ミニキャラプラグインどうやって作ったんだろう。
横jointプラグインもダイアログで選択するようにできなくて2種類同梱した。
とりあえずやりたいことだけを場当たり的にできるように独学してるとこれだよ。
誰か分かりやすく教えてくれ。
なんかふとした時に、jointの値に「NaN」が入ってしまうことがある。
当然ながらちゃんとした数値ではないので、動かすとアババババってする。
でもこれPmxEの「PMXデータの状態確認」では引っかからない。
(ファイル>PMXデータの状態確認で、△や✕がついてると正常に動かない可能性があるので、
モデルが完成したぞい!と思ったら配布する前にチェックするといいよ。
あと配布モデルをもらってきておかしいな?と思ったらここからチェックするといいよ。)
「PMXデータの状態確認」で引っかからないの、モデラー(セットアッパー)としては結構やっかいで、
知らないうちにデータがアウトになってるのやめて欲しい。
(知らないうちに軸制限が狂うのもやめて欲しい)
チェックするプラグインが欲しいよね、という話があったので作った。
もうちょっと手直しして一般配布します。
プログラミングとかやってない人には分からないと思うので一応説明すると、
NaNというのは、まあなんだ、簡単に言うと
「プログラム上は数値として扱うけど、正常でない数値」 のことだ。
0を0で割るとか、虚数(2乗すると-1になるやつ)とかね。
なので正常でない角度を指定されてもMMDくんが混乱するのでアババババってなるんですけど。
--ここからプログラミングの話なので読まなくていいです。--
で、このNaNが入ってしまったPmxデータをもらったんですけど、
jointの数値をC#で取り出す場合って、型はfloatなんですよ。
角度制限下限は
this.PMX.Joint[i].Limit_AngleLow
でV3で取り出せるんですけど。
スマートにやる方法が分からなかったので、
float.IsNaN(this.PMX.Joint[i].Limit_AngleLow.X)
でTRUE/FALSEをチェックしてみたんですけど、全部FALSE。
(jointは変数に入れてるので、いちいちthis.PMX.Joint[i]とは書いてないです。大丈夫です。)
で、メッセージボックスで該当のjointインデックスの値を表示してみると、ちゃんとNaNと表示されるんですね。
でもメッセージボックスはstring型なので、stringに型変換して入れてるんですけど。
最終的に
this.PMX.Joint[i].Limit_AngleLow.X.ToString() == "NaN"
で、TRUEになりました。
お前string型だったんかーーーーい。
っていう。
float型の中にstring型のNaNって入れられるものなの??
というかこれは無理矢理stringにしてるだけで、floatのNaNとして扱ってるの?
いや、扱ってないよな?IsNaNでFALSEでもんな??
jointをcsvコピーしたら確かにそのままNaNって入ってたので、
薄々stringじゃないかなこれ…とは思ってたんですけど、まさかなーと思ったし、
この値取り出してきたらfloatだよ!!って怒られた(VSEに)ので、最初にIsNaNにしたんですよ!
私はプログラミングド素人なのでなんか間違ってたら教えて下さい。
ということで、チェックはできるようになったので、
あとはNaNが入ってる所を自動的に"0"に置き換えるかどうかのチェックボックスを作ります。
ダイアログ出して選択した結果をもらってくるの死ぬほど苦手なので、ダメだったら2種類同梱します。
Class間の数値のやり取りの概念が未だにわからないんだ。
ミニキャラプラグインどうやって作ったんだろう。
横jointプラグインもダイアログで選択するようにできなくて2種類同梱した。
とりあえずやりたいことだけを場当たり的にできるように独学してるとこれだよ。
誰か分かりやすく教えてくれ。