我正在尝试使用“鼠标外观/轨道”脚本,但我遇到了问题 . 我的游戏有四个摄像头 . 以 table 为中心,代表玩家 . 这是一款多人纸牌游戏,所以你可以想象四面桌周围的玩家 . 每个相机都面向不同的方向 . 在我的检查器中,我有一个空对象,我将此脚本绑定到 . 在这个物体里面,是我的相机(所以,四个物体,每个物体都包含一个相机) . 这是脚本:

public class MouseOrbitImproved : MonoBehaviour
{
    public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
    public RotationAxes axes = RotationAxes.MouseXAndY;
    public float sensitivityX = 3F;
    public float sensitivityY = 3F;
    public float minimumX = -360F;
    public float maximumX = 360F;
    public float minimumY = -10.0F;
    public float maximumY = 60F;
    public string playerCamera;

    float rotationX = 0F;
    float rotationY = 0F;
    Quaternion originalRotation;
    private Rigidbody rigidBody;
    public float _distance = 20.0f;


    //Control the speed of zooming and dezooming.
    public float _zoomStep = 1.0f;

    void Update()
    {

        if (Input.GetMouseButton(2))
        {
            if (axes == RotationAxes.MouseXAndY)
            {
                // Read the mouse input axis
                rotationX += Input.GetAxis("Mouse X") * sensitivityX;
                rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
                rotationX = ClampAngle(rotationX, minimumX, maximumX);
                rotationY = ClampAngle(rotationY, minimumY, maximumY);
                Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
                Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, -Vector3.right);
                transform.localRotation = originalRotation * xQuaternion * yQuaternion;
            }
            else if (axes == RotationAxes.MouseX)
            {
                rotationX += Input.GetAxis("Mouse X") * sensitivityX;
                rotationX = ClampAngle(rotationX, minimumX, maximumX);
                Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
                transform.localRotation = originalRotation * xQuaternion;
            }
            else
            {
                rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
                rotationY = ClampAngle(rotationY, minimumY, maximumY);
                Quaternion yQuaternion = Quaternion.AngleAxis(-rotationY, Vector3.right);
                transform.localRotation = originalRotation * yQuaternion;
            }
        }       

    }
    void Start()
    {
        // Make the rigid body not change rotation
        string camName = playerCamera + "CameraHolder";     
         GameObject eastCamera = GameObject.FindWithTag(camName);
        if (eastCamera)
        {
            originalRotation = eastCamera.transform.localRotation;

        }
    }
    public static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360F)
             angle += 360F;
        if (angle > 360F)
             angle -= 360F;
        return Mathf.Clamp(angle, min, max);
    }
}

这个脚本适用于第一个播放器,但对于其他人来说,相机旋转的轴会混合起来(我假设它因为它像原始的“镜像”) . 那么,我如何通过这个脚本来解释相机指向的方向变化?我试图在Start函数中考虑到这一点,但这似乎没有帮助 .

谢谢

EDIT

在与HRISTO合作之后,这就是我最终做的事情:

  • 我停止使用四个摄像头,只使用了一个 . 然后我有一个用于方向和旋转的矢量数组,用于四个"players"中的每一个

  • 当游戏加载时,我根据加入游戏的玩家将相机设置为正确的旋转/方向阵列 .

  • 在我的相机脚本中,我添加了:

private void LateUpdate()
{
    GameObject controller = GameObject.FindWithTag("controller");
    GameController playerScript = controller.GetComponent<GameController>();
    int playerId = playerScript.getPlayerId();            
    string playerDirection = playerScript.getPlayerDirectionByID(playerId);
    DebugConsole.Log("Player Direction = " + playerDirection);

    if (playerDirection == "EAST")
    {
        originalRotation = playerScript.eastCameraRotaion;
        originalPosition = playerScript.eastCameraVector;
    }
    else if (playerDirection == "WEST")
    {
        originalRotation = playerScript.westCameraRotaion;
        originalPosition = playerScript.westCameraVector;
    }
    else if (playerDirection == "NORTH")
    {
        originalRotation = playerScript.northCameraRotaion;
        originalPosition = playerScript.northCameraVector;
    }
    else if (playerDirection == "SOUTH")
    {
        originalRotation = playerScript.southCameraRotaion;
        originalPosition = playerScript.southCameraVector;
    }

}

最初,我在Start方法中执行此操作,但意识到在加载场景之前,在玩家添加到游戏之前,相机脚本已加载 . 因此,无法知道使用哪些向量 . 通过在Update方法中执行此操作,我可以检查要使用的方向/旋转 .