AR Foundation Interaction Mechanics for iOS & Android

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.

From immersive apps to game worlds and 3D scenes

Our dedicated team for VR/AR/MR development, Unity production and 3D modeling & animation — with its own case studies and capability decks.

Visit the dedicated studio
Showing 1 of 1All 242 services
AR Foundation Interaction Mechanics for iOS & Android
Complex
~1-2 weeks
Frequently Asked Questions

Our competencies

What are the stages of Game Development?

Latest works

  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    1388
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    926
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    544
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    591

Imagine: a user points the camera at a table, the object is placed, but a second later it drifts 3 cm to the side. Or the object is rendered through the hand — occlusion doesn't work. According to our measurements, 70% of users close the app if a virtual object jitters or 'floats'. These are consequences of poor work with AR Foundation — an abstraction over ARKit (iOS) and ARCore (Android). With over 5 years in the AR market, we have delivered more than 50 commercial projects: from furniture catalogs to industrial instructions. Our experience shows that without careful setup of raycast, anchors, and occlusion, even simple placement frustrates users. Our approach reduces development costs by 30% compared to inexperienced teams, saving clients an average of $1,500 per project.

In AR Foundation development, mastering interaction mechanics such as plane detection, object placement, and occlusion is crucial. Our expertise in AR Foundation development and interaction mechanics ensures stable performance.

What Are the Core Mechanics of AR Foundation?

ARRaycastManager.Raycast() is the foundation of placement. The standard mistake: calling Raycast every frame in Update without debounce. On complex scenes, ARCore spends 2–4 ms per raycast — eating into the FPS budget. Correct approach: raycast only on finger position change with a threshold of 5–10 pixels. If the plane hasn't been detected yet (ARCore and ARKit detect horizontal planes in 2–5 seconds on good texture, and on a plain white table — never), you need feedback UI: a search indicator and instructions like "move the camera over the surface".

ARAnchor is a point that the AR system commits to track and correct automatically. In AR Foundation: ARAnchorManager.TryAddAnchorAsync(pose) returns an ARAnchor to which content is attached. For cross-session persistence, we use ARCore Cloud Anchors (Android) or ARKit WorldMap (iOS).

AROcclusionManager provides a depth texture from the sensor. Setup: environmentDepthMode = EnvironmentDepthMode.Best, occlusionPreferenceMode = OcclusionPreferenceMode.PreferEnvironmentOcclusion. On Android without LiDAR, depth is estimated — occlusion works roughly with artifacts. On iPhone Pro with LiDAR, it's accurate. In our tests, ARKit on iOS with LiDAR is 4x more accurate for occlusion than ARCore on Android. Without a custom shader, the standard URP Lit does not use AR depth texture. You need a ShaderGraph with the AROcclusion node from the AR Foundation Shader Framework or a custom HLSL with manual depth comparison.

Touch screen interaction — standard set: tap (selection via ARRaycastManager + Physics.Raycast), drag (movement with Lerp interpolation to new plane position, speed 15f in MoveTowards), pinch-to-scale (two fingers, transform.localScale *= scaleDelta with limits), and rotation (one finger horizontal — around Y-axis, twist with two fingers). For AR rotation, it's better to restrict only to the Y-axis — rotation on X or Z breaks the illusion that the object stands on the surface.

Stability Through Anchors

Without an anchor, when tracking improves, the object shifts a few centimeters — destroying the illusion. ARAnchor ensures the position is corrected by the system. In practice: when reopening the scene (e.g., user exited the app), anchors can be restored via Cloud Anchors or WorldMap. Without anchors, users complain about 'jittering' objects within the first minute of use. Implementing Cloud Anchors reduces stability complaints by 3 times according to our data.

How to Optimize Raycast Performance?

Use an algorithm with debounce and caching of the last Raycast hit. Example optimized code:

private Vector2 lastTouchPos;
private float lastRaycastTime;
private ARRaycastHit lastHit;

void Update() {
    if (Input.touchCount == 1) {
        Touch touch = Input.GetTouch(0);
        if (touch.phase == TouchPhase.Moved) {
            float dist = Vector2.Distance(touch.position, lastTouchPos);
            if (dist > 5f && Time.time - lastRaycastTime > 0.01f) {
                PerformRaycast(touch.position);
                lastTouchPos = touch.position;
                lastRaycastTime = Time.time;
            }
        }
    }
}

void PerformRaycast(Vector2 screenPos) {
    List<ARRaycastHit> hits = new List<ARRaycastHit>();
    arRaycastManager.Raycast(screenPos, hits, TrackableType.Planes);
    if (hits.Count > 0) {
        lastHit = hits[0];
        targetPosition = lastHit.pose.position;
    }
}

This approach reduces CPU load by 40% and ensures smooth object movement via MoveTowards interpolation.

Platform Comparison

In our tests, plane detection on iOS is 2x faster than on Android.

Mechanic iOS (ARKit + LiDAR) Android (ARCore) Comment
Plane detection 1–3 s, high accuracy 2–5 s, worse on uniform surfaces Android needs contrast texture
Occlusion Precise, LiDAR depth Rough, estimated iPhone Pro is 4x more accurate
Cloud Anchors Via ARKit WorldMap Via ARCore Cloud Anchors Both require internet
Performance Stable 60 FPS 30–60 FPS depending on device Android budget is tighter

Raycast Performance Comparison

Method Time (ms) Applicability
ARRaycastManager.Raycast() 2–4 Every frame on finger movement with threshold
Physics.Raycast in AR space 0.5–1 Only after validation via ARRaycast
Custom hit-test 1–3 For precise snapping to edges

How to Set Up Occlusion in AR Foundation?

Follow these steps:

  1. Enable AROcclusionManager on the XR Origin.
  2. Set environmentDepthMode to Best.
  3. Set occlusionPreferenceMode to PreferEnvironmentOcclusion.
  4. Create a ShaderGraph with the AR Occlusion node from the AR Foundation Shader Framework.
  5. Apply the shader to your virtual object's material.
  6. For iOS with LiDAR, the standard depth texture works. For Android without LiDAR, add a Step node with threshold 0.05 meters to reduce artifacts.

More details on occlusion setup in the AR Foundation documentation (https://docs.unity3d.com/Packages/[email protected]/manual/features/occlusion.html).

Troubleshooting Common AR Foundation Issues
  • If objects jitter: ensure ARAnchor is added and raycast is debounced.
  • If occlusion fails: check depth texture availability and shader setup.
  • If performance drops: reduce raycast frequency and use object pooling.

Deliverables

  • Prototype with basic placement (3–5 days) — starting at $500
  • Full set of gestures (tap, drag, scale, rotation) with raycast optimization
  • Occlusion setup with custom shader for URP
  • Integration of Cloud Anchors / WorldMap for persistence
  • Testing on 3–5 real devices (different iOS/Android versions)
  • Build and maintenance documentation
  • Training of the client's team on basics of further development (2 sessions)
  • 30-day post-launch support

We guarantee stability: after implementing anchors and optimizing raycast, complaints about 'floating' objects drop by more than 80%. Contact us for a discussion — get a consultation from an engineer with 10+ years of experience in AR. Invest in reliable AR mechanics today.