Screenshot only with specified cameras

Hi everyone,

I want to take a screenshot of my game. BUT I want to limit the screenshot to specific cameras. AND while the screenshot is taken, the user should not see any changes to the game. There should be a camera shutter effect on the UI, but that should not be part of the screenshot.

In this example, I have 4 cameras:

  • Camera 1 renders the cube on Layer A. Clear Flag: Skybox
  • Camera 2 renders the 2 cylinders on Layer B. Clear Flag: Depth Only
  • Camera 3 renders the 1st User Interface (Canvas 1) on Layer C. Clear Flag: Depth Only
  • Camera 4 renders the 2nd User Interface (Canvas 2) on Layer D. Clear Flag: Depth Only

I only want the screenshot to include Camera 1, 2 and 3.

Here’s what the player should see during gaming:

Here’s what the screenshot should look like after it was taken and saved:

Have you tried just disabling the cameras you don’t need?
Put it into a coroutine and it should be fine. I needed something similar - I only wanted to take a screenshot from one camera in a fixed point but not the GUI and main camera.

IEnumerator Screenshot()
{
	// Disable unrequired cameras
	mainCamera.enabled = false;
	GUICamera.enabled=false;

	// Enable the camera to take a screenshot with 
	photographer.enabled=true;

	yield return new WaitForFixedUpdate();

	GetComponent<AudioSource>().PlayOneShot (shutter);
	
	int width = Screen.width;
	int height = Screen.height;
	
	Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24,false);
	yield return new WaitForFixedUpdate();

	tex.ReadPixels(new Rect(0,0,width, height), 0,0);
	tex.Apply();

	// Do whatever with screenshot
	Destroy (tex);

	mainCamera.enabled = true;
	GUICamera.enabled=true;
	photographer.enabled=false;

	yield return (0);
}