制作游戏开始前的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);
}