Mixamoの3DキャラクターとアニメーションをiPhoneのARで表示するには:Unityで始めるARKit入門(3)(3/3 ページ)
Unityを使ってARKit対応アプリを開発するための入門連載。今回は、Mixamoの3DキャラクターとアニメーションをARKitのアプリに組み込んでみよう。
画面タップではなくボタンタップであることを明示する処理を追加する
Hierarchy内にある「HitCubeParent」の子「HitCube」を選択して、Inspectorを表示させる。「Unity AR Hit Test Example(Script)」の中に、UnityARHitTestExampleのスクリプトがあるので、これをクリックしてコードエディタで開いて、リスト2のようにコードを編集する。
using UnityEngine.EventSystems; void Update () { if ((Input.touchCount > 0 && m_HitTransform != null) && !IsPointerOverUIObject()) { var touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved) { var screenPosition = Camera.main.ScreenToViewportPoint(touch.position); ARPoint point = new ARPoint { x = screenPosition.x, y = screenPosition.y }; // prioritize reults types ARHitTestResultType[] resultTypes = { ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent, // if you want to use infinite planes use this: //ARHitTestResultType.ARHitTestResultTypeExistingPlane, ARHitTestResultType.ARHitTestResultTypeHorizontalPlane, ARHitTestResultType.ARHitTestResultTypeFeaturePoint }; foreach (ARHitTestResultType resultType in resultTypes) { if (HitTestWithResultType (point, resultType)) { return; } } 〜中略〜 private bool IsPointerOverUIObject() { PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current); eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y); List<RaycastResult> results = new List<RaycastResult>(); EventSystem.current.RaycastAll(eventDataCurrentPosition, results); return results.Count > 0; }
コードの中身を解説しておこう。
まずは「using UnityEngine.EventSystems;」と記述して、「EventSystems」の名前空間を読み込んでおく。これはUnityのシーンのイベントを処理する役割を持っているので、忘れずに追加してほしい。
4行目で「&& !IsPointerOverUIObject()」を追加している。この関数は32〜39行目で定義している。
IsPointerOverUIObject()関数では、Danceの操作はボタンで行うことを明示している。このコードを書いていないと、「ボタンではなく画面そのものをタップした」と判断され、キャラクターが何人も表示されてしまう。
ただ、IsPointerOverUIObject()関数のコードを書いていても、何回も画面をタップしてしまうとキャラクターが何人も表示されるので、ボタンだけをクリックするように注意してほしい。
ボタンを使用したサンプルには、全てこのコードを追加する必要があり、使い回しが可能だ。本連載では次回以降でもボタンを使用したサンプルには、この関数を呼び出している。
ビルド&実行結果
ここまでのSceneを上書き保存しビルドしよう。
Unityメニューの「File」→「BuildSettings」と選択すると、「Scenes In Build」内にたくさんのサンプルが登録されている。「Add Open Scenes」ボタンをクリックして、DancingCharacterを表示させてチェックを付ける。その後、「Switch Platform」をクリックする。
「Switch Platform」の横にある「Player Settings」ボタンをクリックし、「Other Settings」の「Bundle Identifier」「Camera Usage Description」「Target Device」「Target Minimum iOS Version」などを設定する。詳細については、連載第1回を参照してほしい。
iPhoneとMacを接続し「Build And Run」をクリックすると、ファイル名を保存する画面が表示される。「DancingCharacter」と入力して「Save」ボタンをクリックすると、ビルドが開始される。
ビルドが完了するとMacの右下でXcodeのアイコンが表示されるので、これをクリックする。すると、Xcodeの画面が起動する。これ以後の操作はこれまでの連載と全く同じなので、解説は割愛する。
ビルドした結果「Build Failed」と表示されることがあるかもしれないが、その場合は無視してXcodeの変換処理を行うと問題なく動作する。
また、iPhone側で「アプリが信頼できるものである」と設定しなければならない場合もある。その場合はiPhoneの「設定」→「一般」→「デバイス管理」で設定してほしい。
次回は、ロケットを飛ばすサンプル
実際に動かしてみて分かったのだが、現状だと3Dキャラクターにはあまり光が当たらず暗いので、もう1個「Directional Light」を追加して、モンスターに光が当たるようにしてもいいだろう。
次回はロケットを飛ばすサンプルを紹介するので、お楽しみに。
著者プロフィール
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Microsoft MVP for Development Platforms-Windows Platform Development(Oct 2014-Sep 2015)。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Unityゲーム/アプリの表現力の幅を広げるシェーダーとは――シェーダー作成の初歩
Unityを使ってシェーダーを作る方法を学ぶ連載。初回は、シェーダーの概要と、シェーダー作成の初歩について。 - UnityアプリをWebGL、UWP、Android、iOS用としてビルドしてみた
Unityで3Dゲームを作るまでのいろいろな処理を解説する連載。最終回はアプリをWebで実行できるように書き出す方法やWindows上でUWP、Android、iOS用などにビルドする方法について解説する【Windows 10、Unity 5.6に対応】。 - Gear VRとは――UnityでAndroidアプリを開発するための環境構築
HMDの中でも比較的扱いやすいGear VRで体験できるVR/ARコンテンツをUnityで開発する方法を紹介する連載。初回は、Unityや、Androidアプリを開発するのに必要なAndroid Studioをインストールして、Gear VRコンテンツの開発環境を構築する。