为什么当游戏在游戏中运行时单击“开始游戏”按钮时,它无法正常工作,除了它在编辑器中工作之外什么都没有?

时间:2018-05-20 21:26:32

标签: c# unity3d

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

的按钮

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

但是当我点击按钮构建游戏并运行游戏exe后,它什么也没做。

这是层次结构和按钮Inspector中的两个场景的屏幕截图:

StartGameButton

您可以在屏幕截图中看到,播放器2处于灰色启用虚假关闭状态。 在按钮中,我附加了脚本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文件之后它没有在构建中工作我看到菜单场景和按钮但是当我点击按钮时它什么也没做。

我发现,在运行游戏时,整个游戏看起来与编辑器中的不一样。

这就是游戏在游戏中的样子:

Game running in editor

由于活动场景是空间站,而且播放器2关闭,游戏从主菜单开始,但使用天空盒和空间站场景的其他物体。

然后我点击START GAME按钮: 它带我去了空间站的场景:

删除已卸载的菜单场景:

Space Station scene

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

Build

甚至没有接近编辑中的样子。

这是Build Settings ...窗口的屏幕截图: 我无法弄清楚为什么它在编辑器中正常工作,但在运行exe构建文件时却没有。

我是否对构建设置做错了什么?

Build Settings...

1 个答案:

答案 0 :(得分:1)

我设法解决了它,现在它完美无缺。

我创建了另一个脚本并将其附加到菜单场景中的空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场景。 它向我展示了菜单(主菜单)和一些空间站"对象和天空盒。

最后。