今回は、選択メッシュのスケルゴンをボーンに変換して中心点回転記録を行う
スクリプトをのせてみようかと思います。この処理はLWでアニメーションを作成する
ならば、おそらく必須、、のはずです。いつもならば、コンパイルしてパネルコント
ロールでオプションをつけるところですが、1ボタンでサクッと変換したいと思うはず
なので、コンパイルせずにいっそソースごと載せてみます。
内部でDS_RecordPivotRotというプラグインを使用していますが、LW9以前の
ユーザであればその部分を書き換えて下さい。後は必要ない部分を削除したりして
各自で調節すると幸せになれるかもしれません笑。
@warnings
@script generic
@name ConvertSkelgonAndRecPivRot
generic {
// 選択アイテム群の先頭アイテムを選択
var SelectItem = Scene().firstSelect();
// 選択アイテムがボーンの場合は親のメッシュを検索
while( SelectItem.isBone() ) {
SelectItem = SelectItem.parent;
}
// 選択アイテムがメッシュでない場合は終了
if( SelectItem.isMesh() == 0 ) return;
// ボーン削除時の警告ダイアログを表示しないように設定
AutoConfirm(1);
// ClearAllBones()は最後に選択したメッシュの
// ボーン群を削除するので、一旦最初に選択した
// アイテムのみを選択状態に設定
SelectItem(SelectItem.id);
// 選択アイテムが既にボーンを保持している場合は削除
if( SelectItem.bone() ) ClearAllBones();
// 再び警告ダイアログを表示するように設定
AutoConfirm(0);
// 選択アイテムのスケルゴンをボーンに変換
SkelegonsToBones();
// 選択アイテムの先頭ボーンを取得
SelectBone = SelectItem.bone();
// ボーンごとに中心点回転記録を設定
while( SelectBone ){
// ボーンを選択
SelectItem(SelectBone.id);
// 中心点回転記録を行う
CommandInput("Generic_DS_RecordPivotRot");
// バージョンがLW9以前の場合
// RecordPivotRotation();
// 中心点回転記録を行っても現在のキーフレーム値
// は保持されているので0リセット
Reset();
CreateKey(Scene().currenttime);
// ウェイトマップのみでスキニングするように設定
BoneWeightMapOnly();
BoneNormalization();
BoneStrengthMultiply();
// 次のボーンを取得
SelectBone = SelectBone.next();
}
// 選択アイテムを元に戻す
SelectItem(SelectItem.id);
// 選択アイテムをロック
ItemLock(1);
}
スクリプト内のコメントが多すぎないか、、と思われそうですが。まあ、自分は忘れっぽい
性格なのでいつもこのくらいコメントを書いてコードを水増ししています苦笑;
スクリプトをメニューに追加できないぞ?という方はコメント部分を消すなり、文字コードを
EUCに変換するなりして下さい。あしからず。