Unityは、スクリーンショットを撮って保存するカメラを指定します(UIのみ)



Unity Specifies Camera Take Screenshot



参照ブログ: https://blog.csdn.net/anyuanlzh/article/details/17008909

このブログブロガーは、主にカメラ構成について話す3番目の方法として、3つの画面キャプチャ方法を提供しています。



NGUIはブロガーによって使用されるため、NGUIには直接構成されたUICameraがあり、直接使用できますが、今ではほとんどの人が

UGUIが使用され、UGUIのデフォルトのカメラにはこの機能がないため、いくつかの処理を行う必要があります。



まず、右クリックしてUICameraという名前の新しいカメラを作成します。コンポーネントの構成は次のとおりです。

投影モードを直交モードに設定し、深度を-2に設定していることに注意してください。まず、UIをより適切に表示するために、投影モードが直交に設定されます。



MainCameraに表示させたいインターフェイス表示のため、深度は-2です。もちろん、スクリーンショットのためだけに、UICameraは画面に表示されません。

インターフェイスに表示する必要がある場合は、さまざまな設定を行うことができます。

2番目のステップは、CaptureCanvasという名前のCanvasを作成することです。

この手順は実際には非常に簡単です。レンダリングモードを設定してカメラを追跡し、カメラをカメラにドラッグします。この時点で、次のシーンを見ることができます。

表示。

CamraとCanvasの場所がはっきりとわかり、必要なマップをCanvasに追加できます。

例えば:

準備作業が完了したら、最初のリンクであるコードを追加できます。主に3番目の方法に焦点を当てます。

///
///カメラのスクリーンショットを撮ります。
///
///スクリーンショット2。
///カメラ。上映するカメラ
///長方形。スクリーンキャプチャの領域
Texture2D CaptureCamera(カメラカメラ、長方形)
{{
// RenderTextureオブジェクトを作成します
RenderTexture rt = new RenderTexture((int)rect.width、(int)rect.height、0)
//関連するカメラのtargetTextureを一時的にrtに設定し、関連するカメラを手動でレンダリングします
camera.targetTexture = rt
camera.Render()
// ps:---このように2台目のカメラを追加すると、指定した数台のカメラだけが一緒に見える画像を作成できます。
// ps:camera2.targetTexture = rt
// ps:camera2.Render()
//:----------------------------------------------- --------------------

//このrtをアクティブにして、そこからピクセルを読み取ります。
RenderTexture.active = rt
Texture2D screenShot = new Texture2D((int)rect.width、(int)rect.height、TextureFormat.RGB24、false)
screenShot.ReadPixels(rect、0、0)//注:現時点では、RenderTexture.activeからピクセルを読み取ります
screenShot.Apply()

//関連するパラメータをリセットして、カメラを使用して画面に表示し続ける
camera.targetTexture = null
// ps:camera2.targetTexture = null
RenderTexture.active = null // JC:エラーを回避するために追加されました
GameObject.Destroy(rt)
//最後に、これらのテクスチャデータをpng画像ファイルにします。
byte [] bytes = screenShot.EncodeToPNG()
文字列ファイル名= Application.dataPath + '/ Screenshot.png'
System.IO.File.WriteAllBytes(ファイル名、バイト)
Debug.Log(string.Format( '写真のスクリーンショット:{0}'、ファイル名))

スクリーンショットを返す
}

パラメータの解釈について:カメラはUICameraに渡され、Rectは直接新しいRect(0,0、Scree.width、Screen.heigth)にすることができます。

この方法の利点は、スクリーンショットを撮るためにカメラを指定できることです。つまり、MainCameraに影響を与えずに、ユーザーが見ることができない場所に必要な画像を保存できます。