tuedaの日記

2012-01-21

[][] Blender 2.61からUnityへ一発でインポートする最強設定(ゲーム向け)

Blenderで作成した複数のアニメーション・クリップ(Blender用語ではアクション)がUnityにインポートすると1個しかない問題が苦節2時間ようやく解決した。

BlenderでFBXでエクスポートしてUnityでインポートすると大丈夫だが、Unityから直接.blendをインポートすると駄目)

Action Editorのアクション名が表示される所の右に[F](ポップアップはSave this datablock even if it has no users)をクリックして有効にすると全部Unityに持ってこられる。

Unity-BlenderToFBX.pyの設定は2.59以降の所を少しだけ修正してuse_anim_action_all=Trueにuse_default_take=Falseにする。

これでOK. Unityから一発で.blendをインポートして即使える。うむ完璧だ。

	else:
		# 2.59 and later
		io_scene_fbx.export_fbx.save(FakeOp(), bpy.context, filepath=outfile, 
			global_matrix=Matrix.Rotation(-math.pi / 2.0, 4, 'X'),
			use_selection=False,
			object_types={'ARMATURE', 'EMPTY', 'MESH'},
			use_mesh_modifiers=True,
			use_anim=True,
			use_anim_action_all=True,
			use_default_take=False,
			use_anim_optimize=False,
			anim_optimize_precision=6,
			batch_mode='OFF')

今ひとつ有効なソースが見つからなかったのでUnityに持って行くことを前提としたBlenderの使い方を記録しておく。

Unityではアニメーションを「ジャンプ」や「歩く」などのクリップ単位で管理する。Blenderではこれをアクションと呼ぶ。

アクションは「Dope Sheet」の「Action Editor」で管理する。

f:id:tueda_wolf:20120121164159j:image:w380

アクション名(デフォルトは"ArmatureAction")が表示されている欄の右の「F」「+」「x」の右で操作する。

f:id:tueda_wolf:20120121164200j:image:w260

+が新規追加でxが削除。ただし削除してもすぐには消えなくてBlenderがリブートした後に消える(なぜ?)。

Fはユーザーが居ないときも強制的に記録するオプションで、これを有効にしておかないとUnityにインポートしたときにカレントのアクション以外が消えて無くなる。

忘れずにチェックしておこう。Blender側で必要な操作はこれだけ。

Blenderはもう少しアクションの切り替えを簡単にできるといいなあ。

Unityをインストールしたディレクトリの下にdata/tools/Unity-BlenderToFBX.pyがあるので上で書いたように修正しておく。

アニメーションをON、デフォルトテイクはOFF、全てのアクションをインポート。

全オプションはここ。GUIのFBXエクスポーターで制御できるのと一緒。

http://www.blender.org/documentation/blender_python_api_2_61_0/bpy.ops.export_scene.html

これで一発でインポートできて即ゲームで使える。

アクションの切り替え

Timelineの下にビューを1つ増やしてDopeSheetを1行だけ表示しておくとすぐ切り替えられて便利。

ビューを消すときは境界線を右クリックして「Join Area」

トラックバック - http://d.hatena.ne.jp/tueda_wolf/20120121/p1