Easily display and interact with web content in 3D or 2D using the web browser plugin trusted by thousands of developers. See the
developer site for full documentation.
🌐 Load a webpage from a URL or HTML string
📺 Watch videos and YouTube (including MP4s and streaming)
<> Create UIs with HTML
⚡️ Get started fast with the 3D WebViewPrefab or
2D CanvasWebViewPrefab, which render to a
Texture2D and handle user
interactions (click, scroll, hover, drag)
⌨️ Type with the included on-screen keyboard or native
keyboard
• C# source code for a unified API that works seamlessly
across Windows, macOS, Android, iOS, visionOS, WebGL, and UWP (each platform sold separately)
• Powered by Chromium (currently v125)
• Can render 144+ FPS on Windows using hardware acceleration for Direct3D11
(Direct3D12 renders at a lower rate without acceleration)
• Comprehensive APIs for controlling the
browser and listening to browser events
• Execute JavaScript
• Send messages from
JavaScript to C# and vice versa
• View and create PDFs
• Integrate with OAuth
• Includes additional APIs for platform-specific
features
• Supports transparent pages
• Supports Input Method Editor (IME) for entering Chinese, Japanese, and Korean text input
Examples
• 3D WebView's included demo scenes:
◦ SimpleWebViewDemo
◦ CanvasWebViewDemo
◦ AdvancedWebViewDemo
◦ CanvasWorldSpaceDemo
◦ PopupDemo
• XR Interaction Toolkit example
System requirements
• Unity 2018.3 or newer
• Windows 10+ (x64), supports both Direct3D11 and Direct3D12 (DX12) graphics
• macOS 10.13+ (x64 Intel, arm64 Apple Silicon) with Metal graphics
• Supports both Mono and IL2CPP
• Adds ~170 MB to the app's size (this can be reduced)
Important notes and limitations
• This package only supports Windows and macOS. To support other platforms, you can install additional 3D WebView packages, and you can save money on multiple packages
by buying a bundle. All of the 3D WebView packages work seamlessly together, so all you need to do is install them into the same project, and then 3D WebView automatically detects and uses the correct plugin at runtime and build time.
• 3D WebView's native Windows and macOS plugins are provided as precompiled libraries, and the native source code for
them is not
provided.
• The H.264 video codec for MP4s and streaming is disabled by default but can be enabled.
• The Windows plugin supports building for x86, but the resulting 32-bit app will only run on 64-bit versions of Windows
because 3D WebView embeds a 64-bit Chromium executable.
• Building for the Mac App Store is not supported.
• On macOS, the dynamic library used by the Unity process is a universal library that supports both x64 Intel and arm64 Apple Silicon CPUs. The executable for the Chromium process is currently x64 only but runs successfully on arm64 Apple Silicon Macs via Rosetta.
• Some of 3D WebView's Chromium library files exceed GitHub's maximum file size of 100 MB. So, if you save your code in a private GitHub repository, it's necessary to use the steps outlined in this article to store the large files with Git LFS.
• The Windows and macOS plugins embed Chromium Embedded Framework, so you must display a copy of its included BSD-style
license in your desktop app's about page or credits.
Full release notes: https://developer.vuplex.com/webview/releases
Windows and macOS:
- Windows: Significantly improved rendering performance with D3D11 by implementing accelerated paint support using CEF's OnAcceleratedPaint() method (a.k.a. shared textures). The result is that web content is now rendered at a higher frame rate on Windows.
- Made it so that when a webview is resized, its texture is updated more quickly, so web content is less likely to appear stretched or distorted during resizing.
- Made it so that 3D WebView logs an error if it detects that domain reload when entering play mode is disabled in Editor Settings, because 3D WebView doesn't currently support that setting.
- Added StandaloneWebView.SetAcceleratedPaintEnabled() for disabling accelerated paint support for D3D11.
- Windows: Made it so that 3D WebView passes the --use-adapter-luid command line argument to Chromium to make Chromium internally use the same graphics adapter as the Unity application.
- macOS: Fixed a memory leak where when resizing a webview, its previous textures wouldn't be freed correctly.
- v4.11.1: Windows: Fixed a regression introduced in v4.11 where running with the D3D11 graphics API on a PC with multiple graphics cards could sometimes cause the application to crash due to Chromium using a different graphics adapter than the Unity process.
- v4.11.2: Windows: Fixed an issue where with some Nvidia GPUs, a webview's texture could sporadically appear glitchy when using hardware acceleration (the default for Direct3D11).
- v4.11.2: Windows: Fixed an issue where the Direct3D12 graphics API implementation would leak GPU memory when a webview was resized.
- v4.11.2: Windows: Made it so that all web content is once again always rendered to a single texture. Previously in v4.11 and v4.11.1, when hardware acceleration was enabled, content for popover widgets (e.g. an HTML select element dropdown) was rendered to a separate texture that would be composited with the rest of the web content via a shader.
Core:
- Added a new way that JavaScript can listen for messages from C#, which is by listening to a new vuplexmessage event on the window object, like this: `window.addEventListener('vuplexmessage', listener)`. The advantage of this approach over the existing `window.vuplex.addEventListener('message, listener')` approach is that JavaScript doesn't need to wait for the window.vuplex object to be created (i.e. doesn't need to wait for the vuplexready event).
- Updated DefaultWebShader.shader to support stitching in a separate popover widget texture for Windows accelerated paint support and stitching in a separate fallback video texture for iOS and visionOS.
- Removed the internal VideoRectPositioner child object from WebViewPrefab.
- Removed the internal VideoLayer child object from CanvasWebViewPrefab.
- Removed the SetCutoutRect() methods from BaseWebViewPrefab and ViewportMaterialView and replaced them with new SetRenderBlackAsTransparent() methods.
- Removed AppleVideoMaterial.