質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1646閲覧

Unity ARKitを用いてUnityちゃんを出現させたい!

Lana1114

総合スコア25

ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/12/24 10:25

編集2018/12/24 10:40

前提・実現したいこと

・Unity AR Hit test Exampleの中のCollision LayerにARKitPlaneを追加したい
・UnityのARKitを使ってUnityちゃんをカメラ越しの平面上に出現させたい。

発生している問題・エラーメッセージ

Unityちゃんを出現させること自体はできているんですが、落ちていってどこかへ消えてしまう。
おそらくUnity AR Hit test Exampleの中のCollision LayerのなかにARKitPlane(カメラ越しで認識された平面を床として扱う?)がないからだと思います。
Unity AR Hit Test Example

該当のソースコード

Scriptと書いてあるので、該当するcsファイルを確認したところ

C#

1using System; 2using System.Collections.Generic; 3 4using UnityEngine.EventSystems; 5 6namespace UnityEngine.XR.iOS 7{ 8 public class UnityARHitTestExample : MonoBehaviour 9 { 10 public Transform m_HitTransform; 11 public float maxRayDistance = 30.0f; 12 public LayerMask collisionLayer = 1 << 10; //ARKitPlane layer ←多分これ 13 14 15 bool HitTestWithResultType (ARPoint point, ARHitTestResultType resultTypes) 16 { 17 List<ARHitTestResult> hitResults = UnityARSessionNativeInterface.GetARSessionNativeInterface ().HitTest (point, resultTypes); 18 if (hitResults.Count > 0) { 19 foreach (var hitResult in hitResults) { 20 Debug.Log ("Got hit!"); 21 m_HitTransform.position = UnityARMatrixOps.GetPosition (hitResult.worldTransform); 22 m_HitTransform.rotation = UnityARMatrixOps.GetRotation (hitResult.worldTransform); 23 Debug.Log (string.Format ("x:{0:0.######} y:{1:0.######} z:{2:0.######}", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z)); 24 return true; 25 } 26 } 27 return false; 28 } 29 30 31 32 33 // Update is called once per frame 34 void Update() 35 { 36#if UNITY_EDITOR //we will only use this script on the editor side, though there is nothing that would prevent it from working on device 37 if (Input.GetMouseButtonDown(0)) 38 { 39 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 40 RaycastHit hit; 41 42 //we'll try to hit one of the plane collider gameobjects that were generated by the plugin 43 //effectively similar to calling HitTest with ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent 44 if (Physics.Raycast(ray, out hit, maxRayDistance, collisionLayer)) 45 { 46 //we're going to get the position from the contact point 47 m_HitTransform.position = hit.point; 48 Debug.Log(string.Format("x:{0:0.######} y:{1:0.######} z:{2:0.######}", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z)); 49 50 //and the rotation from the transform of the plane collider 51 m_HitTransform.rotation = hit.transform.rotation; 52 } 53 } 54 #else 55 if (Input.touchCount > 0 && m_HitTransform != null) && IsPointerOverUIObject() 56 { 57 var touch = Input.GetTouch(0); 58 if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved) 59 { 60 var screenPosition = Camera.main.ScreenToViewportPoint(touch.position); 61 ARPoint point = new ARPoint { 62 x = screenPosition.x, 63 y = screenPosition.y 64 }; 65 66 // prioritize reults types 67 ARHitTestResultType[] resultTypes = { 68 //ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingGeometry, 69 ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent, 70 // if you want to use infinite planes use this: 71 //ARHitTestResultType.ARHitTestResultTypeExistingPlane, 72 //ARHitTestResultType.ARHitTestResultTypeEstimatedHorizontalPlane, 73 //ARHitTestResultType.ARHitTestResultTypeEstimatedVerticalPlane, 74 //ARHitTestResultType.ARHitTestResultTypeFeaturePoint 75 }; 76 77 foreach (ARHitTestResultType resultType in resultTypes) 78 { 79 if (HitTestWithResultType (point, resultType)) 80 { 81 return; 82 } 83 } 84 } 85 } 86#endif 87 88 } 89 90 91 } 92} 93 94

一応宣言自体はされているみたいです。
あくまで初心者の推測なので見当違いかも知れませんがとりあえず落ちて行っちゃうのをどうにかしたいです。
どうかお助けください。

試したこと

Unityのバージョンが少し古かったので最新のものにしましたが結果は変わりませんでした。
あとARKit自体がAsset Storeから消えてるっぽかったので、いろんなサイト探し回ってARKitのPluginを何個か試しました。

補足情報(FW/ツールのバージョンなど)

参考書:ARKitとUnityで始めるARアプリ開発 https://www.amazon.co.jp/dp/4798054364/ref=cm_sw_em_r_mt_dp_U_aoliCb2463YA2

Macbook pro macOS Mojava10.14.2
Xcode10.1
Unity: Version 2018.3.0f2 Personal
ARkit: https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/get/arkit2.0_beta.zip

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

そもそもUnityARKitのインストール方法を間違えていました。

投稿2018/12/31 14:49

Lana1114

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのプロジェクトを見たわけではないので見当違いかもしれませんが…

ユニティちゃんが落ちるのはユニティちゃんがRigidbodyを持ってるからだと思うので、
無効化するとかuse gravityをオフにするとかはできないんでしょうか?

投稿2018/12/28 07:19

izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問