制作游戏开始前的UI界面

Asset>新建一个文件夹,命名为Scenes>create>scene,起名为GameStart

将其拖拽到hierachy窗口,在其Main Camera下新建Panel(面板),Image(图片),再新建Button,命名为GameStartButton,修改其内的text(文子),将该按钮调整到合适位置。

新建脚本GameStart

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

public class GameStartButton : MonoBehaviour
{

    
    public void OnButtonClick()//
    {
        string sceneName = "GameStart";
        // 检查是否已存在相同的场景
        Scene existingScene = SceneManager.GetSceneByName(sceneName);
        if (existingScene.IsValid())
        {
            // 如果存在,则卸载重复场景
            SceneManager.UnloadSceneAsync(existingScene);
        }
      
        SceneManager.LoadScene("GameStart", LoadSceneMode.Additive);//切换到游戏正式开始的界面
        Debug.Log("游戏开始");
    }

新建GameOver脚本

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

public class GameOverButton : MonoBehaviour
{
 
    public void OnButtonClick()//显示游戏结束界面
    {
        // 在这里添加结束游戏的逻辑  
        // 例如,你可以调用一个结束游戏的函数或方法  
        // 或者设置一个表示游戏结束的变量  
        // 或者销毁游戏对象等  

        string sceneName = "GameStart";
        // 检查是否已存在相同的场景
        Scene existingScene = SceneManager.GetSceneByName(sceneName);
        if (existingScene.IsValid())
        {
            // 如果存在,则卸载重复场景
            SceneManager.UnloadSceneAsync(existingScene);
        }
     
        SceneManager.LoadScene("GameStart", LoadSceneMode.Additive);
            Debug.Log("游戏结束");
        
    }
}

新建Members脚本

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

public class MemberButton : MonoBehaviour
{

    public void Start()
    { }
    public void OnButtonClick()
    {

        string sceneName = "GameStart";
        // 检查是否已存在相同的场景
        Scene existingScene = SceneManager.GetSceneByName(sceneName);
        if (existingScene.IsValid())
        {
            // 如果存在,则卸载重复场景
            SceneManager.UnloadSceneAsync(existingScene);
        }
       
        SceneManager.LoadScene("Members", LoadSceneMode.Additive);//切换到游戏制作人员名单
    }

}

然后将这三个脚本分别拖拽到对应的按钮上,将hierachy面板的按钮本身(注意不是按钮的脚本)拖拽到On Click()里(Runtime Only)下面那个框里,然后选择要调用的方法(记得在脚本中设定为public)

点击Member后会出现一个新的界面Members,这个界面中含有按钮ReturnButton,用于返回

新建ReturnButton脚本

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

public class ReturnButton : MonoBehaviour
{
    
    public void OnButtonClick()
    {
        string sceneName = "Members";
        // 检查是否已存在相同的场景
        Scene existingScene = SceneManager.GetSceneByName(sceneName);
        if (existingScene.IsValid())
        {
            // 如果存在,则卸载重复场景
            SceneManager.UnloadSceneAsync(existingScene);
        }
       
        SceneManager.LoadScene("GameStart", LoadSceneMode.Additive);//返回游戏开始界面
    }
}
像是上面将脚本添加到按钮的方法一样,将ReturnButton脚本添加到按钮上
SceneManager.LoadScene

public static void LoadScene (int sceneBuildIndex, SceneManagement.LoadSceneMode mode= LoadSceneMode.Single);

public static void LoadScene (string sceneName, SceneManagement.LoadSceneMode mode= LoadSceneMode.Single);

参数
sceneName 要加载的场景的名称或路径。
sceneBuildIndex Build Settings 中要加载场景的索引。
mode 允许您指定是否以累加方式加载场景。有关选项的更多信息,请参阅 LoadSceneMode
LoadSceneMode

enumeration

描述

在播放器中加载场景时使用。

通过 LoadSceneMode 选择在使用 SceneManager.LoadScene 时加载哪种类型的场景。可用模式为单模式和附加模式。

单模式将加载一个标准的 Unity 场景,该场景将独立显示在 Hierarchy 窗口中。附加模式将加载一个显示在 Hierarchy 窗口的场景,而窗口中同时还包含其他活动场景。

变量
Single 关闭所有当前加载的场景 并加载一个场景。
Additive 将场景添加到当前加载的场景。

因为我们想要场景多次反复地加载,故对所有按钮的脚本都使用了下面的方法,生成的场景会永远存在,每次点击一次按钮都会出现一次该场景。

  SceneManager.LoadScene("GameStart", LoadSceneMode.Additive);

但是因为场景每次点击按钮都会出现新的,为了防止场景过多,我们要销毁旧的,多余重复的场景

所以我们要判断判断之前是否已经出现过某个场景,如果有要将其删掉

 string sceneName = "Members";
 // 检查是否已存在相同的场景
 Scene existingScene = SceneManager.GetSceneByName(sceneName);
 if (existingScene.IsValid())
 {
     // 如果存在,则卸载重复场景
     SceneManager.UnloadSceneAsync(existingScene);
 }

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐