c# code examples
                                //https://www.youtube.com/watch?v=rDJOilo4Xrg
using System.Collections;
using MLAPI;
using MLAPI.Messaging;
using MLAPI.NetworkVariable;
using UnityEngine;
namespace AnotherUniverse
{
    public class AnotherCameraOrbit : NetworkBehaviour
    {
        [SerializeField] private Camera cam;
        //[SerializeField] private Transform target;
        [SerializeField] private float distanceToTarget = 10;
        
        [SerializeField] private float mouseSensitivity;//copied from my other project scripts
        void Start()
        {
            //Cursor.lockState = CursorLockMode.Locked;//copied from my other project scripts
        }
        void Update()
        {
            if (!IsOwner) { return; }
            CamOrbServerRpc();
            
        }
        [ServerRpc]
        private void CamOrbServerRpc()
        {
            CamOrbClientRpc();
        }
        [ClientRpc]
        private void CamOrbClientRpc()
        {
            float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;//copied from my other project scripts
            float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;//copied from my other project scripts
            float rotationAroundYAxis = mouseX * 180; // camera moves horizontally
            float rotationAroundXAxis = -mouseY * 180; // camera moves vertically
            //I use this because if I use the serializefield, the prefab will then clone a new different one and the target.position will be useless----------------------
            if (NetworkManager.Singleton.ConnectedClients.TryGetValue(NetworkManager.Singleton.LocalClientId,
                    out var networkedClient))//declaring the user as networkedclient
                {
                    var player = networkedClient.PlayerObject.GetComponent<AnotherMyPlayer>();
                    if (player)
                    {
                        cam.transform.position = player.transform.position;//cam.transform.position = target.position;
                    }
                }
            string bruh = mouseX.ToString();
            print(bruh);
                //------------------------------------------------------------------------------------------------------------------------------------------------------------
                cam.transform.Rotate(new Vector3(1, 0, 0), rotationAroundXAxis);
            cam.transform.Rotate(new Vector3(0, 1, 0), rotationAroundYAxis, Space.World); // <— This is what makes it work!
            cam.transform.Translate(new Vector3(0, 0, -distanceToTarget));
            //print("Camera is working");
        }
    }
}
/*THIS SCRIPT ROTATES CAMERA AROUND THE OBJECT/PLAYER WHEN MOUSE IS HOLD-CLICK, CAN BE USEFUL FOR INSPECTING WEAPONS OR CHARACTERS
using UnityEngine;
using System.Collections;
public class CameraOrbit : MonoBehaviour
{
    public float turnSpeed = 4.0f;
    public Transform player;
    private Vector3 offset;
    void Start()
    {
        offset = new Vector3(player.position.x, player.position.y + 8.0f, player.position.z + 7.0f);
    }
    void LateUpdate()
    {
        transform.position = player.position + offset;
        transform.LookAt(player.position);
        if (Input.GetMouseButton(1))
        {
            offset = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset;
        }
    }
}
*/