我有一个场景在游戏开始时打开。让我们打电话给这个场景'开始'它有一个新的游戏按钮,通过加载一个新的场景开始游戏。这个场景叫做游戏'。游戏结束后游戏结束场景,我想打开'开始'场景。
我正在使用Application.LoadLevel(" Start")。但是当'开始'场景再次打开所有游戏对象都被删除,除了我使用DontDestroyOnLoad()的那些。如果我暂停游戏的开始'场景中,游戏对象返回但在脚本中无论在检查员中分配的位置都是null。
我无法在“开始”的每个对象上使用DontDestryOnLoad。因为他们对“游戏”完全无用的场景。场景。
我也尝试过Application.LoadLevelAdditive,但会得到与DontDestroyOnLoad相同的结果。
因此,我想要的过渡是开始 - >游戏 - >开始 - >游戏......
每次场景可以从新的游戏对象开始或重用现有游戏对象。但是在'开始'中的对象在“游戏”中不需要场景,但只有一个得分对象的游戏'我已经应用了DontDestroyOnLoad的'开始'中需要场景。此对象将在'开始'中的对象上写下分数。场景。
答案 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
对象浮动。