Help us understand the problem. What is going on with this article?

ARCoreをPixelやS8以外の端末で動かす

More than 1 year has passed since last update.

8/30にGoogleがARCoreという、Tango以外でも使えるAR用SDKを公開した。
現在はpreview版で、PixelかPixel XLかGalaxy S8でしか使えない。
それ以外の端末で実行しようとしても、
「This device does not support ARCore.」
と出て、アプリが終了してしまう。

ただ、Pixelは日本で手に入らないし、Tango対応のZenFone ARとかPhab 2ならまだしも、何故かS8縛りとか、Daydream対応で何かあったんじゃないのって色々思うところがあるので、どうしても別の端末で動かしたくて、やってみて、とりあえず動いたので、その方法を記載する。

環境

今回ARCoreを動かした端末はNexus6PでAndroid7.1.2。(よくよく考えると、これも手に入らないね。)
開発環境は、Windows10 x64 Pro、Unity2017.2.0b9。

環境構築

公式サイトの手順の通り。
https://developers.google.com/ar/develop/unity/getting-started

Android SDK

AndroidSDKでAPI24以降でビルドできるようにしておく。
もしインストールしていないなら、AndroidStudioを入れて、SDK ManagerでAPI24以降の Build Tools等を入れておく。

Unity

Unity2017.2.0b9以降をインストールする。
インストール時に「Android Build Support」を含める(チェックを入れる)ようにする。
なお、Unityはインストール先のフォルダ名を変えておくと、複数バージョンを共存させることができる。
もし既にUnityをインストールしているなら、今回使用するのはベータ版なので、共存させるようにインストールしておくと後々面倒ごとがなくなると思う。
(特にUnity2017では色々あるみたい。って僕も引っかかったことあるから...)

ARCore SDK for Unity

パッケージファイルを直接ダウンロードするか、Githubから取ってくる。

ARCore Service

端末にARCore Serviceをインストールする。

プロジェクト

新規プロジェクト作成

Unityを起動し、新規プロジェクトを3Dで作成する。
今回は公式サイト通り、HelloARというプロジェクト名にした。

インポート

メニューから、Aseets > Import Package > Custom Package を選択し、
ダウンロードしておいた、arcore-unity-sdk-preview.unitypackageを選択してインポートする。

シーンの読み込み

Projectビューから、Aseets > GoogleARCore > HelloARExample > Scenes を選択し、HelloARシーンをダブルクリックして読み込む。

ビルド

メニューから、File > Build Settings を選択する。Build Settingsダイアログが表示される。
PlatformリストからAndroidを選択し、下部のSwitch Platformボタンを押下して、切り替える。

Add Open Scenesボタンを押下する。
HelloARシーンがリストに追加される。

Player Settingsボタンを押下する。
Inspectorビューから、

  • Other Settings > Multithreaded Rendering のチェックをはずす。
  • Other Settings > Package Name の内容を変更する。とりあえず公式サイトの例のようにcom.example.helloARにした。
  • Other Settings > Minimum API Level をAndroid 7.0以降にする。
  • Other Settings > Target API Level をAndroid 7.0以降にする。
  • XR Settings > Tango Supported のチェックを入れる。

Build Settingsダイアログに戻り、端末をPCにつなぎ(開発者モード、USBデバッグは有効にしておくこと)、Build And Runボタンを押下すればインストールされ、起動直後に「This device does not support ARCore.」と出て、残念な気持ちになる。

ARCoreのソースをいじる

「This device does not support ARCore.」と出力しているのは、HelloARController.csの_QuitOnConnectionErrorsメソッドのようだった。

HelloARController.cs
private void _QuitOnConnectionErrors()
{
    // Do not update if ARCore is not tracking.
    if (Session.ConnectionState == SessionConnectionState.DeviceNotSupported)
    {
        _ShowAndroidToastMessage("This device does not support ARCore.");
        Application.Quit();
    }
    ...
}

Session.ConnectionState が SessionConnectionState.DeviceNotSupported になると上記エラーを出力するので、SessionConnectionState.DeviceNotSupportedを設定しないようにする。

SessionConnectionState.DeviceNotSupportedを設定しているのは、SessionComponent.csのConnectメソッドのisSupportedを見ている個所のようだった。
このif文をまるごとコメントアウトして保存する。

SessionComponent.cs
public AsyncTask<SessionConnectionState> Connect(SessionConfig sessionConfig)
{
    ...

    bool isSupported;
    ApiServiceErrorStatus status = TangoClientApi.TangoService_IsSupported(out isSupported);
    if (status.IsTangoFailure())
    {
        ARDebug.LogError("There was an error accessing the ARCore API.");
        SessionManager.ConnectionState = SessionConnectionState.ConnectToServiceFailed;
        return new AsyncTask<SessionConnectionState>(SessionManager.ConnectionState);
    }
    //if (!isSupported)
    //{
    //    ARDebug.LogError("Device does not support ARCore.");
    //    SessionManager.ConnectionState = SessionConnectionState.DeviceNotSupported;
    //    return new AsyncTask<SessionConnectionState>(SessionManager.ConnectionState);
    //}

    ...
}

Build Settingsダイアログを表示し、Build And Runボタンを押下して端末にインストールすると、今度はエラーなくアプリが起動するはず。

21167564_1495173297231596_3470961843718315641_o.jpg

Nexus6Pが悪いのか、preview版だからかなのかはわからないが、あまり精度がよくなかった。
とりあえず動いたので満足。

satoshi_noda
GDG神戸のオーガナイザーをしています。 VR、Unity、ロボットを中心に投稿していこうと思います。
http://kobegdg.blogspot.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした