docs
Getting Started
Tutorials
How-To Guides
Explanation
Reference
Help
Getting Started
Tutorials
How-To Guides
Explanation
Reference
Help

Everywhere Actions

UnityUnity • BlenderBlender

What are Everywhere Actions?

Needle's Everywhere Actions are a set of carefully chosen components that allow you to create interactive experiences without writing code.

The key capability: Needle Engine automatically generates interactive USDZ files at runtime for iOS. When users tap "View in AR" on iPhone or iPad, your scene is converted to USDZ on-the-fly — complete with animations, material changes, audio, and tap interactions. This is different from static USDZ export: your interactive behaviors built with Everywhere Actions are preserved.

Build experiences that work across all platforms:

Supported Platforms

PlatformSupportNotes
Desktop✅ Full supportWindows, macOS, Linux
Mobile✅ Full supportAndroid & iOS browsers
VR Headsets✅ Full supportQuest, Vive, Index, etc.
AR Devices✅ Full supportARCore, ARKit devices
AppleiOS WebXR✅ Full native ARVia Needle Go App Clip
QuickLookiOS QuickLook✅ SupportedApple Vision Pro, iPhone, iPad
It's the only thing I know that does Quick Look with one click and with interactions — that was amazing.
Testimonial

Martin F3D Generalist, Slovenia

Native WebXR on iOS Now Available! 🎉

Full WebXR support is now available on iOS through Needle Go App Clip. Experience complete AR and VR on iPhone and iPad without app installation — just open your WebXR scene in Safari or Chrome!

How do I use Everywhere Actions?

For iOS support add the USDZExporter component to your scene. It is good practice to add it to the same object as the WebXR component (but not mandatory)

To add an action to any object in your scene
select it and then click Add Component > Needle > Everywhere Actions > [Action].

Open a configured product in QuickLook (no manual USDZ export)

A common pattern: build a web UI or product configurator with Needle Engine — a visitor browses and configures a product in the mobile browser (picking a model, materials, colors, size) — and then opens exactly what they configured in QuickLook on iOS.

You don't prepare or pre-export any USDZ files for this. Needle Engine's USDZExporter generates the USDZ at runtime from the current scene, so whatever the user configured is exactly what opens in QuickLook — with no Reality Converter step, no per-product export, and no build-time preparation. You just build your app.

Setup: add a USDZExporter component to your scene (commonly on the same object as WebXR). It has an Object To Export field: leave it empty to export the whole scene (the default — regardless of which object the component sits on), or assign a specific object to export just that object and its children. The component can also automatically add a "View in AR" button that, on iOS/iPadOS/visionOS, exports to USDZ and opens QuickLook.

To open a specific selected product from your own UI, assign it and trigger the export:

import { USDZExporter } from "@needle-tools/engine";
import { Object3D } from "three";

// e.g. when the user taps your own "View in your room" button
async function openInQuickLook(exporter: USDZExporter, product: Object3D) {
  exporter.objectToExport = product; // omit / leave unset to export the whole configured scene
  await exporter.exportAndOpen();     // builds the USDZ at runtime and opens QuickLook on iOS
}

Leave objectToExport unset to export the entire current scene — ideal when the configured result is the whole scene. Turn on the exporter's interactive option to also carry Everywhere Actions behaviors (animations, material changes, audio, taps) into the QuickLook file.

Same scene, everywhere

Because the export happens at runtime from your live scene, the browser preview, WebXR / Needle Go on iOS, and the QuickLook USDZ all reflect the same configured state. You build once and it works across platforms — no separate export pipeline to maintain.

List of Everywhere Actions

ActionDescriptionExample Use Cases
Play Animation on ClickPlays a selected animation state from an Animator. After playing, it can optionally transition to another animation.Product presentations, interactive tutorials, character movement
Change Material on ClickSwitch out one material for others. All objects with that material will be switched together.Product configurators, characters
Look AtMake an object look at the camera.UI elements, sprites, info graphics, billboard effects, clickable hotspots
Play Audio on ClickPlays a selected audio clip.Sound effects, Narration, Museum exhibits
Hide on StartHides an object at scene start for later reveal.
Set Active on ClickShow or hide objects.
Change Transform on ClickMove, rotate or scale an object. Allows for absolute or relative movement.Characters, products, UI animation (use animation for more complex movements)
Audio SourcePlays audio on start and keeps looping. Spatial or non-spatialBackground music, ambient sounds
WebXR Image TrackingTracks an image target and shows or hides objects.AR experiences, product presentations

Samples

Musical Instrument

Demonstrates spatial audio, animation, and interactions.

Simple Character Controllers

Demonstrates combining animations, look at, and movement.

Image Tracking

Demonstrates how to attach 3D content onto a custom image marker. Start the scene below in AR and point your phone's camera at the image marker on a screen, or print it out.

iOS: Full Native Support ✅

Image tracking works natively on iOS through Needle Go App Clip with ARKit support—no setup required!

Android: Browser Flag Required

On Android please turn on "WebXR Incubations" in the Chrome Flags. You can find those by pasting chrome://flags/#webxr-incubations into the Chrome browser address bar of your Android phone.

Read more about Image Tracking with Needle Engine

Image Marker

Interactive Building Blocks Overview

Create your own Everywhere Actions

Creating new Everywhere Actions involves writing code for your action in TypeScript, which will be used in the browser and for WebXR, and using our TriggerBuilder and ActionBuilder API to create a matching setup for Augmented Reality on iOS via QuickLook. When creating custom actions, keep in mind that QuickLook has a limited set of features available. You can still use any code you want for the browser and WebXR, but the behaviour for QuickLook may need to be an approximation built from the available triggers and actions.

Tips

Often constructing specific behaviours requires thinking outside the box and creatively applying the available low-level actions. An example would be a "Tap to Place" action – there is no raycasting or hit testing available in QuickLook, but you could cover the expected placement area with a number of invisible objects and use a "Tap" trigger to move the object to be placed to the position of the tapped invisible object.

Triggers and Actions for QuickLook are based on Apple's Preliminary Interactive USD Schemas

Code Example

Here's the implementation for HideOnStart as an example for how to create an Everywhere Action with implementations for both the browser and QuickLook:

import { Behaviour, UsdzBehaviour, BehaviorModel, TriggerBuilder, ActionBuilder, BehaviorExtension, USDObject, USDZExporterContext } from "@needle-tools/engine";

export class HideOnStart extends Behaviour implements UsdzBehaviour {

    start() {
        this.gameObject.visible = false;
    }

    createBehaviours(ext: BehaviorExtension, model: USDObject, _context: USDZExporterContext) {
        if (model.uuid === this.gameObject.uuid)
            ext.addBehavior(new BehaviorModel("HideOnStart_" + this.gameObject.name,
                TriggerBuilder.sceneStartTrigger(),
                ActionBuilder.fadeAction(model, 0, false)
            ));
    }

    beforeCreateDocument() {
        this.gameObject.visible = true;
    }

    afterCreateDocument() {
        this.gameObject.visible = false;
    }
}

Tips

Often, getting the right behaviour will involve composing higher-level actions from the available lower-level actions. For example, our "Change Material on Click" action is composed of a number of fadeActions and internally duplicates objects with different sets of materials each. By carefully constructing these actions, complex behaviours can be achieved.

Low level methods for building your own actions

Triggers
TriggerBuilder.sceneStartTrigger
TriggerBuilder.tapTrigger
Actions
ActionBuilder.fadeAction
ActionBuilder.startAnimationAction
ActionBuilder.waitAction
ActionBuilder.lookAtCameraAction
ActionBuilder.emphasize
ActionBuilder.transformAction
ActionBuilder.playAudioAction
Group Actions
ActionBuilder.sequence
ActionBuilder.parallel
GroupAction.addAction
GroupAction.makeParallel
GroupAction.makeSequence
GroupAction.makeLooping
GroupAction.makeRepeat

To see the implementation of our built-in Everywhere Actions, please take look at src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts.

References

  • Apple's Preliminary USD Behaviours

Further reading

AppleiOS WebXR Support

Want full WebXR features on iPhone and iPad? Check out our iOS WebXR with App Clip guide for complete AR and VR support without app installation.

  • iOS WebXR with App Clip — Full WebXR on iPhone and iPad
  • AR Showcase Website — Interactive AR examples with a focus on iOS AR & QuickLook
  • Everywhere Action Samples
  • Image Tracking with Needle Engine
Suggest changes
Last Updated: 7/21/26, 5:14 PM

Extras

Needle AI Ask Needle AI
Copy Markdown

Navigation

  • Getting Started
  • Tutorials
  • How-To Guides
  • Explanation
  • Reference
  • Help

Extras

Needle AI Ask Needle AI
Copy Markdown