Ignore rendering specific GameObject

Currently, I have a split screen multiplayer view. Player 1 is on the top screen, player 2 is on the bottom.

Both players are Character Controllers with a mesh, and camera on them.

I have GUI objects created specially for each player and have each GUI object set to a separate layer. Each player camera renders only the GUI layer it needs to with the correct culling mask set.

Anyway, onto my problem. I would like to render player 1’s character on player 2’s camera, and player 2’s character on player 1’s camera.

I attempt this by doing the following in each player’s script:

public void OnPreRender ()
{
	this.renderer.enabled = false;
}

public void OnPostRender ()
{
	this.renderer.enabled = true;
}

My thinking is this: For each camera, before the rendering occurs, disable the current player’s renderer. When the rendering is complete, the current player’s renderer can be turned back on, allowing the other player to be able to see the current player.

However, when I try this, what happens is player 1 can see itself and player 2. But Player 2 cannot see either player 1 or player 2. Can somebody tell me where I’m going wrong?

I found a way around this issue by setting player 1 to a layer mask named “player1”. I set player 2 to a layer mask of “player2”. Then I have player 1’s layer mask disabled in player 1’s camera culling mask, and have player 2’s layer mask enabled in player 1’s camera culling mask. I do the reverse for player 2’s camera culling mask.

I would still like to understand why my code for OnPreRender/OnPostRender didn’t work.