Flip/Mirror > Camera?

Is there a way to flip the Camera (let's say in X position), so the whole scene is "mirrored" for example to the right side,?

You can use something like this (Once in start should do it):

Matrix4x4 mat = Camera.main.projectionMatrix;
mat *= Matrix4x4.Scale(new Vector3(-1, 1, 1));
Camera.main.projectionMatrix = mat;

If you have render to texture (pro only) you could easily achieve this by rendering a texture and then flip that texture before it's displayed.

Just use the attached script in your camera, it will flip the image according to the editor selection and fix the culling accordingly.

using UnityEngine;

[RequireComponent(typeof(Camera))]
[ExecuteInEditMode]
public class MirrorFlipCamera : MonoBehaviour {

	new Camera camera;

	public bool flipHorizontal;

	void Awake () {
		camera = GetComponent<Camera>();
	}

	void OnPreCull() {
		camera.ResetWorldToCameraMatrix();
		camera.ResetProjectionMatrix();
		Vector3 scale = new Vector3(flipHorizontal ? -1 : 1, 1, 1);
		camera.projectionMatrix = camera.projectionMatrix * Matrix4x4.Scale(scale);
	}

	void OnPreRender () {
		GL.invertCulling = flipHorizontal;
	}
	
	void OnPostRender () {
		GL.invertCulling = false;
	}
}

URP and HDRP have deprecated the On…Render events. Here is a version of @ApenasVB s script which will work for URP and HDRP. I also added mirroring for both axis.

using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor;

[RequireComponent(typeof(Camera))]
[ExecuteInEditMode]
public class MirrorFlipCamera : MonoBehaviour
{
	Camera _camera;
	public Camera Camera
	{
		get
		{
			if (_camera == null)
			{
				_camera = this.GetComponent<Camera>();
			}
			return _camera;
		}
	}

	[SerializeField]
	protected bool flipHorizontal;
	public bool FlipHorizontal
	{
		get => flipHorizontal;
		set
		{
			flipHorizontal = value;
			UpdateCameraMatrix();
		}
	}

	[SerializeField]
	protected bool flipVertical;
	public bool FlipVertical
	{
		get => flipVertical;
		set
		{
			flipVertical = value;
			UpdateCameraMatrix();
		}
	}

	protected float aspectRatio = 0;

	void Awake()
	{
		RenderPipelineManager.beginCameraRendering += beginCameraRendering;
		RenderPipelineManager.endCameraRendering += endCameraRendering;
	}

	void beginCameraRendering(ScriptableRenderContext context, Camera camera)
	{
		// Flip only if ONE of the two axis is mirrored but not if both are mirrored.
		if (this == null || !this.gameObject.activeInHierarchy)
			return;

		GL.invertCulling = flipHorizontal ^ flipVertical;

		// update is aspect ratio changed
		if (Mathf.Abs(aspectRatio - Camera.aspect) > 0.01f)
		{
			aspectRatio = Camera.aspect;
			UpdateCameraMatrix();
		}
	}

	void endCameraRendering(ScriptableRenderContext context, Camera camera)
	{
		if (this == null || !this.gameObject.activeInHierarchy)
			return;

		GL.invertCulling = false;
	}

	public void UpdateCameraMatrix()
	{
		Camera.ResetWorldToCameraMatrix();
		Camera.ResetProjectionMatrix();
		Vector3 scale = new Vector3(
			flipHorizontal ? -1 : 1,
			flipVertical ? -1 : 1,
			1);
		Camera.projectionMatrix = Camera.projectionMatrix * Matrix4x4.Scale(scale);

	}

	void OnValidate()
	{
		if (Camera == null)
			return;

		UpdateCameraMatrix();

#if UNITY_EDITOR
		RenderPipelineManager.beginCameraRendering -= beginCameraRendering;
		RenderPipelineManager.endCameraRendering -= endCameraRendering;
		if (!EditorApplication.isPlayingOrWillChangePlaymode)
		{
			RenderPipelineManager.beginCameraRendering += beginCameraRendering;
			RenderPipelineManager.endCameraRendering += endCameraRendering;
		}
#endif
	}
}

Since another answer mentioned the Unity wiki (which no longer exists), here is the linked page from the archives: InvertCamera - Unify Community Wiki

There is the answer: http://wiki.unity3d.com/index.php?title=InvertCamera

any ideas why the vertical flip cant work together with the horizontal one (in conjunction)?
it causes render issue.

Vector3 scale = new Vector3(-1, -1, 1);