首页 > 解决方案 > 为什么当游戏在构建中运行时单击“开始游戏”按钮时它不起作用,但它在编辑器中工作?

问题描述

在编辑器的层次结构中,我有两个场景。我在菜单场景中有一个名为:StartGameButton

当我在编辑器中运行游戏时单击按钮时,它正在工作。我单击按钮,它在空间站场景中启用了真正的 player2。

但是在构建游戏并运行游戏 exe 后,当我单击按钮时它什么也不做。

这是 Hierarchy 和按钮 Inspector 中两个场景的截图:

开始游戏按钮

您可以在屏幕截图中看到 player2 处于灰色启用状态。在按钮中,我附加了脚本 LoadSceneOnClick:

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

public class LoadSceneOnClick : MonoBehaviour
{
    public void ActivatePlayer()
    {
        GameControl.player.SetActive(true);
        SceneManager.UnloadSceneAsync(0);
    }
}

我创建了一个静态类,以便能够在两个场景之间使用一个变量:

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

public static class GameControl
{
    public static GameObject player;
}

然后在空间站场景中,我有一个带有这个脚本的游戏对象:

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

public class PlayerControl : MonoBehaviour
{
    public GameObject player;

    // Use this for initialization
    void Start ()
    {
        GameControl.player = player;
    }

    // Update is called once per frame
    void Update () {

    }
}

因此,当我单击按钮 StartGameButton 时,它首先将 player2 更改为启用 true,然后卸载删除菜单场景。

GameControl.player.SetActive(true);
SceneManager.UnloadSceneAsync(0);

这在编辑器中运行良好。但是在构建游戏并运行 exe 文件后,它在构建中不起作用我看到了菜单场景和按钮,但是当我单击按钮时它什么也没做。

而且我看到在运行游戏时的构建中,整个游戏看起来不像在编辑器中一样。

这是游戏在编辑器中的样子:

游戏在编辑器中运行

由于活动场景是空间站,而玩家 2 已离开游戏,因此从主菜单开始,但使用天空盒和空间站场景的其他对象。

然后我点击按钮开始游戏:它把我带到了空间站场景:

并移除已卸载的 Menu 场景:

空间站场景

但是当我运行构建 exe 文件时,它看起来像这样:

建造

甚至不接近它在编辑器中的样子。

这是 Build Settings... 窗口的屏幕截图:我不知道为什么它在编辑器中运行良好,但在运行 exe 构建文件时却不行。

我对构建设置做错了吗?

构建设置...

标签: c#unity3d

解决方案


我设法解决了它,现在它运行完美。

我创建了另一个脚本并将其附加到 Menu 场景中的一个空 GameObject:

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

public class LoadScenes : MonoBehaviour
{
    // Use this for initialization
    void Start ()
    { 
        SceneManager.LoadScene(1, LoadSceneMode.Additive);
        StartCoroutine(WaitForSceneLoad(SceneManager.GetSceneByName("The Space Station")));        
    }

    public IEnumerator WaitForSceneLoad(Scene scene)
    {
        while (!scene.isLoaded)
        {
            yield return null;
        }
        SceneManager.SetActiveScene(SceneManager.GetSceneByBuildIndex(1));
    }
}

加载场景“空间站”后,我将其设置为 SetActive 场景。它向我展示了带有一些“空间站”对象和天空盒的菜单(主菜单)。

最后。


推荐阅读