Media & Content Tools Guide

Add audio, video, UI, and other media to your interactive 3D experiences

What are Media Tools?

Media & Content tools add audio, video, UI, and other rich media to your experiences. Each tool creates a new pre-configured object in your scene. These tools work alongside the Interactivity System -- use triggers and UnityEvents to control when media plays, appears, or changes.

Event-Driven by Design

Trigger → Media

Media tools are controlled through UnityEvents.
Pair them with any U3D trigger -- Enter Trigger, Interact Trigger, Trigger Zone, and more -- to control exactly when media plays or appears.
No scripting required.

Getting Started

1
Add the Media Tool
  • Go to Creator Dashboard → Project Tools → Media & Content
  • Click Apply on the tool you want
  • A new pre-configured object appears in your scene
2
Configure in the Inspector
  • Drag in your content (audio clips, images, etc.)
  • Wire any required references (like an AudioSource)
  • Adjust settings to taste
3
Connect a Trigger
  • Add a U3D trigger to control when it activates
  • In the trigger's UnityEvent, drag in the media object
  • Select the playback method (e.g. PlayShuffled)
4
Test in Play Mode
  • Press Play and activate your trigger
  • Audio, video, and UI respond immediately
  • Deploy for the full multiplayer experience

Media Tools You Can Add

Live
🎵

Audio Playlist

"Play audio clips through your AudioSource"

Creates an Audio Playlist object that plays a list of audio clips through an AudioSource you provide. Supports sequential, shuffled, and random one-shot playback. Optional crossfade, volume and pitch randomization, looping, and fade-out on stop.

Perfect for:
  • Background music that shuffles tracks
  • Ambient sound collections for environments
  • Sound effects triggered by player actions
  • Jukebox or radio objects players can activate
Live
🔊

Ambient Audio Source

"AudioSource routed to the Ambient channel, 2D playback"

Creates an AudioSource pre-routed to the Ambient mixer channel with Spatial Blend set to 0 (2D). Audio plays at the same volume everywhere, regardless of the listener's position. Good for background music and environmental ambience.

Perfect for:
  • Background music playlists
  • Environmental ambience (wind, rain, crowd noise)
  • Narration or announcements heard everywhere
  • Menu and UI audio
Live
📍

Local Audio Source

"AudioSource routed to the Effects channel, 3D spatial"

Creates an AudioSource pre-routed to the Effects mixer channel with Spatial Blend set to 1 (3D). Audio fades with distance using logarithmic rolloff. Position it in your scene where the sound should originate.

Perfect for:
  • Object interaction sounds (coin clinks, door creaks)
  • Environmental point sources (a waterfall, a campfire)
  • Machinery, instruments, or speakers placed in the world
  • Any sound that should feel like it comes from a specific location
Live
💬

Worldspace UI

"Floating text and panels that face the camera"

Creates a world-space Canvas with billboard behavior and proximity fade. Place text, images, or interactive UI elements directly in your 3D scene.

Perfect for:
  • Signs, labels, and information panels
  • NPC dialogue and speech bubbles
  • Price tags and item descriptions
  • Score displays and status indicators
Planned
🖥️

Screenspace UI

"Screen overlay canvas for user interfaces"

Adds a screen-space overlay Canvas for HUD elements, menus, and notifications that stay fixed on screen regardless of camera movement.

Live
🎬

Video Player

"Stream a video from a URL onto a screen in your world"

Creates a video screen with built-in play/pause, progress scrubbing, and time display controls. Paste a direct URL to an .mp4 or .webm file and the video streams at runtime with zero impact on build size.

Perfect for:
  • Tutorials and walkthroughs playing inside your world
  • Movie screens and viewing areas
  • Product demos and promotional videos
  • Art installations and video galleries
Live
🔗

URL Link

"Click to open a URL in a new browser tab"

Adds an Interact Trigger wired to open any URL when a player clicks or presses the interact key. The link opens in a new browser tab, so the player never leaves your experience. Works in WebGL builds and the Unity Editor.

Perfect for:
  • Social media links on signs or kiosks
  • Portfolio or storefront links in a gallery
  • Documentation or tutorial references
  • Donation or tip links (Patreon, Ko-fi, etc.)
Planned
🖼️

Slide Presentation

"Display and cycle through image collections in a sequence"

Cycles through a collection of images with forward and back controls. Supports worldspace, screenspace, or both modes with a runtime toggle. Includes zoom controls.

Planned
📝

Guestbook

"Visitors can leave a note that appears in your world"

A persistent, community-driven element where visitors leave messages that display in your 3D space.

Audio Playlist

How It Works

The Audio Playlist plays clips from a list through an AudioSource that you provide. It does not create its own AudioSource. This means you can point it at any AudioSource in your scene -- an Ambient Audio Source for background music, a Local Audio Source for positional effects, or one you already had set up.

The playlist does not auto-play. You control when playback starts by calling one of its methods from a UnityEvent on any U3D trigger component (Enter Trigger, Interact Trigger, Trigger Zone, etc.).

Setup

  1. Add the tool: In Creator Dashboard → Media & Content, click Apply on Add Audio Playlist. This creates a new Audio Playlist object in your scene.
  2. Wire an AudioSource: Drag an AudioSource into the Audio Source slot. This can be an Ambient Audio Source, a Local Audio Source, or any AudioSource in your scene. If you leave it empty, the script will try to find one on the same object or its children at runtime.
  3. Add clips: Drag your audio files into the Audio Clips list
  4. Connect a trigger: Add a U3D trigger to control when playback starts. In the trigger's UnityEvent, drag in the Audio Playlist object and select the playback method you want.
Common setup issue: If you already have an AudioSource in your scene from a previous setup, make sure the Audio Playlist's Audio Source slot points to the correct one. The playlist plays through whatever AudioSource you give it.

Playback Methods

These are the methods you can call from UnityEvents:

  • PlayRandomOneShot: Picks one random clip from the list and plays it once. Does not interrupt other audio on the source. Good for sound effects.
  • PlaySequence: Plays all clips in order, first to last. Stops after the last clip unless Loop Playback is enabled.
  • PlayShuffled: Plays all clips in random order. Re-shuffles each time through if looping.
  • StopPlaylist: Stops playback. If Fade Out On Stop is enabled, audio fades out over the configured duration instead of cutting off.

Inspector Settings

Audio Configuration

  • Audio Clips: The list of clips to play. Order matters for PlaySequence.
  • Audio Source: The AudioSource to play through. If left empty, the script tries to find one on the same GameObject or its children.

Volume & Pitch

  • Volume Scale: Master volume for all playback (0 to 1)
  • Randomize Volume: Adds slight volume variation per clip for a more natural feel
  • Volume Variation: How much volume can vary (0 to 0.5)
  • Randomize Pitch: Adds slight pitch variation per clip
  • Pitch Variation: How much pitch can vary (0 to 0.5)

Transition Settings

  • Gap Between Clips: Seconds of silence between clips (0 to 10). Only applies to PlaySequence and PlayShuffled.
  • Use Crossfade: When enabled, the next clip fades in while the current clip fades out. Automatically creates a second AudioSource to handle the overlap.
  • Fade Duration: How long crossfades and fade-outs take (0.1 to 5 seconds)
  • Fade Out On Stop: When StopPlaylist is called, gradually fade audio out instead of cutting it off

Looping

  • Loop Playback: When enabled, PlaySequence and PlayShuffled restart from the beginning after finishing the last clip. PlayShuffled re-randomizes the order each loop.

Example: Background Music

Add an Ambient Audio Source and an Audio Playlist from the Media & Content tools. Drag the Ambient Audio Source into the playlist's Audio Source slot. Add your music tracks to the Audio Clips list. Enable Loop Playback and Use Crossfade for seamless transitions. Add a U3D Enter Trigger covering your play area and connect its OnEnterTrigger event to the playlist's PlayShuffled method. When a player enters the area, music starts shuffling through your tracks with smooth crossfades.

Example: Sound Effects on Interaction

Add a Local Audio Source and an Audio Playlist. Position the Local Audio Source on or near the interactive object (like a tip jar or treasure chest). Drag it into the playlist's Audio Source slot. Add several variations of the same sound effect to the Audio Clips list. Add a U3D Interact Trigger to the object and connect its event to PlayRandomOneShot. Each time a player interacts, a different variation plays from that position in the scene. See the TipJar in the U3DDemo_Scene for a working example of this pattern.

Audio Sources

How They Work

The Ambient Audio Source and Local Audio Source tools create pre-configured AudioSource objects routed to the correct channel on the U3D Audio Mixer. This means players can control their volume independently using the in-game Settings panel.

Ambient vs Local

  • Ambient Audio Source: Routed to the Ambient mixer channel. Spatial Blend is set to 0 (2D), so the audio plays at the same volume no matter where the player is. Use for background music, environmental ambience, narration, or anything that should be heard everywhere.
  • Local Audio Source: Routed to the Effects mixer channel. Spatial Blend is set to 1 (3D) with logarithmic rolloff, so the audio fades with distance. Position it in your scene where the sound should come from. Use for object sounds, point-source ambience like waterfalls, or any audio tied to a specific location.

Mixer Channels

The U3D Audio Mixer has five channels, each with its own volume slider in the player-facing Settings panel:

  • Master: Controls overall volume for all audio
  • Ambient: Background music and environmental audio
  • Effects: Sound effects and positional audio
  • Music: Dedicated music channel (separate from ambient)
  • Voice: NPC dialogue, narration, and announcements

When you create an AudioSource manually (without the dashboard tools), you can route it to any of these channels by setting its Output to the desired mixer group in the Inspector. This is what the dashboard tools do automatically.

Using Audio Sources with Playlists

Audio Sources and Audio Playlists are designed to work together. A typical setup is: create an Audio Source (Ambient or Local) for the audio routing and spatial behavior, then create an Audio Playlist and wire the Audio Source into its Audio Source slot. The playlist controls what plays and when. The Audio Source controls how it sounds and where it's heard.

Player Volume Controls

Settings UI Panel

The U3D template includes a Settings UI Canvas prefab (under U3D → Optional in the Hierarchy) that gives players in-game volume sliders for each mixer channel: Main, Ambient, Effects, Music, and Voice. This prefab is pre-wired and works out of the box. Players open it by pressing Tab, and their volume preferences are saved between sessions.

As long as your AudioSources are routed to one of the mixer channels (which the dashboard tools do automatically), players will be able to control the volume of your audio from the Settings panel. No additional setup is required.

Worldspace UI

How It Works

The Worldspace UI tool creates a Canvas set to World Space render mode with billboard behavior and proximity fade. The canvas always faces the camera so text and UI elements are readable from any angle. It fades in as the player approaches and fades out at distance.

Setup

  1. Go to Creator Dashboard → Project Tools → Media & Content
  2. Click Apply on Add Worldspace UI -- this creates a pre-configured Canvas with a panel and text
  3. Position the Canvas in your scene where you want the UI to appear
  4. Edit the text content, fonts, colors, and layout to match your experience

What Gets Created

  • Canvas (World Space render mode) with CanvasGroup for fade control
  • U3DWorldspaceUI component for billboard behavior and proximity fade
  • GraphicRaycaster for interactive UI elements
  • Panel with semi-transparent background
  • TextMeshPro text ready to edit

You can delete the default panel and text and replace them with any UI elements you need. The billboard and fade behavior stays on the Canvas regardless of what's inside it.

Video Player

How It Works

The Video Player streams a video from a URL onto a quad in your scene. The video file is not included in your build. It streams at runtime from whatever hosting you provide, just like a browser loading a video. The tool creates a screen with a controls bar underneath that includes play/pause, a progress slider, and a time display. All of these are standard Unity UI components that you can restyle or rearrange in the hierarchy.

Setup

  1. Add the tool: In Creator Dashboard → Media & Content, click Apply on Add Video Player. This creates a Video Player group in your scene with a screen and controls.
  2. Position it: Select the Video Player parent object to move, rotate, and scale the whole setup together.
  3. Add your video URL: Select the Video Screen child object and paste your URL into the Video URL field on the U3D Video Player component.
  4. Test it: Enter Play mode and click the Play button on the controls bar, or enable Play On Awake to start automatically.
YouTube and Vimeo links will not work. These services block direct video access inside WebGL players. The URL must point to an actual .mp4 or .webm file served directly by a web server or CDN. If you can open the URL in a browser and see the video playing by itself with no page around it, it will work.

Video Hosting

Your video needs to be hosted somewhere that serves the raw file directly. Options that work:

  • Your own web hosting or server — drop the .mp4 in your served directory
  • Firebase Storage — upload and use the public download URL
  • Any CDN or static file host — as long as it serves the file with correct CORS headers

Options that do not work:

  • YouTube, Vimeo, or similar platforms — they serve their own player page, not a raw video file
  • Dropbox — wraps files in a preview page instead of serving them directly
  • Google Drive — same issue as Dropbox

Video Format

Use H.264 video in an .mp4 container. This is the only format that works reliably across the Unity Editor, Chrome, Firefox, Safari, and VR browsers. WebM with VP9 works in most browsers but not older Safari. MKV will not work at all.

If your video is in another format, convert it with any video converter. The free tool FFmpeg handles this from the command line: ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4

What Gets Created

The tool creates a parent object with two children:

  • Video Player (parent) — empty object for positioning. Select this to move, rotate, and scale the whole setup.
  • Video Screen (child) — the quad that displays the video. The U3D Video Player component lives here. Select this to set the video URL and playback options.
  • Video Controls Canvas (child) — a world-space Canvas with U3DWorldspaceUI for proximity fade. Contains the play/pause button, progress slider, and time display. All standard Unity UI components you can restyle.

Inspector Settings (on Video Screen)

Video Source

  • Video URL: Direct URL to an .mp4 or .webm file. This is the only URL field you need to use.

Playback Settings

  • Play On Awake: Start playing as soon as the scene loads
  • Loop Video: Restart from the beginning when the video ends

Render Settings

  • Render Texture Width / Height: Resolution of the video surface. Default is 1920x1080. Lower values save memory on less powerful devices.

Controls UI (Optional)

These are automatically wired by the tool. You only need to touch them if you rearrange the UI hierarchy.

  • Play Pause Button: The button that toggles playback
  • Progress Slider: Scrub bar for seeking through the video
  • Time Display: Shows current position and total duration
  • Play Pause Button Text: Text that updates to show "Play" or "Pause"

Events

  • On Video Started: Fires when the video begins playing
  • On Video Finished: Fires when the video reaches the end (does not fire when looping)
  • On Video Error: Fires if the video fails to load or play

Controlling Playback from Triggers

The Video Player exposes public methods for UnityEvent wiring, just like other U3D tools:

  • Play: Start or resume playback
  • Pause: Pause playback
  • Stop: Stop playback and reset
  • TogglePlayPause: Switch between playing and paused

For example, add a U3D Interact Trigger near the video screen. In its UnityEvent, drag in the Video Screen object and select U3DVideoPlayer → TogglePlayPause. Now players can press the interact key to start and stop the video without needing to click the on-screen button.

Billboard and Proximity Fade

The controls canvas has a U3DWorldspaceUI component with billboard mode off by default, so the controls stay aligned with the screen. If you want a floating kiosk-style video player that always faces the viewer, enable Face Camera on both the controls canvas and consider parenting the screen to a billboard setup as well.

Proximity fade is on by default. The controls become visible as the player approaches and fade out at distance. Adjust Show Distance and Hide Distance on the U3DWorldspaceUI component to tune this.

How It Works

The URL Link tool opens a web address in a new browser tab when a player interacts with the object. It pairs a U3DInteractTrigger (which handles the click and proximity detection) with a U3DOpenURL component (which holds the URL and opens it). The Apply button in the Creator Dashboard adds both components and wires them together automatically.

In WebGL builds, the link opens in a new tab. The player's experience keeps running in the original tab. In the Unity Editor, it opens in your default browser.

Setup

  1. Select an object: Click any GameObject in your scene. This is what players will click to open the link. A sign, a poster, a floating icon, anything with a visible shape.
  2. Apply the tool: In Creator Dashboard → Media & Content, click Apply on Add URL Link. This adds a Collider (if missing), NetworkObject, U3DInteractTrigger, and U3DOpenURL to the object, all pre-wired.
  3. Set the URL: In the Inspector, find the U3DOpenURL component and paste your full URL into the URL field (include https://).
  4. Test it: Enter Play mode, walk up to the object, and click or press the interact key. The URL opens in your browser.

Inspector Settings

U3DOpenURL

  • URL: The full web address to open. Must include the protocol (https://). Example: https://unreality3d.com

U3DInteractTrigger (also on the object)

The Interact Trigger controls how the player activates the link. Default settings work for most cases, but you can adjust:

  • Max Interact Distance: How close the player needs to be to use the interact key (default: 3 units)
  • Max Click Distance: How far away a mouse click can reach (default: 10 units, 0 = unlimited)
  • Allow Mouse Click: Whether clicking the object with the mouse also triggers it (default: on)
  • Trigger Once: Enable if you only want the link to work once per session
  • Cooldown Time: Minimum seconds between activations, to prevent accidental double-opens

Using URL Link with Other Triggers

The Apply button wires the Interact Trigger to the URL opener, but U3DOpenURL has a public Open() method you can call from any UnityEvent. If you want the link to open when a player walks into an area instead of clicking, add a U3D Enter Trigger and connect its OnEnterTrigger event to the U3DOpenURL's Open method. You can remove the Interact Trigger if you don't need it.

Events

  • On URL Opened: Fires after the URL is opened. Use this to play a sound effect, show a visual confirmation, or log analytics.

Best Practices

🎵 Audio

  • Use Add Ambient Audio Source for background music and environmental sound. Use Add Local Audio Source for positional effects on objects.
  • Route every AudioSource to a mixer channel so players can control volume from the Settings panel
  • Use the Audio Optimization tool in Creator Dashboard → Optimize to compress audio for WebGL before deploying
  • Keep clip counts reasonable. Each clip is loaded into memory.
  • Use PlayRandomOneShot for sound effects and PlayShuffled for music. OneShot doesn't interrupt other audio on the same source.

🎬 Video

  • Always use H.264 .mp4 format. Other formats may fail on some browsers or in the Unity Editor.
  • Host videos on a server or CDN that supports CORS and HTTP range requests. Most standard web servers handle this automatically for static files.
  • Lower the Render Texture resolution for videos that don't need to be full HD. 1280x720 saves significant memory.
  • Use Play On Awake sparingly. Auto-playing video with audio can be a disruptive first experience for visitors.
  • Wire TogglePlayPause to a U3D Interact Trigger so players can control playback without needing to click the on-screen button directly.

💬 UI

  • Keep Worldspace UI text large and readable. Small text is hard to read in 3D, especially in VR.
  • Use high-contrast colors. White text on a dark semi-transparent panel works well in most scenes.
  • Place UI at eye height for the best readability
  • Proximity fade prevents distant UI clutter. The defaults work for most cases.

🔗 Wiring Triggers

  • The media object and the trigger don't have to be on the same GameObject. The trigger just needs a reference to the media object in its UnityEvent.
  • Use U3D Enter Trigger for area-based activation (walk into a room, music starts)
  • Use U3D Interact Trigger for player-initiated activation (press R near a jukebox)
  • Use U3D Exit Trigger paired with StopPlaylist to stop audio when the player leaves an area

Troubleshooting

Common Issues

No Sound Playing

  • Check that the Audio Source slot on the Audio Playlist has a reference. The playlist plays through whatever AudioSource you give it -- it won't find one automatically unless it's on the same object or a child.
  • Make sure you have at least one clip in the Audio Clips list
  • The playlist does not auto-play. Something needs to call PlaySequence, PlayShuffled, or PlayRandomOneShot. Check your trigger's UnityEvent.
  • If you had audio working before adding the playlist, make sure the playlist's Audio Source slot points to the same AudioSource that was playing before
  • Check that Volume Scale is not set to 0
  • Check that the player hasn't turned the relevant volume slider down in Settings. Open Settings (Tab) and verify Main and the relevant channel slider are up.

Audio Plays But Sounds Wrong

  • If audio is too quiet or inaudible from a distance, check the AudioSource's Spatial Blend. A value of 1.0 means full 3D (volume drops with distance). Set to 0 for 2D audio that plays at full volume everywhere. The Ambient Audio Source tool sets this to 0; the Local Audio Source tool sets this to 1.
  • If audio cuts off abruptly between tracks, enable Use Crossfade for smooth transitions
  • If pitch sounds off, check whether Randomize Pitch is enabled with high variation

Audio Source Not Responding to Volume Slider

  • Make sure the AudioSource's Output is set to one of the mixer channels (Ambient, Effects, Music, or Voice). If Output is set to None, the Settings panel sliders won't affect it.
  • The dashboard tools (Add Ambient Audio Source, Add Local Audio Source) set this automatically. Manually created AudioSources need to be routed manually.

Video Not Playing

  • Make sure the URL points to a raw .mp4 or .webm file, not a page that contains a video (YouTube, Vimeo, Dropbox, and Google Drive links will not work)
  • Test the URL by pasting it directly into a browser address bar. If the video plays by itself with no page around it, the URL is valid.
  • MKV files are not supported. Convert to .mp4 with H.264 encoding.
  • Check that the URL is entered in the Video URL field on the U3D Video Player component (on the Video Screen child object), not on the Unity VideoPlayer component.
  • If the video loads in the Editor but not in a WebGL build, make sure the hosting server supports CORS headers and HTTP range requests (required by Safari).
  • Long load times before playback are normal for large video files streaming over the network. Consider compressing your video or using a CDN for faster delivery.

URL Link Not Opening

  • Make sure the URL field on U3DOpenURL includes the full address with https://. Just typing "example.com" will not work.
  • Check that the object has a Collider. The Interact Trigger needs a collider to detect clicks and proximity.
  • If the link opens in the Editor but not in a WebGL build, check whether the browser is blocking it as a popup. Most browsers allow new tabs from user-initiated clicks, but aggressive popup blockers may interfere.
  • If nothing happens when you click, verify the U3DInteractTrigger's OnInteractTriggered event is wired to the U3DOpenURL's Open method. The Apply button does this automatically, but it can be accidentally removed.

Worldspace UI Not Visible

  • Check the Canvas scale. The default is 0.01 on all axes. Scaling too small makes it invisible; too large makes it fill the screen.
  • Make sure the Canvas is not behind or inside another object
  • Check the CanvasGroup alpha is not set to 0
  • Proximity fade may be hiding it. Move closer to the UI object to test.
Important: Always test media in Play mode before deploying. WebGL audio behavior can differ from the Unity Editor. Use the Audio Optimization tool in Creator Dashboard → Optimize to set proper compression before building.

Ready to Add Media!

Your media tools are ready to bring your experiences to life with audio, UI, and more. Open the Creator Dashboard, add a tool, and wire it to a trigger.

No scripting required. Just configure, connect, and play.


🎵 Add audio playlists, ambient and local audio sources, worldspace UI, and more to create rich, immersive experiences.

Ready to Create Something Amazing?

From Unity to Unreality3D.com. Free.


© 2026 Unreality3D LLC. All rights reserved.