以前、針金Pさんの数値表示エフェクトを使って、
その時々の身長を表示した動画を投稿しました。
実はこのエフェクト、デフォルトで表示される数値は
「再生時間」「ワールドビュー行列」などです。
違う数値を出したい場合は中身を書き換えなければいけません。
そんなわけで、数値表示エフェクトをいじります。
※詳しいわけではないので、間違えてたらすまん。
※なんかこう、自己責任でお願いします。すまん。
……私が改変したモノでよければ、ここからどーぞ。
bowlroll.net
何はともあれ、「pmdver」フォルダにある
「NumbersPmd_Float.fx」をメモ帳で開きましょう。
//////////////////////////////////////////////////////////////////////////////////////////////// // // NumbersPmd_Float.fx ver0.0.4 数値データの表示(float型) // 作成: 針金P // //////////////////////////////////////////////////////////////////////////////////////////////// // ここのパラメータを変更してください float time : Time; // ここに表示させる数値、または変数,式を代入(正確に読めるのは全7桁程度) static float Value = time; int FractCount = 3; // 少数以下桁数 //#define PLUS // +表記する場合はコメントアウトを外す // 解らない人はここから下はいじらないでね ////////////////////////////////////////////////////////////////////////////////////////////////
というわけで、今回はこの辺を触ります。
あちこち色々説明が書いてありますね。ありがたい。
めくるめく機械の世界へ飛び込む前に、C#の超基本的なことを。
- // 以降は注釈になり、実際に動かす時は無視される
- // を書くことで命令文を残しつつ無視させるテクニックを「コメントアウト」と呼ぶ
- 命令文の最後には基本的に ; を付ける
変わらざる数値の終わりに
// ここのパラメータを変更してください float time : Time;
さてさて……。いきなり注釈に
「ここのパラメータを変更してください」と書いてあるので、
試しにちょっと書き換えてみましょう。*1
// ここのパラメータを変更してください float time = 50.0f;
……50って書いたら、50って出ましたね。
これで思いつく限りの数字を用意……うーん、だるい。
何かの座標をそのまま出せればいいのに。
座標ちゃんはどこからくるの?
ところで、このエフェクト、
もう少し下の方を見ると、こんな風になっています。
// 解らない人はここから下はいじらないでね //////////////////////////////////////////////////////////////////////////////////////////////// // パラメータ宣言 float PmdSi : CONTROLOBJECT < string name = "(self)"; string item = "スケール"; >; float PmdTr : CONTROLOBJECT < string name = "(self)"; string item = "透過"; >; float3 PmdPos : CONTROLOBJECT < string name = "(self)"; string item = "センター"; >; static int iValue = round(Value * pow(10.0f, FractCount)); int TexCount = 15; // テクスチャ文字種類数
以前扱ったScaleエフェクトでも見たコトバがいますね。
float3 PmdPos : CONTROLOBJECT < string name = "(self)"; string item = "センター"; >;
この一行で「PmdPos」に、
自身(self)のセンターボーンの座標をメモっています。
……自身(self)って誰?と思うかもしれませんが、
エフェクトを読み込む時に
MMDへ読み込ませるモデル・アクセサリが(self)です。
エフェクト自体には座標も表情もありませんからね。*2
さて。
行頭の「float3」はメモる場所、変数の型指定です。
どういうタイプの電卓を取り出すか、みたいなもので、
float3は小数点を含む数値を3つ同時に入れられる電卓です。
表情や大きさ、透明度は数値が1つなので「float」で十分です。
次の「PmdPos」はメモる場所の名前です。電卓の名前ですね。
名前は自由ですが、一文字間違えただけでも別物扱いなので
なるべく分かりやすい名前を心がけたいものです。……うん……。
「CONTROLOBJECT」はモデル・アクセサリの
あんなことやこんなことを赤裸々に暴露するコマンドです。
その直後に「 < >; 」で何を調べるかを指定しています。
「string name = "(self)";」で
どのモデル・アクセサリを調べるか指定します。
Scaleエフェクトの時は"ScaleControl.pmd"と書いてあったとこ。
「string item = "センター";」で
どのボーン・表情を調べるか指定します。
今回はセンターボーンの座標をチェックだ。
本題の戦士
……で、えっと、なんだっけ。そうだそうだ。
// ここのパラメータを変更してください float time : Time;
50とか書いたのは元に戻して、と。
改めてここに帰ってきました。
さあさあ、座標を拾ってみましょう。
// ここのパラメータを変更してください float3 time : CONTROLOBJECT < string name = "(self)"; string item = "センター"; >;
はい。
さっきまでの雑な説明はどこへいったのか。ほぼコピペです。
早速、MMDに読み込ませて試してみましょう。
……。…………。
ダメですね。
X座標が表示されるようにはなりましたが、
X座標に応じて表示位置が変わるので、見づらいです。
Y座標も表示位置を指定する為に使っているので、
残っているのはZ座標だけです。
厳密にはZ座標も使われているんだけど、今回は見なかったことにします。
というわけで次です。これが最後です。
今この「time」は「float3型」です。数値が3つ入ってます。
3つある数値のどれのコトなのか明確にしたい時は、
後ろに「.x」「.y」「.z」のどれかを付けて指定します。
// ここに表示させる数値、または変数,式を代入(正確に読めるのは全7桁程度) static float Value = time.z;
これでセンターボーンのZ座標の数値が表示されるようになりました。
後は表示させたい数値をセンターボーンのZ座標に放り込むだけです。
やったね!!
書き換えた後のものがこちら。
//////////////////////////////////////////////////////////////////////////////////////////////// // // NumbersPmd_Float.fx ver0.0.4 数値データの表示(float型) // 作成: 針金P // //////////////////////////////////////////////////////////////////////////////////////////////// // ここのパラメータを変更してください float3 time : CONTROLOBJECT < string name = "(self)"; string item = "センター"; >; // ここに表示させる数値、または変数,式を代入(正確に読めるのは全7桁程度) static float Value = time.z; int FractCount = 3; // 少数以下桁数 //#define PLUS // +表記する場合はコメントアウトを外す // 解らない人はここから下はいじらないでね ////////////////////////////////////////////////////////////////////////////////////////////////
たった2行しか変わってないけど、大事な2行です。
ちなみに。もうちょっと頑張ると
表示する数値を指定する専用のボーンを用意して、
「X座標×Y座標÷Z座標 の結果を表示する」とかもできます。
気が向いたらレッツ・チャレンジ。