Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save GRGSIBERIA/8566424 to your computer and use it in GitHub Desktop.
Save GRGSIBERIA/8566424 to your computer and use it in GitHub Desktop.
表情モーフのデータをCSVから読み込む.1行目は表情名,2行目は枠の種類,3行目以降から実データ.頂点インデックス,X,Y,Zの順番で格納.XYZは移動量.
// Run()関数内の処理を記述
// 外部クラスの活用などは一般形式のスクリプトコードを使用してください.
// プラグイン変数は IPERunArgs args を通して取得可能
// コードに自動的に追加されるヘッダ/フッタはメニューから有効化/確認が可能(ヘッダは標準で有効設定)
string name;
ExpressionCategory category;
var vectors = Dictionary<int, IPEVector3>();
// CSVを1行1行読み込み
using (var reader = new StreamReader("C:\\input.csv", Encoding.GetEncoding("shift_jis")) {
name = reader.ReadLine();
switch (reader.ReadLine()) {
case "Eye":
category = ExpressionCategory.Eye;
break;
case "Rip":
category = ExpressionCategory.Rip;
break;
case "Eyebrow":
category = ExpressionCategory.Eyebrow;
break;
case "Others":
category = ExpressionCategory.Others;
break;
}
while ((var line = reader.ReadLine()) != null) {
var splited = line.Replace(" ", "").Split(",");
var i = int.Parse(splited[0]);
var v = builder.CreateVector3(float.Parse(splited[1]), float.Parse(splited[2]), floatParse(splited[3]));
vectors.Add(i, v);
}
}
// 新しい表情インスタンスを作成
var new_exp = builder.CreateExpression();
new_exp.Name = name;
new_exp.Category = category;
// Eye Rip Eyebrow Others Nothing
foreach (var kv in vectors) {
var offset = builder.CreateExpressionOffset();
offset.Index = kv.Key;
offset.Offset = kv.Value;
new_exp.Offsets.Add(offset);
}
var connector = args.Host.Connector;
var pmd = connector.Pmd.GetCurrentState();
pmd.Expression.Add(new_exp);
pmd.FrameExpression.Add(pmd.Expression.Count-1); // 表情枠追加
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment