Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用鼠标控制的摄像机定位问题,使播放器保持在视图中(对于第三人称视图)_C#_Visual Studio_Unity3d - Fatal编程技术网

C# 使用鼠标控制的摄像机定位问题,使播放器保持在视图中(对于第三人称视图)

C# 使用鼠标控制的摄像机定位问题,使播放器保持在视图中(对于第三人称视图),c#,visual-studio,unity3d,C#,Visual Studio,Unity3d,我设置了装备玩家角色,在玩家对象内移动了主摄像机,所以它总是和玩家一起移动,并添加了简单的摄像机移动脚本,由鼠标控制。脚本附加到播放器对象 以下是脚本代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseLook : MonoBehaviour { public float mouseSensitivity = 100f; publ

我设置了装备玩家角色,在玩家对象内移动了主摄像机,所以它总是和玩家一起移动,并添加了简单的摄像机移动脚本,由鼠标控制。脚本附加到播放器对象

以下是脚本代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public float minAngle = -45f;
    public float maxAngle = 45f;
    public float minPosition = 0f;
    public float maxPosition = 6f;
    public float camDefaultY = 3.198001f;
    public GameObject headObject;

    private float yaw = 0f;
    private float pitch = 0f;

    private Transform headAngle;
    // Start is called before the first frame update
    void Start()
    {
        headAngle = headObject.transform;
    }

    // Update is called once per frame
    void Update()
    {
        yaw += Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
        pitch = Mathf.Clamp(pitch, minAngle, maxAngle);

        transform.eulerAngles = new Vector3(0f, yaw, 0f);
        headObject.transform.eulerAngles = new Vector3(-pitch, headAngle.eulerAngles.y, headAngle.eulerAngles.z);
        Camera.main.transform.eulerAngles = new Vector3(pitch, yaw, 0f);
    }
}
最好的结果是:

  • 在鼠标移动时使播放器对象与相机水平旋转(在x轴上)(已解决
  • 使玩家头部(子对象)和相机在鼠标移动时垂直旋转(已解决
  • 将垂直摄像机旋转限制在45°(已解决
  • 垂直放置相机,使播放器对象始终位于同一位置(对此有问题)
我遇到的问题是,虽然我的前3项功能正常工作,但我找不到合适的方法来垂直定位摄影机,使玩家对象始终保持+/-在同一位置/视图中。我如何才能实现它?

以下是我得到的:

以下是我想要实现的目标(请注意,玩家如何在摄影机中保持在同一位置): 我也想知道是否有更简单的方法来实现整个第三人称鼠标控制


提前谢谢

所以我终于在别人的帮助下找到了答案。 为了保持头部的动画,用鼠标移动旋转它,使摄影机不仅跟随玩家的头部,而且跟随垂直限制的鼠标,我只是在“玩家对象”下创建了额外的空对象,将其用作摄影机目标,并将摄影机放在其中

从那时起,我在脚本中添加了它。以下是更新的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public float minAngle = -45f;
    public float maxAngle = 45f;
    public float minPosition = 0f;
    public float maxPosition = 6f;
    public float camDefaultY = 3.198001f;
    public GameObject cameraTarget;
    public GameObject headTarget;

    private float yaw = 0f;
    private float pitch = 0f;

    private Transform targetAngle;
    // Start is called before the first frame update
    void Start()
    {
        targetAngle = cameraTarget.transform;
    }

    // Update is called once per frame
    void Update()
    {
        yaw += Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
        pitch = Mathf.Clamp(pitch, minAngle, maxAngle);

        transform.eulerAngles = new Vector3(0f, yaw, 0f);
        cameraTarget.transform.eulerAngles = new Vector3(-pitch, targetAngle.eulerAngles.y, targetAngle.eulerAngles.z);
    }

    void LateUpdate()
    {
        headTarget.transform.eulerAngles = new Vector3(-pitch, targetAngle.eulerAngles.y, targetAngle.eulerAngles.z);
    }
}

将摄像机垂直放置,让玩家站在同一位置,这是什么意思?@BugFinder在鼠标垂直移动时更改摄像机Y位置,使玩家始终停留在视图中。如果我向上移动鼠标,相机向下移动(负Y),如果向下移动-相机向上移动(正Y)。。因此,播放器始终保持在视图中。因此,这不是移动相机角度,而是准确地上下移动相机,让它“看”播放器灯光,但我解释了如何做到这一点。是的。。