Unity+Oculus+MMD とりあえず書き留めておく場所

Unity+Oculus+MMD VRでキャラクターと遊ぶ

4. オブジェクトの移動とCameraの設定~出力まで

前回は、モデルをSceneに配置し、モーションを再生するところまで行きました。

今回は、カメラを配置してみましょう。

カメラの配置

まず、Sceneの中でモデルが見えやすいようにビューを調整します。

前にもやったように、Hierarchy上のモデルの名前をダブルクリックしてみてください。

これでモデルがSceneの真ん中に見えるようになります。

f:id:emifuwa:20171121132144j:plain

※前の状態によりけりで、ダブルクリックすれば必ず上の画像のような位置に来るわけではありません。自分の見えやすい位置にあればOKです。

Hierarchyを見ると、「Main Camera」「Directional Light」は既にこの場にあるはずですね(この2つの名前が表示されていない場合は、Hierarchy欄一番上、UnityアイコンのScene名のツリーを開いてください/グレーの▶をクリック)

どこにあるのか今ひとつわからないので、「Main Camera」をダブルクリックしてみましょう。

f:id:emifuwa:20171121132801j:plain

…どこ…( ;∀;)

最初のモデルの向きによっては、Cameraがどこにあるのかわかりにくいかもしれません。

Scene右上の「シーンギズモ」で、画面の向きを変えてみましょう。

f:id:emifuwa:20171121133743j:plain

XかYのコーンをクリックすると、どうやらCameraらしきものが見えてきました。

Sceneビューの上でマウスホイールを回すと、ズームイン・ズームアウトが出来るはずですね。それで、もうちょっと近づいてみましょう。

アップになるとこんな感じ。

f:id:emifuwa:20171121134344j:plain

これがUnityのカメラです。

カメラから2本伸びている白い線は、いまこのカメラが映している方向と画角を表しています。

現時点では、モデルのかなり後ろの方から、背中を映している状態です。

せめてモデルの正面に持ってこないといけません。

オブジェクトの移動

 オブジェクトの移動にはざっくり2つのやり方があります。

①Sceneビュー上にある操作ツール「移動」で動かす

②Inspectorビューの「Transform」コンポーネントで動かす

まず①からやってみましょう。

操作ツールはSceneビューの上にある、5つ並んだアイコンです。

f:id:emifuwa:20171121142912j:plain

ここで使うのは、左から二番目の「移動」ツール(ショートカットW)。

動かしたいオブジェクトをHierarchy上で選択し、このアイコンを押すと、Scene上に赤・黄・緑のそれぞれの方向に向けた矢印が出現します。

この矢印の上にカーソルを持っていき、ドラッグして引っ張るとオブジェクトが移動します。

f:id:emifuwa:20171121143002j:plain

実際に出てきた矢印を、モデルの方向に引っ張ってみましょう。

f:id:emifuwa:20171121143409j:plain

幾分移動し、Sceneビューに表示されたカメラのプレビューでも、下のGame画面でもモデルにだいぶ近づきました。

でもこれじゃまだ足りないですね。

見た目わかりやすいように、もっとSceneの真ん中にモデルを持っていきましょう。

ここでまたHierarchy上のモデルをダブルクリックしてSceneの真ん中に持ってきてもいいですし、操作ツールのてのひらアイコン(ハンドツールと言うらしい)を押して(ショートカットQ)、画面をドラッグして視点を移動しても構いません。

少しずつUnityの画面操作に慣れていきましょう。

さて、更に引っ張って、やっとモデルの前まで来ました。

f:id:emifuwa:20171121144245j:plain

モデルの体をすり抜けて移動し、映している方向は逆なので、右下のカメラプレビューにモデルが映っていません。

カメラの向きを180度変えないといけませんね。

ここで使うのは、「回転」ツール(ショートカットR)。

f:id:emifuwa:20171121144624j:plain

真ん中のアイコンです。

ここを押すと、Sceneに白い球と色のついたラインが現れますので、ラインのあたりをドラッグすればオブジェクトが回転します。

f:id:emifuwa:20171121144932j:plain

この状態から、黄色のラインのあたりを大きくドラッグすると

f:id:emifuwa:20171121145220j:plain

…だいたい…いい位置に来たでしょうか?カメラプレビューにも、Gameビューにも、正面にモデルが映っています。

ですが、キレイに180度ぴったりには回せていない気がします。

数値ぴったりにしたい場合は、

②Inspectorビューの「Transform」コンポーネントで動かす

こちらの方法を使っていきます。

まず、動かしたいオブジェクトをHierarchyで選択。

f:id:emifuwa:20171122093749j:plain

すると、Inspectorにオブジェクトの情報が表示されます。

どんなオブジェクトでも、一番上に「Transform」というコンポーネントがあり、ここでオブジェクトの位置・角度・大きさを数値で制御できます。

f:id:emifuwa:20171122093846j:plain

Position:オブジェクトの位置

Rotation:オブジェクトの角度

Scale:オブジェクトの大きさ

MMDで言うところのアクセサリファイル(xファイル)のような感じで制御できます。

モデルの大きさも簡単に変えられるので、PMXエディタ等でスケールを変更する必要はありません。

直接数値入力できる(※半角数字)のは無論のこと、それぞれの数値入力ボックスの「X・Y・Z」の文字の上にカーソルを重ねると、◁ ▷のマークが表示され、ドラッグで数値を動かすことが出来ます。

f:id:emifuwa:20171122095234j:plain

筆者はオブジェクトの移動はほぼこの機能と直接数値入力で行っており、①で説明した操作ツールでの移動は、画面で他のオブジェクトのバランスを見ながら移動したい時などに使用しています。

場面場面で使いやすい方を使ってみてください。

また、数値入力ボックスにはマイナスの値も入力出来ますし、現在の位置から「0.5だけ移動した場所に動かしたい」という場合などには「1+0.5」という数式入力も可能です。

さて、現時点でのカメラの位置・角度ですが、モデルの方を向いてきっちり180度ではなく、中途半端な数値で回転配置されてしまっているようです。

f:id:emifuwa:20171122102030j:plain

こういう場合はキーボードから直接数値入力した方が良さそうですね。

ボックスを選択し、Rotation(角度)のYの値を-180に入力し直します。

f:id:emifuwa:20171122102351j:plain

角度Yの数値が-180になり、カメラがモデルの正面を向くようになりました。

スケールの変更

今度は、モデルの大きさも変更してみましょう。

Unityでは、MMDモデルをインポートすると、実物よりやや小さく表示されます。

なので、Hierarchyに読み込んでからScaleを変更しましょう。だいたい1.2~1.3倍くらいの大きさにするとちょうどいいです。

Hierarchyでモデルを選択し、InspectorのTransformコンポーネントのScale数値を、手入力でXYZ全て「1.2」にしていきます。

半角英数入力モードで、Tabキーでボックスを移動していくと早いですね。

モデルの大きさが変わったことが、SceneやGameビューでも視認できます。

f:id:emifuwa:20171122103252j:plain

モデルを間近で見るには、Cameraはかなり近い位置に持っていく必要があります。

また、カメラの位置が低すぎるな?と思ったら、Main CameraのPositionのY数値(高さ)を1.4くらいにしてみるといいかもしれません。

視野角とカメラの描画距離

次は、Main Cameraの「Camera」コンポーネントを見てみてください。

f:id:emifuwa:20171122112121j:plain

様々な設定項目がありますが、とりあえず重要なのは3つ。

Field of ViewMMDで言うところの視野角

※デフォルトでは60になっていますが、30にすると良いでしょう。値が大きすぎるとモデルを眺めるには不向きですし、小さすぎると周囲の背景に影響が生じます。

Clipping Planes:カメラがどこまで描画をするかの距離

※デフォルトではNearが0.3になっていますが、この値ではモデルに近づいた際、カメラがモデルに埋まってしまい、モデルの中身が見えてしまいます。Nearは0.01が推奨値です。

Farは逆にどこまで遠くまで描画するかという数値です。デフォルトの「Far 1000」は1キロ先まで描画するということなのですが、FarとNearはあまり差があるとバランスが崩れるため、広大な空間を描画するのか、狭い部屋の中なのかなどを考え、数値を変えてみてください。

とりあえず、このくらいの数値にしてみました。

f:id:emifuwa:20171122114209j:plain

この辺まで来たら、また「再生」を押して、じっくりモデルを眺めてみるのもいいんじゃないでしょうか!

ちなみに、再生状態でもコンポーネントの数値を操作することが出来ます。

なので、VRで実際にモデルを見ながら数値をドラッグで操作する機能を使用し、モデルを近づけたり遠ざけたりして、ちょうどいい間合いを測ることができます。

ただし、注意すべきなのは「再生状態で動かした数値は再生を解除すると全て元の状態に戻る」ので、「このくらいの数値がちょうどいい!」と思ったら、その数値を覚えておいて、再生解除してからあらためて入力し直す必要があります。

こういったことがあるので、先の記事で「再生状態とそうでない状態を区別するためにインターフェイスに色をつける」ことを推奨しました。

もしくは、再生状態で数値を変えたあと、これでOK!と思ったら、該当コンポーネントの右上・歯車マークの上で右クリックをすると、コンポーネントの値をリセットしたりコピー&ペーストしたり出来るメニューが出てきます。

f:id:emifuwa:20171203135459j:plain

ここで「Copy Component」を選択しておいて、再生を解除し、再び歯車マークの上で右クリック→「Paste Component Values」を選択すると、再生状態でコピーしておいたコンポーネントがペーストされます。

再生状態での数値変更時は、そのまま解除してしまわないよう気をつけましょう。

buildの設定

とりあえず見られるものが完成したので、一つのデータとして出力してみましょう。

メニューバー「File」→「Build Setting...」で、build(出力)の設定画面が出てきます。

f:id:emifuwa:20171205094802j:plain

「Platform」で、どんなプラットフォーム向けにbuildするかを選択します。

ここでは、PC,MacLinux Standaloneを選択しましょう。

Target Platformにそれぞれの対象OS(ここでは「Windows」)を、Architectureは、ここでは「×86_64」を選択し(※ビルドに失敗してしまう時「×86」を選択するとうまくいく場合もあります)「Build」を押します。

保存用のダイアログが開きますので、保存場所を選択します。

Assetフォルダには保存できません。大きめのデータになりますので、余裕のありそうな場所に新しくフォルダを作り、そこに保存するのが良いでしょう。ここではローカルのDドライブに「DEMO1」というフォルダを作りました(※フォルダ名は半角英数で)。

いくつも違う種類のデータを作る予定があれば、「DEMO1」フォルダの中にまた新しいフォルダを1つ作り、Sceneがわかるような名前を(半角英数で)付けておくと良いでしょう。

Unityで何かを保存する時は、フォルダ名もファイル名も必ず半角英数にしてください。

f:id:emifuwa:20171205100308j:plain

「DEMO1」の中に「MIKU」というフォルダを作り、そこに「Miku」というファイル名で保存することにしました。exeという拡張子で保存されます。

出力は最初の一回がやや時間がかかり、修正した後同じ場面を出力する際はもう少し早くなります。

出力が終了すると、保存されているフォルダが自動的に開きます。

出力データを再生

f:id:emifuwa:20171205100701j:plain

フォルダの中のUnityアイコンのデータをダブルクリックすると、実行ファイルが起動します。

f:id:emifuwa:20171205101638j:plain

このようなダイアログが出てきますので、基本そのまま「Play!」を押して構いません。

Windowedにチェックが入っていれば、デスクトップに実行中の画面がミラーされます。

再生を中断する場合は、デスクトップでウィンドウの×をクリックするか、Escキーを押しましょう。

※中断がうまくいかない時は、Altキー+Escキーでうまくいくかもしれません。

※再生しようとすると「データがクラッシュしたよ!」のようなダイアログが出る場合は、保存場所が適切でないか、フォルダやファイル名が半角英数でないことが考えられます。