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°(已解决)
- 垂直放置相机,使播放器对象始终位于同一位置(对此有问题)
提前谢谢 所以我终于在别人的帮助下找到了答案。 为了保持头部的动画,用鼠标移动旋转它,使摄影机不仅跟随玩家的头部,而且跟随垂直限制的鼠标,我只是在“玩家对象”下创建了额外的空对象,将其用作摄影机目标,并将摄影机放在其中 从那时起,我在脚本中添加了它。以下是更新的代码:
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)。。因此,播放器始终保持在视图中。因此,这不是移动相机角度,而是准确地上下移动相机,让它“看”播放器灯光,但我解释了如何做到这一点。是的。。