「ユーザーブロマガ」サービスの終了(10月7日を予定)にあたり、残したいユーザーブロマガ記事への投票を受け付けています

PMDEプラグインの作り方 モーフ操作編1
閉じる
閉じる

PMDEプラグインの作り方 モーフ操作編1

2013-03-17 02:52
  • 1

残したいユーザーブロマガ記事への投票はこちらです

PMDEプラグインの作り方 モーフ操作編1

プラグインとはいえ普通にC#なので記述の仕方はいろいろありますが、わかりやすくするために記述方法に制限をかけています。必ずこのやり方でないといけないわけではありませんのでご注意ください。

前回と同様にこのサンプルプラグインプロジェクトファイル(http://bowlroll.net/up/dl15755)を元に説明しますので必ずDLしてください。
この中にはモーフ操作に必要な機能をあらかじめ入れてあります。説明もそれに沿った形で説明します。また、このプロジェクトファイルの内容を流用してプラグインを作成することは問題ありません。
以下モーフ操作とそのコードを記述します。前回と同様にサンプルプロジェクトファイルにこぴぺすれば動作すると思います。


1.モーフIndexの取得
//モーフ名
string MorphName ="まばたき";
//モーフIndex
int Index=-1;
//モーフを順番に検索します。
for (int i = 0; i < this.PMX.Morph.Count; i++)
{
//モーフの名前が同じものがあればIndexにiを代入します。
if (this.PMX.Morph[i].Name == MorphName)
{
Index =i;
}
}

2.モーフ表示枠内Indexを取得する。
//モーフ名
string MorphName="まばたき";
//モーフIndex
int Index=-1;
//モーフオブジェクトの取得
IPXMorph Morph = (IPXMorph)this.PMX.Morph[this.GetMorphIndex(MorphName, 1)];
//表情表示枠の取得
IPXNode ExpressionNode = (IPXNode)this.PMX.ExpressionNode;
//表情表示枠の中を順番に検索
for (int i = 0; i < ExpressionNode.Items.Count; i++)
{
if (ExpressionNode.Items[i].IsMorph)
{
//一致するものがあればIndexにiを代入
if (ExpressionNode.Items[i].MorphItem.Morph == Morph)
{
Index=i;
}
}
}

3.モーフを追加する。
//kindはモーフの種類。
//モーフの挿入場所を設定。
int position =0;
//モーフ表示パネルの設定
// 0:システム予約 1:眉(左下) 2:目(左上) 3:口(右上) 4:その他(右下)
int panel=1;
//モーフオブジェクトを生成する。
IPXMorph item = PEStaticBuilder.Pmx.Morph();
//オブジェクトの設定をする。
item.Name = MorphName;
item.NameE = MorphNameE;
item.Kind = kind;
item.Panel = panel;
//モーフを追加する。
this.PMX.Morph.Insert(position, item);

4.モーフを表情表示枠に追加する。
//モーフIndexを取得
int i = GetMorphIndex(MorphName, 1);
//表示枠に追加するオブジェクトを作成
IPXNodeItem item = PEStaticBuilder.Pmx.MorphNodeItem(this.PMX.Morph[i]);
//表情表示枠にモーフを追加する。
this.PMX.ExpressionNode.Items.Add(item);

5.ボーンモーフにボーンを追加する。
//モーフの取得
IPXMorph morph = (IPXMorph)this.PMX.Morph[this.GetMorphIndex("お辞儀")];
//ボーンの取得
IPXBone Bone=(IPXBone)this.PMX.Bone[this.GetBoneIndex("頭")];
//ボーンモーフであることを確認

if (morph.Kind == MorphKind.Bone)
{
//ボーンモーフアイテムの生成
IPXBoneMorphOffset item = PEStaticBuilder.Pmx.BoneMorphOffset();
//ボーンモーフアイテムの設定
item.Bone = Bone;
item.Rotation = rotation;
item.Translation = translation;
//ボーンモーフアイテムの追加
morph.Offsets.Add(item);
}

6.グループモーフの追加
//モーフの取得
IPXMorph morph = (IPXMorph)this.PMX.Morph[this.GetMorphIndex("目閉じる")];
//追加するモーフの取得
IPXMorph addmorph = (IPXMorph)this.PMX.Morph[this.GetMorphIndex("まばたき")];
//影響度
float ratio=1.0f;
//グループモーフであることを確認

if (morph.Kind == MorphKind.Group)
{
//グループモーフアイテムの生成
IPXGroupMorphOffset item = PEStaticBuilder.Pmx.GroupMorphOffset();
item.Morph = addmorph;
item.Ratio = ratio;
morph.Offsets.Add(item);
}

頂点モーフ・材質モーフも同様の操作です。

モーフの基本的な操作は以上です。

次に応用的な操作のサンプルを記述します。
広告
×
ありがとうございます!
とても参考になりました!!^^
103ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。