letterbox / pillarbox on multiple camera (split screen) scenes

Hi. I am working a widescreen c# script that is working great at forcing my scene to be 16:9, but it only works on scenes that only have a single camera. One of my scenes contains a vertical split screen. This means that each camera needs to have an aspect ratio of 8:9.

I’m getting that to work, I’m just having trouble “offsetting” the left and right screens so that the total aspect ratio is 16:9 (right now it just centers both camera viewports in the middle.) I’ve tried a bunch of things, i just can’t figure out how to get it to work. I have two identical scripts, called “splitscreenleft” and “splitscreenright.” here’s splitscreenleft:

using UnityEngine;
using System.Collections;

public class splitscreenleft : MonoBehaviour {

	// Use this for initialization
void Start () 
{
    // set the desired aspect ratio (the values in this example are
    // hard-coded for 16:9, but you could make them into public
    // variables instead so you can set them at design time)
    float targetaspect = 8.0f / 9.0f;
 
    // determine the game window's current aspect ratio
    float windowaspect = (float)Screen.width / (float)Screen.height;
 
    // current viewport height should be scaled by this amount
    float scaleheight = windowaspect / targetaspect;
 
    // obtain camera component so we can modify its viewport
    Camera camera = GetComponent<Camera>();
 
    // if scaled height is less than current height, add letterbox
    if (scaleheight < 1.0f)
    {  
        Rect rect = camera.rect;
 
        rect.width = 1.0f;
        rect.height = scaleheight;
        rect.x = 0;
        rect.y = (1.0f - scaleheight) / 2.0f;
 
        camera.rect = rect;
    }
    else // add pillarbox
    {
        float scalewidth = 1.0f / scaleheight;
 
        Rect rect = camera.rect;
 
        rect.width = scalewidth;
        rect.height = 1.0f;
        rect.x = (1.0f - scalewidth) / 2.0f;
        rect.y = 0;
 
        camera.rect = rect;
    }
}
	
}

hopefully you can help me out!

It often helps to make what you want completely by hand, then look at the numbers and see how they got there. But the math here seems straight-forward. Look at your letterbox/“gaps on top/bottom” code:

rect.height = scaleheight;
rect.y = (1.0f - scaleheight) / 2.0f;

With two cameras, each will be 1/2 as tall, so both will have rect.height = scaleHeight/2;. Setting rect.y is making the gap on the bottom. You still want that exact same gap, so the bottom camera will use the same line. The upper camera will start at the center of the screen, so will have rect.y=0.5f;. Then the top gap will sort itself out, same as before.