重新使用已经使用过的场景

时间:2014-12-06 14:29:13

标签: unity3d

我有一个场景在游戏开始时打开。让我们打电话给这个场景'开始'它有一个新的游戏按钮,通过加载一个新的场景开始游戏。这个场景叫做游戏'。游戏结束后游戏结束场景,我想打开'开始'场景。

我正在使用Application.LoadLevel(" Start")。但是当'开始'场景再次打开所有游戏对象都被删除,除了我使用DontDestroyOnLoad()的那些。如果我暂停游戏的开始'场景中,游戏对象返回但在脚本中无论在检查员中分配的位置都是null。

我无法在“开始”的每个对象上使用DontDestryOnLoad。因为他们对“游戏”完全无用的场景。场景。

我也尝试过Application.LoadLevelAdditive,但会得到与DontDestroyOnLoad相同的结果。

因此,我想要的过渡是开始 - >游戏 - >开始 - >游戏......

每次场景可以从新的游戏对象开始或重用现有游戏对象。但是在'开始'中的对象在“游戏”中不需要场景,但只有一个得分对象的游戏'我已经应用了DontDestroyOnLoad的'开始'中需要场景。此对象将在'开始'中的对象上写下分数。场景。

1 个答案:

答案 0 :(得分:1)

当您更改场景时,在一个场景中创建的任何内容都将被销毁,除非对象为static或您在该对象上调用DontDestroyOnLoad()

因此,从Start --> Game --> Start --> Game开始没有任何副作用在逻辑上是正确的。但是,您必须避免重复创建对象,例如:

Game场景会创建一个Score对象。

public class Game : MonoBehaviour 
{
     public GameObject score;

     void Awake()
     {
         score = GameObject.Find("Score");

         if(score == null)
         {
             score = Instantiate(scorePrefab) as GameObject;
             DontDestroyOnLoad(score);
         }
     }
}

该代码可确保您下次重新加载Game场景时,不会有一个额外的Score对象浮动。