📜  场景切换 unity - C# (1)

📅  最后修改于: 2023-12-03 15:08:07.063000             🧑  作者: Mango

场景切换 Unity - C#

在使用Unity开发游戏时,场景切换是必不可少的功能,因为游戏中经常需要在不同的场景之间进行切换,比如游戏开始场景、关卡场景、后续场景。本文将介绍Unity中的场景切换,包括如何加载场景、如何传递参数和如何卸载场景等。

加载场景

在Unity中,场景可以通过SceneManager类来管理和切换。要加载一个场景,可以使用SceneManager.LoadScene方法,传入场景的名称或场景的索引。例如,要加载一个名为Level1的场景,可以这样写:

SceneManager.LoadScene("Level1");

或者,通过索引来加载场景:

SceneManager.LoadScene(1);

注意,在使用LoadScene方法时,默认情况下Unity不会销毁当前场景中的对象,而是将它们保留在内存中。如果需要销毁场景中的对象,可以使用以下方法:

SceneManager.LoadScene("Level1", LoadSceneMode.Single);

其中,LoadSceneMode.Single参数指示只加载指定的场景,并卸载当前场景中的所有对象。

传递参数

在加载场景时,通常需要传递一些参数给新场景使用。Unity提供了两种方法来实现参数传递。

通过场景名传递参数

在要跳转到的场景中定义一个静态变量,然后在要跳转的场景中加载时,将值传递给该变量。例如,要在场景之间传递一个整数参数,可以这样写:

// 定义在要跳转的场景中传递的参数
public static int Score;

// 在加载目标场景时加载参数
SceneManager.LoadScene("Level2");
Level2.Score = 100;
通过场景索引传递参数

在要跳转的场景中,定义一个静态方法来接收参数,然后在跳转时,通过buildIndex属性获取索引值,并调用该方法。例如:

// 定义在要跳转的场景中接收参数的方法
public static void SetScore(int score)
{
    Score = score;
}

// 在加载目标场景时传递参数
int score = 100;
SceneManager.LoadScene(2);
Level2.SetScore(score);
卸载场景

在Unity中,已加载的场景可以通过UnloadScene方法进行卸载。该方法通常在不需要使用当前场景时使用,以释放内存。例如:

SceneManager.UnloadSceneAsync("Level1");

该方法将异步卸载名为Level1的场景。需要注意的是,UnloadScene方法只会卸载其他场景中的对象,而不会销毁当前场景的对象。如果需要销毁当前场景中的对象,请使用SceneManager.LoadScene方法的Single模式。