第2回目:Head Look Controller|Tech Book Zone Manatee

マナティ

UnityおすすめAsset集

第2回目:Head Look Controller

今回紹介するAssetは、「Head Look Controller」です。これは3Dモデルの視線が、動くものを追いかけるという機能を持っています。

Head Look Controllerのインポート

Asset Storeの検索欄に「Head Look Controller」と入力すると表示されます。初めての場合は「ダウンロード」→「インポート」と表示されます。筆者は何度も使用していますので、「インポート」と表示されています(図1)。
 

図1 Head Look Controllerのインポート画面

図1から「インポート」をクリックすると、UnityのScene画面のProject内に図2のようなフォルダが作成され、必要なファイルが取り込まれます。

図2 必要なファイルが取り込まれた

“unitey-chan!”ModelとCartoon BigHead Starterのインポート

次にAsset Storeから「“Unity-chan!”Model」と「Cartoon BigHead Starter」という3DモデルのAssetを「インポート」しておいてください。検索欄に、それぞれの名前の一部を入力すると表示されます。すると、図2の中に、これらのファイルが取り込まれます(図3)。

図3 「“Unity-chan!”Model」と「Cartoon BigHead Starter」のファイルが取り込まれた

次にインポートした3Dモデルを動かすためのAssetをインポートします。

Mecanim Locomotion Starter Kitのインポート

Asset Storeの検索欄に「Mecanim Locomotion」と入力すると表示されますので、インポートしてください(図4)。このAssetには、3Dモデルをコードレスで動かすためのコントローラーやスクリプトが含まれています。

図4 Mecanim Locomotion Starter Kitのインポート

先と同じようにProject内にファイルが取り込まれます。

では、次に舞台を作っていきます。

舞台を作る

HierarchyのCreateから「3D Object」→「Plane」と選択すると、Scene画面内にPlaneが配置されます。これは「床」のようなものです。

このPlane上にunitychanとBigHeadsを配置します。

UnitychanとBigHeadsを配置する

Planeの上に、Project内の「Assets」→「UnityChan」→「Models」フォルダ内の「unitychan.fbx」をPlane上に配置します。次に、「Assets」→「BigHeads」→「BigHeadsStarter」フォルダ内の「BigHead.fbx」を配置します。

Game画面で見ると、unitychanがカメラに背を向けていますので、Hierarchyからunitychanを選択して、InspectorのTransformのRotationの「Y」に「180」と指定してください。unitychanがカメラの方を向きます。同じく配置したBigHeadsはサイズがunitychanより大きくなっていますので、BigHeadsのInspectorからTransformのScaleの「X」、「Y」、「Z」に「0.5」と指定してサイズを小さくしておきます。また、これもカメラの方を向くようにRotationの「Y」に「180」と指定してください。Main Cameraの位置を調節して図5のように表示されるようにしてください。

図5 Plane上にunitychanとBigHeadsを配置した

次にunitychanのInspectorを設定します。

unitychanのInspectorを設定する

Hierarchyからunitychanを選択してInspectorを表示します。AnimatorのControllerに右隅にある「」(〇に・)のアイコンをクリックして「Locomotion」を選択してください。この「Locomotion」は図4で「Mecanim Locomotion Starter Kit」をインポートしたときに取り込まれたコントローラーです。

次に「Add Component」の検索欄に、「Head」と入力すると、「Head Look Controller」が表示されますのでこれを選択します。unitychanのInspectorに「Head Look Controller(Script)」が追加されます。

Segmentsを展開してSizeに「2」と入力してください。同じくNon Affected JointsのSizeに「2」と入力してください。すると、それぞれにElement0とElement1が表示されますので、これらを展開してください。図6のようになっていると思います。

図6 SegmentsとNon Affected JointのElement0とElement1を展開

図6のSegmentsとNone Affected Jointsの「Element0」と「Element1」に図7のような値を指定してください。右隅に「」(〇に・)のある項目は、このアイコンをクリックして選択してください。その後の値は「Assets」→「Head Look Controller」にある「Head Look Test.unity」を開いて、Hierarchy内の「Human」を選択したInspector内の値を参考にしています。これらの項目は何をするものかについては一切説明がありませんので、各自がいろいろな値を設定して、動作を確認しながら設定する以外に方法がありません。

図7 SegmentsとNon Affected Jointsに値を指定した

次にBigHeadsのInspectorを設定します。

BigHeadsのInspectorを設定する

HierarchyからBigHeadsを選択して、Inspectorを表示します。AnimatorのControllerに「Locomotion」を指定します。次に「Add Component」から「Physics」→「Character Controller」を選択します。その中のCenterの「Y」に「1」を指定してください。衝突判定をする場合には、ここを「1」に指定しておく必要があります。今回は衝突判定は関係ないのですが、「Y」に「1」を指定しておかないと、身体の中心がズレれて、BigHeadsがすこし宙に浮いた状態になってしまいます。同じく「Add Component」から「Script」→「Locomotion Player」と選択してください。

「Add Component」の検索欄に「Cursor」と入力して、表示される「Cursor Hit」を選択してください。Head Lookの項目には「unitychan」を指定します。図8のようになります。

この設定だけで、BigHeadsはキーボードの「左右上下矢印キー」で自由に走りまわることが可能になります。

図8 BigHeadsのInspectorを設定した

では、最後にコードの修正を行います。

CursorHit.csファイルの修正

図8からScriptの「CursorHit」をダブルクリックします。するとVS2017が起動してコードが表示されますので、図9のように不要な個所をコメントアウトしてください。ここをコメントアウトしていないと、BigHeadが走り回るたびに不用意にジャンプしてしまいますので、注意してください。最初に動作させた場合は、ジャンプをしてしまいますが、その後はジャンプはしませんので、ご安心ください。

図9 CursorHit.csファイルの中身をコメントアウトした

Playしたのが図9になります。

図10 CursorHit.csファイルの中身をコメントアウトした

実際に動かしたのが動画1になります。

ユニティちゃんが坊主を目で追っている動画

動画1 ユニティちゃんが坊主を目で追っている動画

今回は3Dオブジェクトが動くものを視線で追いかける処理を解説しました。図7で指定した項目の値は、なかなかわかり辛いと思いますが、先に書いていたようにサンプルのSceneを参考にして設定してください。今回は動く対象に、これも3Dモデルを使用しましたが、動物でも、飛行機でも、動くものなら何でも指定が可能です。ぜひ試してみてください。

次回は、空飛ぶクジラを実現する「Humpback Whale(無料)」について解説します。お楽しみに。

著者プロフィール

薬師寺国安事務所 薬師寺国安(著者)
薬師寺国安事務所代表。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。現在はUnity5、UE4、Excel VBAについて執筆活動中。
Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。