前提・実現したいこと
MicroSoftの公式ドキュメントにあるPhotoCaptureを利用して、撮影した写真をTexture2Dに変換してから、Qurdなどに表示したい。
発生している問題・エラーメッセージ
下記のコードを用いてアプリを作成し、Unity上で再生したときは実際にPCのカメラで撮影された写真が視界前方にQurdを生成しつつ、表示されました。HolographicEmulationを利用してHololens2で実行した場合も同様にPCのカメラで撮影された写真が表示されました。しかし、これをHololens2にBuildしてHololens2で起動すると、Qurdは視界前方ではなくHeadの位置に生成され、Textureも灰色一色で撮影された写真が表示されることはありませんでした。同ドキュメント内にある撮影した写真をファイルに保存するなどは上手くいったのですが、Texture2Dに変換して表示するのは上手くいきません。説明が拙くわかりづらいかもしれないですが、原因や解決方法を教えていただけると助かります。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using System.Linq; 4using UnityEngine; 5using UnityEngine.Windows.WebCam; 6 7public class CompressedPhotoCapture : MonoBehaviour 8{ 9 private PhotoCapture photoCaptureObject = null; 10 public Texture2D targetTexture; 11 12 void Start() 13 { 14 15 } 16 17 public void CaptureStart() 18 { 19 PhotoCapture.CreateAsync(true, OnPhotoCaptureCreated); 20 } 21 22 private void OnPhotoCaptureCreated(PhotoCapture captureObject) 23 { 24 Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First(); 25 targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height); 26 27 photoCaptureObject = captureObject; 28 29 CameraParameters c = new CameraParameters(); 30 c.hologramOpacity = 0.0f; 31 c.cameraResolutionWidth = cameraResolution.width; 32 c.cameraResolutionHeight = cameraResolution.height; 33 c.pixelFormat = CapturePixelFormat.BGRA32; 34 35 captureObject.StartPhotoModeAsync(c, OnPhotoModeStarted); 36 37 } 38 39 private void OnPhotoModeStarted(PhotoCapture.PhotoCaptureResult result) 40 { 41 if (result.success) 42 { 43 photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory); 44 } 45 else 46 { 47 Debug.LogError("Unable to start photo mode!"); 48 } 49 } 50 51 private void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame) 52 { 53 if (result.success) 54 { 55 //capture a photo to Texture2D 56 photoCaptureFrame.UploadImageDataToTexture(targetTexture); 57 58 GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad); 59 Renderer quadRenderer = quad.GetComponent<Renderer>() as Renderer; 60 quadRenderer.material = new Material(Shader.Find("Unlit/Texture")); 61 62 quad.transform.parent = this.transform; 63 quad.transform.localPosition = new Vector3(0.0f, 0.0f, 3.0f); 64 quadRenderer.material.SetTexture("_MainTex", targetTexture); 65 } 66 else 67 { 68 Debug.Log("Failed to save Photo to memory"); 69 } 70 71 photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode); 72 } 73 74 private void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result) 75 { 76 photoCaptureObject.Dispose(); 77 photoCaptureObject = null; 78 } 79} 80
補足情報(FW/ツールのバージョンなど)
Unity:2019.4.15f1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/12 07:00