読者です 読者をやめる 読者になる 読者になる

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【Unity5でレースゲーム】BlenderでモデリングしたAE86をUnityに取り込む

Blender Unity オープンワールドレーシングゲーム

BlenderモデリングしたAE86トレノをUnityに取り込んでみました。
なお、私が使用しているバージョンはBlenderが2.75a、Unityは5.0.2です。

まず、Blenderでの作業ですが、UnityのスタンダードアセットのCar Controllerスクリプトを使う場合はタイヤを回転させる都合上、車体と4輪のタイヤをバラバラのオブジェクトにしておく必要があります。
このとき、タイヤの原点はそれぞれのオブジェクトの中央(Set OriginでOrigin to Center of Massを選択)に移動しておく必要があります。
ちなみに、原点を車体の中心にしたままだとUnityでタイヤを回したときに車体から飛び出して回ってしまいます。

また、車のように左右対称の物体は通常Mirror Modifierを掛けた状態で片側だけモデリングすると思いますが、Unityに取り込むに当たってはそのままの状態(Applyしない状態)で問題ありません。

あとは通常通り.blendファイルをセーブすればBlender側の作業は終了です。

次にUnity側での作業ですが、セーブした.blendファイルをAssetフォルダー下の適当なフォルダーにコピーするだけです。すると各オブジェクトとマテリアルの情報がUnityに取り込まれます。
マテリアルに関して色はBlenderで設定したとおりになりますが、つや感などの設定は反映されないようなので、Unity側で調整が必要だと思います。

オブジェクトのサイズについてはとくに調整の必要はなく、Blenderで4.2ユニットくらいでモデリングしたAE86はUnityでも4.2mの大きさで表示されます。
これまで使ってきたUnityカーは幅が2.3m近くあるので、1.6mのAE86はかなり小さく見えます。(カメラからの距離も若干遠いですが。)

あと、モデリングのやりかたによってはタイヤをUnityのEmpty Objectの子オブジェクトにしてタイヤの回転軸がx軸になるように座標系を変えてやる必要があるかもしれません。(私はそうする必要がありました。)
BlenderのCircleオブジェクトを水平に寝た状態で作成し、オブジェクトモードで立てたのですが、それだとローカル座標も一緒に回ってしまうのが原因だと思います。エディットモードで立てれば問題ないような気がするので、次回のモデリングで試してみます。

あとは、適当にコライダーの位置や大きさなどをモデルの形状に合わせてやれば自分でモデリングした車をUnityで走らせることができです。

さて、前回書きましたが、フレームレートが上がる事を期待して少なめのポリゴン数でAE86モデリングしました。tf.hateblo.jp

Unityカーを5台出したとき、iPhone 5上では約15fpsでしたが、それがどれほど上がるか楽しみなところです。
早速見てみましょう。

f:id:takujidev:20150818213731j:plain

ワオ! 15fps!
少しも速くなっていません。
残念。

Unity上でも変化は無しです。
下の画像のとおりStatsを見るとTrisが3.8Mから619.5Kに下がっていますので、ポリゴン数は1/6くらいになっています。
つまり、ボトルネックはポリゴン数では無かったという事ですね。

f:id:takujidev:20150818213809j:plain

f:id:takujidev:20150818213817j:plain

以前Directional Lightを消したときにフレームレートが跳ね上がったことを考えると、リアルタイムシャドウがボトルネックになっているのかもしれません。
次回は影を焼いてフレームレートが上がるか試してみたいと思います。

今回の動画です。
駆動方式はUnityカーと同じ4WDのままで、他のパラメーターもいじっていないのですが、かなり操縦が難しくなりました。恐らく車幅がかなり狭くなったのが原因だと思います。
後半はクラッシュの連続でレースになりませんでした。多少ドリフトっぽく走れるのはAE86らしくて良いのですが・・・