ARのスクショ時にGUIを消したいのでこちらを参照しました。
特定のUIを除いて画面のスクリーンショットを撮影する
今回はリンク内にあるmainCameraの部分をCamera.mainではなく、AR Cameraでやっております。
その結果、GUIは消せたのですが、スクショした画像が逆さまになってしまい解決法がわからずにいます。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.IO; 5using UnityEngine.Rendering; 6 7 8public class ScreenShot : MonoBehaviour 9{ 10 11 public event System.Action<RenderTexture> OnCaptured; 12 13 [SerializeField, Tooltip("GUIをレンダリングしているカメラ")] 14 private Camera _guiCamera = null; 15 16 [SerializeField, Tooltip("キャプチャするタイミング")] 17 private CameraEvent _cameraEvent = CameraEvent.BeforeImageEffects; 18 19 [SerializeField, Tooltip("合成時に無視されるUIのレイヤー")] 20 private LayerMask _captureTargetLayer = -1; 21 22 [SerializeField, Tooltip("ARカメラ")] 23 private Camera _mainCamera = null; 24 private RenderTexture _buf = null; 25 private CommandBuffer _commandBuffer = null; 26 27 #region ### MonoBehaviour ### 28 29 private void Awake() 30 { 31 CreateBuffer(); 32 } 33 /// <summary> 34 /// 動作確認用にGizmoでテクスチャを表示する 35 /// </summary> 36 private void OnGUI() 37 { 38 if (_buf == null) return; 39 GUI.DrawTexture(new Rect(5f, 5f, Screen.width * 0.5f, Screen.height * 0.5f), _buf); 40 } 41 42 public void OnClick() 43 { 44 TakeScreenshot(); 45 } 46 47 #endregion ### MonoBehaviour ### 48 49 /// <summary> 50 /// バッファを生成する 51 /// </summary> 52 private void CreateBuffer() 53 { 54 _buf = new RenderTexture(Screen.width, Screen.height, 0); 55 56 _commandBuffer = new CommandBuffer(); 57 _commandBuffer.name = "CaptureScene"; 58 _commandBuffer.Blit(BuiltinRenderTextureType.CurrentActive, _buf); 59 } 60 61 /// <summary> 62 /// スクリーンショットを撮影する 63 /// </summary> 64 public void TakeScreenshot() 65 { 66 AddCommandBuffer(); 67 68 StartCoroutine(WaitCapture()); 69 } 70 71 /// <summary> 72 /// コマンドバッファの処理を待つ 73 /// </summary> 74 private IEnumerator WaitCapture() 75 { 76 yield return new WaitForEndOfFrame(); 77 78 BlendGUI(); 79 80 if (OnCaptured != null) 81 { 82 OnCaptured.Invoke(_buf); 83 } 84 85 RemoveCommandBuffer(); 86 } 87 88 /// <summary> 89 /// GUI要素をブレンドする 90 /// </summary> 91 private void BlendGUI() 92 { 93 _guiCamera.targetTexture = _buf; 94 95 int tmp = _guiCamera.cullingMask; 96 _guiCamera.cullingMask = _captureTargetLayer; 97 98 _guiCamera.Render(); 99 100 _guiCamera.cullingMask = tmp; 101 102 _guiCamera.targetTexture = null; 103 } 104 105 /// <summary> 106 /// メインカメラにコマンドバッファを追加する 107 /// </summary> 108 private void AddCommandBuffer() 109 { 110 _mainCamera.AddCommandBuffer(_cameraEvent, _commandBuffer); 111 } 112 113 /// <summary> 114 /// メインカメラからコマンドバッファを削除する 115 /// </summary> 116 private void RemoveCommandBuffer() 117 { 118 if (_mainCamera == null) 119 { 120 return; 121 } 122 123 _mainCamera.RemoveCommandBuffer(_cameraEvent, _commandBuffer); 124 } 125 126} 127
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/21 05:08
2020/02/21 21:10
2020/02/22 09:41
2020/02/22 11:28