uNet first person camera issue

I went through the uNet tut found here: Learn
Everything worked great. I am now going back through and making my own game. I used the lobby instead. I am also making a FPS. I am using the standard assets fps controller. I deleted the main camera out of the scene. I added a camera as a child of my player prefab. I add a public Camera to the controller and I dropped in the camera from the prefab. I deleted the code that gets the main camera. I start a server and a client. When I am on the client everything works correctly. When I am on the server, the player moves and shoots but I am looking through the camera of the client and not the server. I also cannot control the camera orbit or movement. I can’t figure out why it isn’t using the camera on the server player prefab. I have the camera set to untagged. If I disconnect the client, the server prefabs pops to normal and I can control the character correctly. Here is the beginning of the player controller with my changes. The rest of the code is the same as the standard asset.

using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
using UnityStandardAssets.Utility;
using Random = UnityEngine.Random;
using UnityEngine.Networking;

namespace UnityStandardAssets.Characters.FirstPerson
{
    [RequireComponent(typeof (CharacterController))]
    [RequireComponent(typeof (AudioSource))]
    public class FirstPersonController : NetworkBehaviour
    {
        [SerializeField] private bool m_IsWalking;
        [SerializeField] private float m_WalkSpeed;
        [SerializeField] private float m_RunSpeed;
        [SerializeField] [Range(0f, 1f)] private float m_RunstepLenghten;
        [SerializeField] private float m_JumpSpeed;
        [SerializeField] private float m_StickToGroundForce;
        [SerializeField] private float m_GravityMultiplier;
        [SerializeField] private MouseLook m_MouseLook;
        [SerializeField] private bool m_UseFovKick;
        [SerializeField] private FOVKick m_FovKick = new FOVKick();
        [SerializeField] private bool m_UseHeadBob;
        [SerializeField] private CurveControlledBob m_HeadBob = new CurveControlledBob();
        [SerializeField] private LerpControlledBob m_JumpBob = new LerpControlledBob();
        [SerializeField] private float m_StepInterval;
        [SerializeField] private AudioClip[] m_FootstepSounds;    // an array of footstep sounds that will be randomly selected from.
        [SerializeField] private AudioClip m_JumpSound;           // the sound played when character leaves the ground.
        [SerializeField] private AudioClip m_LandSound;           // the sound played when character touches back on ground.

        public Camera m_Camera;
        private bool m_Jump;
        private float m_YRotation;
        private Vector2 m_Input;
        private Vector3 m_MoveDir = Vector3.zero;
        private CharacterController m_CharacterController;
        private CollisionFlags m_CollisionFlags;
        private bool m_PreviouslyGrounded;
        private Vector3 m_OriginalCameraPosition;
        private float m_StepCycle;
        private float m_NextStep;
        private bool m_Jumping;
        private AudioSource m_AudioSource;
        public GameObject bulletPrefab;
        public Transform bulletSpawn;


        // Use this for initialization
        private void Start()
        {

            m_CharacterController = GetComponent<CharacterController>();
          
            m_OriginalCameraPosition = m_Camera.transform.localPosition;
            m_FovKick.Setup(m_Camera);
            m_HeadBob.Setup(m_Camera, m_StepInterval);
            m_StepCycle = 0f;
            m_NextStep = m_StepCycle/2f;
            m_Jumping = false;
            m_AudioSource = GetComponent<AudioSource>();
            m_MouseLook.Init(transform , m_Camera.transform);
        }

        public override void OnStartLocalPlayer()
        {
            GetComponent<MeshRenderer>().material.color = Color.blue;
        }
        // Update is called once per frame
        private void Update()
        {
            if (!isLocalPlayer)
            {
                return;
            }


            if (Input.GetMouseButtonDown(0))
            {

                 CmdFire();
            }

I have exactly the same issue, did you find a solution ?

so is the problem that you have two cameras in the scene and it’s rendering the wrong one for the local player?

if so, in Awake, you could disable the camera. then in OnStartLocalPlayer, turn the camera back on. this function should only be called for the local player, so you’ll end up with a situation where the camera for the local player will be enabled, and the remote players’ cameras will be disabled.

I never found a solution. I did not try robochase’s solution.
Yes there is more than one camera. Every player has a camera so in a 16 vs 16 there would be 32 cameras in the scene.

I tried to disable all cameras an enable it on start and it works. I did this :
private Camera cam; (Attribute)

cam = GetComponentInChildren(); (in Start())

if (isLocalPlayer) (in Update())
{
if (!cam.enabled)
cam.enabled = true;
}

I ended up doing this in the update. not sure which way is better. This is working and tested with 3 different players.

void Update()
    {
        if (isLocalPlayer)
        {
            if (!cam.enabled)
                cam.enabled = true;
        }
        else
        {
            cam.enabled = false;
        }
    }