ソースコード
UniTaskを使用しています。
ScreenShot.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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 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の設定 > アプリで確認できます。
自分の場合は別のプロジェクト名でビルドし直すと動きました。
アプリを再インストールしても治りませんでした。