セーブファイルのキャプチャーに関しては、 Assets/Utage/Scripts/TemplateUI/UtageUguiMainGame.cs の以下のタイミングで行っています。
//セーブボタンが押された
public virtual void OnTapSave()
{
if (Engine.IsSceneGallery) return;
StartCoroutine(CoSave());
}
protected virtual IEnumerator CoSave()
{
if (Engine.SaveManager.Type != AdvSaveManager.SaveType.SavePoint)
{
yield return new WaitForEndOfFrame();
//セーブ用のスクショを撮る
Engine.SaveManager.CaptureTexture = Capture Screen();
}
//セーブ画面開く
Close();
saveLoad.OpenSave(this);
}
セーブボタンが押されたら、キャプチャ画像を作成して、それからセーブ画面を開く・・・という流れです。
なので、
メイン画面 → メニュー画面→セーブ画面 とするのであれば、キャプチャ部分とセーブ画面を開く部分で処理を分ける必要があります。
1. メニュー画面を開くときのプログラム(おそらく独自実装?)
Engine.SaveManager.CaptureTexture = Capture Screen();
のような形で、キャプチャー画像を設定するコードを追加。
2. メニュー画面→セーブ画面を開くときのプログラム
上記のUtageUguiMainGameのOnTapSave()をコピペするなどして、スクショをしないでセーブ画面を開く形でコードを作成する。
UtageUguiMainGame.csのCaptureScreenメソッドは、Unityの以下の機能を使っています。
単純に今の画面をキャプチャするだけなら、こちらの機能もあると思うのですが
昔はこの機能がなかったのと、レターボックスを考慮したうえでスクショの範囲を決める必要があるため、ReadPixelsを使っています。
>カメラの指定
カメラに対しての指定はなく、最終段階のキャプチャになります。
カメラを指定してのキャプチャが欲しい場合は、Unity自体には簡単なAPIが用意されているわけではなかったと思います。
一応宴の機能の一部として
CaptureImage コマンドがあって、それ用の機能もあるのですが
参考:Assets\Utage\Scripts\ADV\Graphic\Object\UIGraphic\AdvGraphicObjectRawImage.cs
//カメラのキャプチャコンポーネントを有効に
var captureManager = targetCamera.gameObject.GetComponentInParent<CameraManager>().CaptureManager;
if (CaptureImage != null)
{
RenderTexture.ReleaseTemporary(CaptureImage);
}
CaptureImage = RenderTexture.GetTemporary (targetCamera.scaledPixelWidth, targetCamera.scaledPixelHeight);
captureManager.Capture(targetCamera,CaptureImage,()=>OnCaptured(targetCamera));
ただ、これは使いやすい形にはなっていないのと、
同時に使われることがあった場合(現実的には起きないとは思いますが、CaptureImage コマンドと同一フレームで処理が行われる)の排他処理などがちゃんとできてないと思うので、
独自に実装するほうが安全かと思います。
独自に実装する場合は、こちらのサイトなどを参考に実装してみてください。
ただし、UnityプロジェクトがURPの場合は、カメラ・描画の部分は非常に大きな仕様変更がされているので、そのまま使えるかはわかりませんのでご注意ください。