【问题标题】:Unity Why wont my FPS pause menu stop the camera rotation?Unity 为什么我的 FPS 暂停菜单不会停止相机旋转?
【发布时间】:2019-07-25 13:18:33
【问题描述】:

我正在为我的 FPS 游戏制作暂停菜单,到目前为止,我能够让暂停菜单面板显示并与之交互,但它不会停止相机移动。谁能告诉我我做错了什么?

代码如下:

public class PauseMenuu : MonoBehaviour
{
    public static bool GameIsPaused = false;
    public GameObject PauseMenu;

    private void Start()
    {

    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (GameIsPaused)
            {
                Resume();
            }
            else
            {
                Pause();
            }
        }
    }

    void Resume()
    {
        PauseMenu.SetActive(false);
        Time.timeScale = 1f;
        GameIsPaused = false;
    }

    void Pause()
    {
        PauseMenu.SetActive(true);
        Time.timeScale = 0f;
        GameIsPaused = true;
    }
}

这是我的相机旋转代码,如果这可以帮助您弄清楚相机发生了什么。

public class CameraRotate : MonoBehaviour
{
public float speed;
float time = 14.0f;
public GameObject HeadCamera;
public bool updateOn = true;

void Start()
{
    StartCoroutine(updateOff());
}

void Update()
{
    Rotation();
}
void Rotation()
{
    RotateX += Input.GetAxis("Mouse X") * RotationSpeed;
    RotateY += Input.GetAxis("Mouse Y") * RotationSpeed;
    RotateY = Mathf.Clamp(RotateY, MinYAxis, MaxYAxis);
    Camera.transform.localRotation = Quaternion.Euler(-RotateY, 0f, 0f);
    transform.rotation = Quaternion.Euler(0f, RotateX, 0f);
}
}

【问题讨论】:

  • 不知道……Camera移动/旋转的实现代码在哪里?
  • 听起来您的相机移动与 Unity 中的 Time 构造无关。相机运动是纯粹由输入决定的还是每帧任意增加的变量决定的?确保相机周围的所有移动脚本都引用 Time.deltaTime 或连接到时间系统的某些计算部分,以便Time.timescale = 0f 实际上会影响它。
  • 猜测是因为相机代码不存在,但将时间刻度设置为 0 并不一定会冻结您的相机。有点像《黑客帝国》中的一个场景,动作停止但摄像机仍然可以四处移动。
  • @GraphTheory 这就是我在做更多研究后的想法,但我仍然没有找到解决它的方法。
  • @EthanK-B 添加您的相机代码可以帮助我们回答您的问题,也可以帮助将来有相同问题的人。

标签: c# unity3d


【解决方案1】:

它可以为你解决它,尝试相对于它自己的位置旋转相机。所以你要做的就是将它添加到你的函数调用的顶部:

void Rotation()
{
    if(Time.deltaTime == 0){
        return;
    }
...

另请注意,您可能需要更改几个值才能像以前一样获得旋转量。

希望对你有帮助!

【讨论】:

  • 很抱歉,我输入了错误的相机代码(当您连续两晚起床时会发生这种情况)。我用正确的代码更新了帖子。
  • 好的,现在它更有意义了。我编辑了答案,它现在应该可以工作了。
  • 它确实有效,但它会使相机出现故障并且移动良好。
  • 好吧,我猜这是因为 Time.DeltaTime 是可变的。将代码恢复到以前的代码并检查我上面的编辑。
  • 完美运行。谢谢。
猜你喜欢
  • 2012-01-17
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多