Version: 2018.3 (switch to 2019.1a or 2017.4)
  • C#


class in UnityEngine.XR.WSA.WebCam


Implemented in:UnityEngine.VRModule

Suggest a change


Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.


Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.




Captures a photo from the web camera and stores it in memory or on disk.

Demonstrates how to take a photo using the PhotoCapture functionality and display it on a Unity GameObject.

using UnityEngine;
using System.Collections;
using System.Linq;
using UnityEngine.XR.WSA.WebCam;

public class PhotoCaptureExample : MonoBehaviour { PhotoCapture photoCaptureObject = null; Texture2D targetTexture = null;

// Use this for initialization void Start() { Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First(); targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);

// Create a PhotoCapture object PhotoCapture.CreateAsync(false, delegate(PhotoCapture captureObject) { photoCaptureObject = captureObject; CameraParameters cameraParameters = new CameraParameters(); cameraParameters.hologramOpacity = 0.0f; cameraParameters.cameraResolutionWidth = cameraResolution.width; cameraParameters.cameraResolutionHeight = cameraResolution.height; cameraParameters.pixelFormat = CapturePixelFormat.BGRA32;

// Activate the camera photoCaptureObject.StartPhotoModeAsync(cameraParameters, delegate(PhotoCapture.PhotoCaptureResult result) { // Take a picture photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory); }); }); }

void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame) { // Copy the raw image data into our target texture photoCaptureFrame.UploadImageDataToTexture(targetTexture);

// Create a gameobject that we can apply our texture to GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad); Renderer quadRenderer = quad.GetComponent<Renderer>() as Renderer; quadRenderer.material = new Material(Shader.Find("Unlit/Texture"));

quad.transform.parent = this.transform; quad.transform.localPosition = new Vector3(0.0f, 0.0f, 3.0f);

quadRenderer.material.SetTexture("_MainTex", targetTexture);

// Deactivate our camera photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode); }

void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result) { // Shutdown our photo capture resource photoCaptureObject.Dispose(); photoCaptureObject = null; } }

Static Properties

SupportedResolutionsA list of all the supported device resolutions for taking pictures.

Public Methods

DisposeDispose must be called to shutdown the PhotoCapture instance.
GetUnsafePointerToVideoDeviceControllerProvides a COM pointer to the native IVideoDeviceController.
StartPhotoModeAsyncAsynchronously starts photo mode.
StopPhotoModeAsyncAsynchronously stops photo mode.
TakePhotoAsyncAsynchronously captures a photo from the web camera and saves it to disk.

Static Methods

CreateAsyncAsynchronously creates an instance of a PhotoCapture object that can be used to capture photos.


OnCapturedToDiskCallbackCalled when a photo has been saved to the file system.
OnCapturedToMemoryCallbackCalled when a photo has been captured to memory.
OnCaptureResourceCreatedCallbackCalled when a PhotoCapture resource has been created.
OnPhotoModeStartedCallbackCalled when photo mode has been started.
OnPhotoModeStoppedCallbackCalled when photo mode has been stopped.

Did you find this page useful? Please give it a rating: