Unity3d 在unity中重用已使用的场景

Unity3d 在unity中重用已使用的场景,unity3d,Unity3d,我有一个场景在游戏开始时打开。让我们把这个场景称为“开始”。它有一个新的游戏按钮,通过加载新场景来启动游戏。这个场景叫做“游戏”。游戏在“游戏”场景结束后,我想打开“开始”场景 我正在为此使用Application.LoadLevel(“Start”)。但当“开始”场景再次打开时,所有游戏对象都将被删除,除了我在上使用DontDestroyOnLoad()的对象。如果我在“开始”场景中暂停游戏,游戏对象会返回,但在脚本中,无论它们在inspector中被分配到哪里,都会出现null 我不能在“开

我有一个场景在游戏开始时打开。让我们把这个场景称为“开始”。它有一个新的游戏按钮,通过加载新场景来启动游戏。这个场景叫做“游戏”。游戏在“游戏”场景结束后,我想打开“开始”场景

我正在为此使用Application.LoadLevel(“Start”)。但当“开始”场景再次打开时,所有游戏对象都将被删除,除了我在上使用DontDestroyOnLoad()的对象。如果我在“开始”场景中暂停游戏,游戏对象会返回,但在脚本中,无论它们在inspector中被分配到哪里,都会出现null

我不能在“开始”场景中的每个对象上使用DontDestryOnLoad,因为它们对“游戏”场景完全没有用处

我也尝试过Application.loadleveladdition,但会给出与DontDestroyOnLoad相同的结果

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


每次场景都可能从新的游戏对象开始,或者重复使用现有的游戏对象。但在“游戏”场景中不需要“开始”中的对象,但在“开始”中只需要“游戏”场景中的分数对象,我已经在其上应用了DontDestroyOnLoad。此对象将在“开始”场景中的对象上写入分数。

在一个场景中创建的任何内容都将在您更改场景时被销毁,除非该对象是静态的,或者您对该对象调用了
DontDestroyOnLoad()

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

游戏
场景创建一个
分数
对象

public class Game : MonoBehaviour 
{
     public GameObject score;

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

         if(score == null)
         {
             score = Instantiate(scorePrefab) as GameObject;
             DontDestroyOnLoad(score);
         }
     }
}
该代码确保下次重新加载
游戏
场景时,不会有额外的
分数
对象浮动