【问题标题】:Player movement doesn't work after reloading the scene in Unity在 Unity 中重新加载场景后玩家移动不起作用
【发布时间】:2023-01-30 00:25:57
【问题描述】:

使用 Unity 2021.3.16f1。

我按照来自 Brackets 的 tutorial 为我的 flappy bird 之类的游戏制作暂停菜单,在我退出主游戏到主菜单并返回游戏后,我的玩家移动停止工作。

负责移动的部分播放器代码:

public class birdScript : MonoBehaviour
{
    public Rigidbody2D myRigidbody;
    public float flapStrength;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            myRigidbody.velocity = Vector2.up * flapStrength;
            FindObjectOfType<AudioManager>().Play("jump");
        }

    }
}

负责加载主菜单场景的部分暂停菜单代码:

using UnityEngine.SceneManagement;

public class pauseMenu : MonoBehaviour
{
    public static bool gameIsPaused = false;
    public GameObject pauseMenuUI;

    public void loadMenu()
    {
        Time.timeScale = 1f;
        SceneManager.LoadScene("Title");
    }
}

负责加载主游戏场景的部分代码:

using UnityEngine.SceneManagement;

public class playButton : MonoBehaviour
{
    public void loadLevel()
    {
        SceneManager.LoadScene("Main game");
    }
}

我尝试更改加载主游戏的播放按钮代码,在场景层次结构中我的主菜单场景是 0,我的主游戏场景是 1。播放按钮在主菜单上。

我把这个

SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);

进入这个

SceneManager.LoadScene("Main game");

但什么也没发生,我尝试在谷歌上搜索,但我不知道如何搜索正确的答案。

【问题讨论】:

  • 您的代码中是否有任何地方将 flapStrength 变量或 Time.timeScale 设置为零?
  • 当你说到最后“什么都没发生”时,你的意思是运动仍然没有发生?因为似乎场景没有加载。除了上述评论所暗示的内容外,我看不到您共享的代码中出现这种行为的明显原因。你在任何时候都只有一个场景吗?
  • 让我也告诉你场景的加载不会影响你的问题,它们都以相同的方式加载相同的场景,只是第一个使用索引,然后使用一个字符串。

标签: c# unity3d scene-manager


【解决方案1】:

您的问题与场景加载无关。那就是说您的加载级别代码很好,因为它是:

using UnityEngine.SceneManagement;

public class playButton : MonoBehaviour
{
    public void loadLevel()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    }
}

问题可能出在您的pauseMenu 脚本中,但您只提供了部分代码。您需要确保在加载关卡场景时将您的Time.timeScale 设置为1f

我建议为flapStrength设置默认值。同样在 void Start 中,Time.timeScale 设置为 1f 只是为了确定。您可以在 pauseMenu 脚本中执行此操作。

public class birdScript : MonoBehaviour
{
    public Rigidbody2D myRigidbody;
    public float flapStrength = 10f;

    void Start()
    {
        Time.timeScale = 1f;
    }
    
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            myRigidbody.velocity = Vector2.up * flapStrength;
            FindObjectOfType<AudioManager>().Play("jump");
        }
    }
}

我希望答案有所帮助。问题是问题可能出在任何地方。有必要遍历所有值并检查玩家的行为。没有出现会停止游戏的错误吗?如果问题仍然存在,您将需要编辑问题并添加更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多