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.