游戏开始菜单界面和按钮交互

制作游戏开始前的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要加载的场景的名称或路径。
sceneBuildIndexBuild 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);
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值