セーブデータのキャプチャのタイミング

13 views
Skip to first unread message

Kanzaki Aoi

unread,
Oct 3, 2025, 11:50:40 AMOct 3
to 宴ユーザーグループ
1点ご質問させていただきたいです。
現在セーブ画面の構造を

元々
メイン画面 → セーブ画面
現在
メイン画面 → メニュー画面→セーブ画面

にしてしまったため
セーブ画面でのキャプチャがメニュー画面になってしまいました。

キャプチャを撮るタイミングをメニュー画面が開く直前か
キャプチャ時にメニュー画面のGameObjectを非表示にすることで可能なのでしょうか?
また、キャプチャのタイミングやカメラの指定などはどのスクリプトで実行されているのでしょうか?

マッドネスラボ

unread,
Oct 3, 2025, 3:46:00 PMOct 3
to 宴ユーザーグループ
セーブファイルのキャプチャーに関しては、 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の場合は、カメラ・描画の部分は非常に大きな仕様変更がされているので、そのまま使えるかはわかりませんのでご注意ください。



2025年10月4日土曜日 0:50:40 UTC+9 kanzaki...@gmail.com:

Kanzaki Aoi

unread,
Oct 4, 2025, 11:00:48 AMOct 4
to 宴ユーザーグループ
ありがとうございます。
セーブ画面でセーブできるところまで回避したのですが、
キャプションが何故か撮られないで真っ黒になってしまいました。

ちょっと他のソースだと思うのですが、要因が不明のままですので
一旦サムネイルで代用しようと思います。


お手を煩わせて申し訳ないです。

2025年10月4日土曜日 4:46:00 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages