Kotlin Functions


Experience Augmented Reality Like Never Before with Kotlin and ARCore

Augmented Reality (AR) has radically transformed the way we interact with the world around us. From Pokémon Go to IKEA’s AR furniture app, consumers worldwide have experienced the magic of AR. Developers are increasingly drawn towards AR development, and if you’re a Kotlin developer, you’re in luck! Google’s ARCore and Kotlin make a powerful duo for crafting AR experiences.

Experience Augmented Reality Like Never Before with Kotlin and ARCore

In this blog post, we’ll delve into the basics of ARCore and how you can leverage Kotlin to develop your AR apps. 

1. What is ARCore?

ARCore is Google’s platform for building AR experiences on Android. It uses three main capabilities:

  1. Motion Tracking: Determines the position and orientation of the phone as it moves.
  2. Environmental Understanding: Detects flat surfaces.
  3. Light Estimation: Helps developers light virtual objects in ways that match surroundings.

2. Setting Up the Development Environment

Before we delve into coding, ensure you’ve set up the necessary environment:

– Android Studio with Kotlin support

– An ARCore-compatible device

– ARCore SDK for Android

3. Starting with ARCore and Kotlin

Let’s begin by creating a basic AR app that places a 3D object onto a detected surface.

3.1. Setting Up ARCore Session

After creating a new project, add the following dependencies to your `build.gradle`:

implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0'
implementation 'com.google.ar.sceneform:core:1.15.0'

Next, add permissions to the `AndroidManifest.xml`:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.ar" android:required="true" />

Create an `ArFragment` in your activity layout:

    android:layout_height="match_parent" />

3.2. Placing an Object in AR

Assuming you have a 3D object (`.sfb` format), let’s place it in the AR world:

val arFragment = supportFragmentManager.findFragmentById(R.id.arFragment) as ArFragment

arFragment.setOnTapArPlaneListener { hitResult, _, _ ->
    // Create Anchor
    val anchor = hitResult.createAnchor()
    val anchorNode = AnchorNode(anchor)

    // Load and add 3D model
    val modelRenderable = ModelRenderable.builder()
        .setSource(this, Uri.parse("model.sfb"))

    modelRenderable.thenAccept {
        val modelNode = TransformableNode(arFragment.transformationSystem)
        modelNode.renderable = it
    }.exceptionally {
        Toast.makeText(this, "Error loading model", Toast.LENGTH_LONG).show()

This code will allow you to tap on a detected surface, creating an anchor. The 3D object will then be placed at that anchor point.

3.3. Reacting to User Interaction

AR isn’t just about viewing; interaction is key. Kotlin’s concise syntax combined with ARCore’s robust API makes this straightforward.

To scale our 3D object:

modelNode.setOnTapListener { _, _ ->
    modelNode.localScale = Vector3(1.5f, 1.5f, 1.5f) // scale to 150%

4. Examples of Kotlin & ARCore Experiences

  1. Virtual Furniture Placement: Companies like IKEA allow users to place virtual furniture in their rooms, seeing how items fit and match before buying.
  1. Educational Tools: Imagine a classroom where students, using tablets, visualize a full-sized dinosaur or a rotating planet.
  1. Gaming: AR games, like Pokémon Go, allow users to interact with virtual entities in the real world.
  1. Virtual Fitting Rooms: Some apparel brands allow users to “try on” clothes virtually, superimposing outfits over live camera feeds.


Kotlin’s clarity and conciseness paired with ARCore’s capabilities offer developers a powerful toolbox for crafting AR experiences. Whether you’re building games, tools, or commercial applications, the combination ensures efficient, performant, and engaging results.

The above overview just scratches the surface. With advancements in ARCore and the Kotlin ecosystem, the potential for innovative AR applications is boundless. Dive in, explore, and let your imagination craft the next big AR experience!

Previously at
Flag Argentina
time icon
Experienced Android Engineer specializing in Kotlin with over 5 years of hands-on expertise. Proven record of delivering impactful solutions and driving app innovation.