使用DontDestroyOnLoad Unity C#在场景之间保存对象

时间:2016-08-29 20:40:50

标签: c# unity3d unityscript unity5 scene

我正在制作一个2D游戏,我的角色可以从不同的房间进出,所以因为每个房间都是一个不同的场景,我需要能够以某种方式保持我的角色在每个场景中,为此目的统一优惠DontDestroyOnLoad() 因此,每当我切换场景时,我都会使用该功能,但是存在问题。

我们假设我的房间只有2个,看起来非常简单

enter image description here

在这个方案中,主要房间是你开始游戏的房间,它包含已经产生的角色预制件。一旦我们去了第二个房间,我的角色就​​会被他所有的好东西保存下来,但是如果我们回到主场景/房间,我们现在可以看到2个角色。为什么?因为我们的初始角色在加载不同场景时没有被破坏,我们也有一个与主房间/场景一起创建的角色。现在这真的很讨厌,我不知道如何解决这个问题,我在每个场景中都需要一些脚本也有同样的问题。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以通过脚本在主场景中生成角色 - 实例化它。确保为角色预制件提供某个标签(例如“播放器”)。

然后在if语句中实例化该字符。使用FindGameObjectWithTag(<Tag>) == null,您可以查看角色是否已创建。

public GameObject player;

if(GameObject.FindGameObjectWithTag("Player") == null){
   player = Instantiate(prefab,position,rotation) as GameObject;
}

答案 1 :(得分:0)

正常的解决方案是,您不要在可以多次查看的场景中创建设置为dynamic的对象。

大多数人所做的是创建一个预加载场景,这是第一个加载游戏的场景,它创建场景之间存在的所有对象,然后预加载场景加载“主游戏场景”。

如果您不想要预加载场景,那么您的游戏对象需要在DontDestroyOnLoad上检查游戏对象的另一个实例是否已存在。如果确实找到了一个实例,那么它需要自我毁灭。第一个实例将找不到任何其他实例,因此它不会被销毁,但所有将来的实例都将是。