示例场景一直说未加载,我点击播放按钮,播放场景统一冻结

时间:2021-06-06 18:00:36

标签: c# unity3d

我是移动开发的初学者;当我开始一切都很好时,我的鸟可能会发射没有问题,但添加后:

private void Update()
{
    if (transform.position.y > 10 || transform.position.y < -10
        || transform.position.x > 10 || transform.position.x < -10)
    {
        string currentSceneName = SceneManager.GetActiveScene().name;
        SceneManager.LoadScene(currentSceneName);
    }
}

要在 x 和 y 超过 10 或 - 10 时重新加载场景,示例场景开始显示 SampleScene(未加载)并且播放场景被冻结,这是图像 Playground link to code

当我删除更新功能时,它运行良好。

这是整个脚本:

 using UnityEngine;
 using UnityEngine.SceneManagement;

public class Bird : MonoBehaviour
{

    Vector3 _initialPosition;
    [SerializeField]private float _launchPower = 500;

   private void Awake()
    {
        _initialPosition = transform.position;
    }

    private void Update()
    {
        if (transform.position.y > 10 || transform.position.y < -10
            || transform.position.x > 10 || transform.position.x < -10)
        {
            string currentSceneName = SceneManager.GetActiveScene().name;
            SceneManager.LoadScene(currentSceneName);
        }
    }

    private void OnMouseDown()
    {
        GetComponent<SpriteRenderer>().color = Color.red;
    }

 
    private void OnMouseUp()
    {
        GetComponent<SpriteRenderer>().color = Color.white;
        Vector2 directionToInitialPosition = _initialPosition - transform.position;
        GetComponent<Rigidbody2D>().AddForce(directionToInitialPosition * _launchPower);
        GetComponent<Rigidbody2D>().gravityScale = 1;
    }

    private void OnMouseDrag()
    {
        Vector3 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        transform.position = new Vector3(newPosition.x, newPosition.y); 
    }
}

1 个答案:

答案 0 :(得分:0)

诚然,我并不完全确定这是否是正确的修复,我认为你所做的应该可以工作,只要鸟没有在这些参数之外重新启动。

但是,正如 BugFinder 所说,也许最好不要尝试在 Update() 中重新加载场景。因此,您可以尝试告诉另一个“SceneManager”对象重新启动场景,然后禁用您的 Bird 脚本,这样它就不会在已经尝试加载场景时尝试加载。

Bird
{
    Update()
    {
        if(BirdOutOfRange())
        {
            //might be better to broadcast this as event and 
            //have MySceneManager listen for it
            MySceneManager.ReloadScene(); //may be better practice, but also may be unnecessary
                                    

           //Disable Bird to stop any future attempts to reload scene
           this.enabled = false;