Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save neguse11/94198b42821aaf042f44 to your computer and use it in GitHub Desktop.
Save neguse11/94198b42821aaf042f44 to your computer and use it in GitHub Desktop.
CM3D2の「UI無しスクリーンショット」にUIが写る問題の解消方法

CM3D2の「UI無しスクリーンショット」にUIが写る問題の解消方法

結論

UI無しスクリーンショットが撮られるフレームでは、各 UICamera が持つ UICamera.camera.enabled が false になるので、これに合わせて UI 表示を調整すると良いです。

例えば以下のようなメソッド IsGuiVisible() を用意して、IsGuiVisible() == false の場合は UI 表示を行わないようにします

class MyCoolPlugin  : PluginBase {
    ...

    public void OnGUI() {
        // UI無しスクリーンショットが撮られる際は処理をスキップ
        if (! IsGuiVisible()) return;

        ... 本来のGUI処理 ...
    }

    bool IsGuiVisible() {
        Camera camera = UICamera.currentCamera;
        return camera != null && camera.enabled;
    }
}

処理の詳細

  • UI無しスクリーンショットを撮る際は CameraMain.ScreenShot(bool f_bNoUI) -> CameraMain.SaveScreenShotNoUI() が呼ばれます
  • CameraMain.SaveScreenShotNoUI()内では以下の順番で処理が行われます
    • CameraMain.UIHide が呼ばれる
      • 各 UICamera について UICamera.camera.enabled を false にする
    • UnityEngine.Application::CaptureScreenshot を用いてスクリーンショットを取る
    • CameraMain.UIResume が呼ばれる
      • 各 UICamera について UICamera.camera.enabled を true にする

メモ

  • camera は Component のメンバー
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment