Google ARCore SDK preview for Unity requires Unity 2017.20b9 or later and Android API SDK v24 or higher.
ARCore enables AR development for the Android ecosystem. With ARCore you can create brand new AR experiences for Android or extend existing applications to take advantage of ARCore’s features. To learn more about the features or how you can use ARCore with your Unity project, check out our Unity ARCore blog post .
All the features supported are available via the ARCore SDK for Unity available today. ARCore requires the following:
Pixel, Pixel XL, or Samsung Galaxy S8 running Android 7.0 Nougat and above
Unity 2017.2.0b9 or later
To get started please follow these steps:
In Google’s Unity Getting Started Guide :
Download and import the ARCore SDK for Unity package.
Install the Google ARCore service on your target device.
Make sure you also get a copy of HelloAR. It’s an easy to understand project that demonstrates the ARCore SDK and makes it easy for developers to quickly build and run their first app.
Configure Unity for ARCore development:
In the Player Settings (Edit > Project Settings > Player), select the Android options, then look under XR Settings and make sure “Tango Supported” is checked.
Under Other Settings, but sure Multithreaded Rendering is unchecked and your Minimum API Level is at least API Level 24 (Android 7.0).
Start experimenting today and get ready to build AR experiences for millions of Android devices.
Don’t forget to share your thoughts and ask questions on every aspect of Unity development for ARCore!
3 Likes
I recently got a Zenfone AR to play around with Tango, will it be able to run the Unity ARCore project?
The Unity 2017.2.0b9 beta is now live! Apologies for the short delay. Unity Editor Beta Releases
Does it support Sumsung S6 or Galaxy note 4
ARCore is not currently supported on the Zenfone.
Sorry, only the Pixel, Pixel XL and Samsung Galaxy S8 are supported for now.
Awesome. This will rattle a couple of things.
Can this preview be used on Samsung Galaxy S8 Plus – european version? Thanks
Running on a pixel xl with 7.1.2, unity 2017.2b9 and the downloadable unitypackage from the google site and I’m getting a crash on start, below is the ddms logs. I double checked and I think all the settings on my project are correct, any suggestions?
08-29 15:18:03.611: I/ActivityManager(1124): Start proc 11616:com.retrodreamer.par/u0a357 for activity com.retrodreamer.par/com.unity3d.player.UnityPlayerActivity
08-29 15:18:03.814: I/ActivityManager(1124): Displayed com.retrodreamer.par/com.unity3d.player.UnityPlayerActivity: +217ms
08-29 15:18:03.829: D/QCOM PowerHAL(1124): LAUNCH HINT: OFF
08-29 15:18:03.852: I/TangoClientLibLoader(11616): Pure Java path, not loading libtango_client_api.so at all.
08-29 15:18:03.853: E/Tango(11616): Java version of Tango Service not found, falling back to tangoservice_d.
08-29 15:18:03.854: E/art(11616): No implementation found for int com.google.atap.tango.TangoJNINative.Initialize(android.content.Context) (tried Java_com_google_atap_tango_TangoJNINative_Initialize and Java_com_google_atap_tango_TangoJNINative_Initialize__Landroid_content_Context_2)
08-29 15:18:03.854: E/Unity(11616): Error trying to call delegated method resume. null
08-29 15:18:03.870: I/Unity(11616): SystemInfo CPU = ARMv7 VFPv3 NEON, Cores = 4, Memory = 3757mb
08-29 15:18:03.870: I/Unity(11616): SystemInfo ARM big.LITTLE configuration: 2 big (mask: 12), 2 little (mask: 3)
08-29 15:18:03.871: I/Unity(11616): ApplicationInfo com.retrodreamer.par version 1.0 build d777fad3-5716-450e-a68a-b04b4f7a617c
08-29 15:18:04.010: E/Unity(11616): Unable to find AudioPluginMsHRTF
08-29 15:18:04.010: E/Unity(11616): Unable to find libaudioplugingvrunity
08-29 15:18:04.011: E/Unity(11616): Unable to find AudioPluginOculusSpatializer
08-29 15:18:04.012: E/Unity(11616): Unable to find audioplugingvrunity
08-29 15:18:04.016: E/Unity(11616): Unable to find unitygar
08-29 15:18:04.017: E/Unity(11616): Unable to find libAudioPluginOculusSpatializer
08-29 15:18:04.017: E/Unity(11616): Unable to find libtango_3d_reconstruction_api
08-29 15:18:04.019: I/Adreno(11616): QUALCOMM build : 6818200, Idb2b4cb785
08-29 15:18:04.019: I/Adreno(11616): Build Date : 11/17/16
08-29 15:18:04.019: I/Adreno(11616): OpenGL ES Shader Compiler Version: XE031.09.00.04
08-29 15:18:04.019: I/Adreno(11616): Local Branch : N25
08-29 15:18:04.019: I/Adreno(11616): Remote Branch :
08-29 15:18:04.019: I/Adreno(11616): Remote Branch :
08-29 15:18:04.019: I/Adreno(11616): Reconstruct Branch :
08-29 15:18:04.052: D/Unity(11616): GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_half_float GL_OES_framebuffer_object GL_OES_rgb8_rgba8 GL_OES_compressed_ETC1_RGB8_texture GL_AMD_compressed_ATC_texture GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_OES_texture_compression_astc GL_OES_texture_npot GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_OES_texture_3D GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_QCOM_alpha_test GL_OES_depth24 GL_OES_packed_depth_stencil GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_EXT_sRGB GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_EXT_texture_type_2_10_10_10_REV GL_EXT_texture_sRGB_decode GL_OES_element_index_uint GL_EXT_copy_image GL_EXT_geometry_shader GL_EXT_tessellation_shader GL_OES_texture_stencil8 GL_EXT_shader_io_blocks GL_OES_shader_image_atomic GL_OES_sample_variables GL_EXT_texture_border_clamp GL_EXT_multisampled_render_to_texture GL_OES_sha
08-29 15:18:04.052: D/Unity(11616): der_multisample_interpolation GL_EXT_texture_cube_map_array GL_EXT_draw_buffers_indexed GL_EXT_gpu_shader5 GL_EXT_robustness GL_EXT_texture_buffer GL_EXT_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_OES_texture_storage_multisample_2d_array GL_OES_sample_shading GL_OES_get_program_binary GL_EXT_debug_label GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_QCOM_tiled_rendering GL_ANDROID_extension_pack_es31a GL_EXT_primitive_bounding_box GL_OES_standard_derivatives GL_OES_vertex_array_object GL_EXT_disjoint_timer_query GL_KHR_debug GL_EXT_YUV_target GL_EXT_sRGB_write_control GL_EXT_texture_norm16 GL_EXT_discard_framebuffer GL_OES_surfaceless_context GL_OVR_multiview GL_OVR_multiview2 GL_EXT_texture_sRGB_R8 GL_KHR_no_error GL_EXT_debug_marker GL_OES_EGL_image_external_essl3 GL_OVR_multiview_multisampled_render_to_texture GL_EXT_buffer_storage GL_EXT_blit_framebuffer_params GL_EXT_clip_cull_distance GL_EXT_protected_textures
08-29 15:18:04.079: W/SurfaceFlinger(507): couldn’t log to binary event log: overflow.
08-29 15:18:04.079: W/SurfaceFlinger(507): couldn’t log to binary event log: overflow.
08-29 15:18:04.098: I/libOpenSLES(11616): Emulating old channel mask behavior (ignoring positional mask 0x3, using default mask 0x3 based on channel count of 2)
08-29 15:18:04.098: W/AudioTrack(11616): notificationFrames=-10 clamped to the range -1 to -8
08-29 15:18:04.101: D/AudioTrack(11616): Client defaulted notificationFrames to 192 for frameCount 1536
08-29 15:18:04.104: D/audio_hw_primary(508): select_devices: changing use case audio-ull-playback output device from(0: none, acdb -1) to (2: speaker, acdb 15)
08-29 15:18:04.104: I/ACDB-LOADER(508): ACDB AFE returned = -19
08-29 15:18:04.104: D/audio_hw_primary(508): enable_audio_route: usecase(5) apply and update mixer path: audio-ull-playback speaker
08-29 15:18:04.104: E/ANDR-PERF-OPTSHANDLER(642): Warning: Resource [2, 0] not supported for core 1. Instead use resource for core 0
08-29 15:18:04.104: E/ANDR-PERF-RESOURCEQS(642): Failed to apply optimization [2, 2, 0]
08-29 15:18:04.203: I/PBSessionCacheImpl(2692): Deleted sessionId[9635767191807] from persistence.
08-29 15:18:04.216: W/SearchService(2692): Abort, client detached.
08-29 15:18:04.276: E/ctxmgr(2407): [ProducerActiveIntervalImpl]closeActiveInterval: Error: ongoing, trying to close
08-29 15:18:04.289: E/ctxmgr(2407): [ProducerActiveIntervalImpl]closeActiveInterval: Error: ongoing, trying to close
08-29 15:18:04.304: I/PlaceInferenceEngine(2407): [anon] Changed inference mode: 105
08-29 15:18:04.540: I/sensors(1124): batch
08-29 15:18:04.541: I/nanohub(1124): queueBatch: sensor=1, handle=1, period=160000000, latency=0
08-29 15:18:04.541: I/sensors(1124): activate
08-29 15:18:04.543: I/nanohub(1124): queueActivate: sensor=1, handle=1, enable=1
08-29 15:18:04.543: I/sensors(1124): setDelay
08-29 15:18:04.545: I/nanohub(1124): queueSetDelay: sensor=1, handle=1, period=20000000
08-29 15:18:04.547: I/nanohub(1124): osLog: [BMI160] accSetRate: rate=51200, latency=19999744, state=3
08-29 15:18:04.552: V/MediaRouter(11616): Adding route: RouteInfo{ name=Phone, description=null, status=null, category=RouteCategory{ name=null types=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false }, supportedTypes=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO , presentationDisplay=null }
08-29 15:18:04.555: V/MediaRouter(11616): Updating audio routes: AudioRoutesInfo{ type=SPEAKER }
08-29 15:18:04.557: V/MediaRouter(11616): Selecting route: RouteInfo{ name=Phone, description=null, status=null, category=RouteCategory{ name=null types=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO groupable=false }, supportedTypes=ROUTE_TYPE_LIVE_AUDIO ROUTE_TYPE_LIVE_VIDEO , presentationDisplay=null }
08-29 15:18:06.704: I/Unity(11616): Handle to Tango Unity 3DR shim library is non-NULL
08-29 15:18:06.745: A/tango(11616): jni_helper.cc:19 ‘vm’ Must be non NULL
08-29 15:18:06.745: A/tango(11616): --------- beginning of crash
08-29 15:18:06.745: A/libc(11616): Fatal signal 6 (SIGABRT), code -6 in tid 11631 (UnityMain)
08-29 15:18:06.752: W/(572): debuggerd: handling request: pid=11616 uid=10357 gid=10357 tid=11631
08-29 15:18:06.780: D/audio_hw_primary(508): disable_audio_route: usecase(1) reset and update mixer path: low-latency-playback speaker
08-29 15:18:06.837: A/DEBUG(11673): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-29 15:18:06.837: A/DEBUG(11673): Build fingerprint: ‘google/marlin/marlin:7.1.2/NKG47S/4146038:user/release-keys’
08-29 15:18:06.837: A/DEBUG(11673): Revision: ‘0’
08-29 15:18:06.837: A/DEBUG(11673): ABI: ‘arm’
08-29 15:18:06.837: A/DEBUG(11673): pid: 11616, tid: 11631, name: UnityMain >>> com.retrodreamer.par <<<
08-29 15:18:06.837: A/DEBUG(11673): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
08-29 15:18:06.843: A/DEBUG(11673): Abort message: ‘jni_helper.cc:19 ‘vm’ Must be non NULL’
08-29 15:18:06.844: A/DEBUG(11673): r0 00000000 r1 00002d6f r2 00000006 r3 00000008
08-29 15:18:06.844: A/DEBUG(11673): r4 f1d9f978 r5 00000006 r6 f1d9f920 r7 0000010c
08-29 15:18:06.844: A/DEBUG(11673): r8 f1d9dd38 r9 f1d9dd34 sl 00000515 fp f1d9e048
08-29 15:18:06.845: A/DEBUG(11673): ip 00000054 sp f1d9d8b8 lr f425d5c7 pc f425fe30 cpsr 600f0010
08-29 15:18:06.857: A/DEBUG(11673): backtrace:
08-29 15:18:06.859: A/DEBUG(11673): #00 pc 00049e30 /system/lib/libc.so (tgkill+12)
08-29 15:18:06.859: A/DEBUG(11673): #01 pc 000475c3 /system/lib/libc.so (pthread_kill+34)
08-29 15:18:06.859: A/DEBUG(11673): #02 pc 0001d635 /system/lib/libc.so (raise+10)
08-29 15:18:06.859: A/DEBUG(11673): #03 pc 00019181 /system/lib/libc.so (__libc_android_abort+34)
08-29 15:18:06.859: A/DEBUG(11673): #04 pc 00017048 /system/lib/libc.so (abort+4)
08-29 15:18:06.859: A/DEBUG(11673): #05 pc 00005823 /system/lib/liblog.so (__android_log_assert+114)
08-29 15:18:06.859: A/DEBUG(11673): #06 pc 00009e69 /data/app/com.retrodreamer.par-1/lib/arm/libtango_client_api2.so
08-29 15:18:06.859: A/DEBUG(11673): #07 pc 0001256d /data/app/com.retrodreamer.par-1/lib/arm/libtango_client_api2.so
08-29 15:18:06.859: A/DEBUG(11673): #08 pc 00009247 /data/app/com.retrodreamer.par-1/lib/arm/libtango_client_api2.so (TangoService_isSupported+26)
08-29 15:18:06.859: A/DEBUG(11673): #09 pc 0000618c anonymous:d4eb6000
08-29 15:18:07.611: W/ActivityManager(1124): Force finishing activity com.retrodreamer.par/com.unity3d.player.UnityPlayerActivity
1 Like
Even though this looks great, I just want to point out that limiting this to two types of phones (for what reason?) is not accomplishing what is stated as a goal for the technology:
“One of the biggest challenges that developers face is ensuring that their apps and experiences are available to the widest possible audience. To overcome this challenge, AR needs to work on hardware that users already own, such as mobile devices.”
This looks like a marketing tactic to force upgrades to new phones.
1 Like
I’m getting a very similar error to rjevans, with the key line being
A/tango(11616): jni_helper.cc:19 ‘vm’ Must be non NULL
I’ve built both the Unity example on Windows and the Java example from Mac on a Samsung S8 with Nougat 7.0 and both fail similarly.
However, the same programs [both the same Java program and the same Unity program] work with a Pixel running 7.1.2.
@MrMallIronmaker @rjevans Does the startup crash happen consistently? I believe there is a known issue involving a race condition at startup.
If you have a project where you’ve imported Unity’s ARKit plugin, and then you import the ARCore package and you get a purple screen instead of a camera feed. Go into player settings and make sure to select ‘auto graphics api’ rather than OpenGLES2. This will resolve the issue.
1 Like
I don’t believe it works on the S8 Plus yet. You can check the exact model numbers here: https://developers.google.com/ar/discover/
@tdmowrer 10/10 tries on the S8 lead to failures, 10/10 tries on the Pixel worked. It doesn’t seem all that likely to be a race condition issue.
If it’s useful data, we just bought the Samsung S8 today, while one of our teammates has had the Pixel for a while [since January].
rjevans:
10/10 on pixel xl for me
just sanity checking - that means it fails 10/10 tries, right?
jimmya
August 30, 2017, 12:35am
17
rjevans:
Running on a pixel xl with 7.1.2, unity 2017.2b9 and the downloadable unitypackage from the google site and I’m getting a crash on start, below is the ddms logs. I double checked and I think all the settings on my project are correct, any suggestions?
Did you install the ARCore service on your phone using “adb install -r -d arcore-preview.apk” ?
rjevans
August 30, 2017, 12:43am
18
I had, but as a test I tried re-installing it and now things appear to be working. Thanks!
1 Like
I hadn’t installed it, that’s where I flaked on the instructions. Thanks @jimmya !
1 Like
I’m on my s8+ device to open ARCORE flashback, what’s up Does the startup crash happen consistently?