【Unity】HoloLens2でスクリーンショットを取る方法

ソースコード

UniTaskを使用しています。

ScreenShot.cs
using Cysharp.Threading.Tasks;
using System.Linq;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Windows.WebCam;

public class ScreenShot : MonoBehaviour
{
    [SerializeField] private RawImage rawImage = default;

    private async void Start()
    {
        var token = this.GetCancellationTokenOnDestroy();
        rawImage.texture = await WebCamScreenShot(cancellationToken: token);
    }

    private async UniTask<Texture2D> WebCamScreenShot(Texture2D result = null, CancellationToken cancellationToken = default)
    {
        bool uploaded = false;
        if (result == null)
        {
            var cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();
            result = new Texture2D(cameraResolution.width, cameraResolution.height);
        }
        PhotoCapture photoCaptureObject = null;
        PhotoCapture.CreateAsync(true, photoCapture =>
        {
            photoCaptureObject = photoCapture;
            CameraParameters cameraParameters = new CameraParameters();
            cameraParameters.hologramOpacity = 0.9f;
            cameraParameters.cameraResolutionWidth = result.width;
            cameraParameters.cameraResolutionHeight = result.height;
            cameraParameters.pixelFormat = CapturePixelFormat.BGRA32;
            photoCaptureObject.StartPhotoModeAsync(cameraParameters, _ => photoCaptureObject.TakePhotoAsync((_, photoCaptureFrame) =>
            {
                photoCaptureFrame.UploadImageDataToTexture(result);
                uploaded = true;
            }));
        });
        await UniTask.WaitUntil(() => uploaded, cancellationToken: cancellationToken);
        photoCaptureObject.StopPhotoModeAsync(_ => { photoCaptureObject?.Dispose(); });
        return result;
    }
}

注意点

WebCamとMicrophoneの権限が必要です。

Project Settings > Player > Publishing Settinggs > Capabilities > WebCamとMicrophoneにチェック。

HoloLens2上でポップアップが出るので許可をしてください。

アプリ毎の権限はHoloLens2の設定 > アプリで確認できます。

権限を設定しているのに動かないとき

自分の場合は別のプロジェクト名でビルドし直すと動きました。

アプリを再インストールしても治りませんでした。

参考

コメントを残す

メールアドレスが公開されることはありません。