Photon IsMine not working?

Hey guys!

I’m trying a small multiplayer game that just me and a friend is supposed to play.

I’ve followed a tutorial and got to the point where both player spawn if they connect.
Now the problem: Everytime the second player spawns, the cameras swap. So the host sees the view of the client and vice versa.

The only code that should affect it is the following.

using Photon.Pun;
using UnityEngine;
 
public class MouseLook : MonoBehaviour
{
    public PhotonView photonView;

    public bool canMove = true;

    Vector2 _mouseAbsolute;
    Vector2 _smoothMouse;
 
    public Vector2 clampInDegrees = new Vector2(360, 180);
    public bool lockCursor;
    public Vector2 sensitivity = new Vector2(2, 2);
    public Vector2 smoothing = new Vector2(3, 3);
    public Vector2 targetDirection;
    public Vector2 targetCharacterDirection;
 
    // Assign this if there's a parent object controlling motion, such as a Character Controller.
    // Yaw rotation will affect this object instead of the camera if set.
    public GameObject characterBody;
 
    void Start()
    {
        photonView = GameObject.FindGameObjectWithTag("Player").GetComponent<PhotonView>();
        if(!photonView.IsMine)
        {
            GetComponent<Camera>().enabled = false;
            enabled = false;
        }
        // Set target direction to the camera's initial orientation.
        targetDirection = transform.localRotation.eulerAngles;
 
        // Set target direction for the character body to its inital state.
        if (characterBody)
            targetCharacterDirection = characterBody.transform.localRotation.eulerAngles;
    }
 
    void Update()
    {
        if(photonView.IsMine)
        {
            if(canMove)
            {
                // Ensure the cursor is always locked when set
                if (lockCursor)
                {
                    Cursor.lockState = CursorLockMode.Locked;
                }
 
            // Allow the script to clamp based on a desired target value.
                var targetOrientation = Quaternion.Euler(targetDirection);
                var targetCharacterOrientation = Quaternion.Euler(targetCharacterDirection);
 
            // Get raw mouse input for a cleaner reading on more sensitive mice.
                var mouseDelta = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
 
            // Scale input against the sensitivity setting and multiply that against the smoothing value.
                mouseDelta = Vector2.Scale(mouseDelta, new Vector2(sensitivity.x * smoothing.x, sensitivity.y * smoothing.y));
 
            // Interpolate mouse movement over time to apply smoothing delta.
                _smoothMouse.x = Mathf.Lerp(_smoothMouse.x, mouseDelta.x, 1f / smoothing.x);
                _smoothMouse.y = Mathf.Lerp(_smoothMouse.y, mouseDelta.y, 1f / smoothing.y);
 
            // Find the absolute mouse movement value from point zero.
                _mouseAbsolute += _smoothMouse;
 
            // Clamp and apply the local x value first, so as not to be affected by world transforms.
                if (clampInDegrees.x < 360)
                    _mouseAbsolute.x = Mathf.Clamp(_mouseAbsolute.x, -clampInDegrees.x * 0.5f, clampInDegrees.x * 0.5f);
 
            // Then clamp and apply the global y value.
                if (clampInDegrees.y < 360)
                    _mouseAbsolute.y = Mathf.Clamp(_mouseAbsolute.y, -clampInDegrees.y * 0.5f, clampInDegrees.y * 0.5f);
 
                transform.localRotation = Quaternion.AngleAxis(-_mouseAbsolute.y, targetOrientation * Vector3.right) * targetOrientation;
 
            // If there's a character body that acts as a parent to the camera
                if (characterBody)
                {
                    var yRotation = Quaternion.AngleAxis(_mouseAbsolute.x, Vector3.up);
                    characterBody.transform.localRotation = yRotation * targetCharacterOrientation;
                }
                else
                {
                    var yRotation = Quaternion.AngleAxis(_mouseAbsolute.x, transform.InverseTransformDirection(Vector3.up));
                    transform.localRotation *= yRotation;
                }
            }
        }
    }
}

All the necessary components are already added… does anyone got an idea?

Thanks in advance!

Hey there,

do you have the camera as part of the player prefab? if yes is it tagged as main camera?

If this is the case you should perhaps consider to simply take the camera out of the prefab and leave it in the scene. Then the Player that actually has the isMine true can search and grab the camera.

this should be a easier workaround since your problem atm is probably not that isMine is not working.