如何使用从前一场景中选择的一个对象到当前场景?

时间:2014-04-03 12:12:23

标签: unity3d scene

我正在制作FPS游戏。我在主菜单场景中的第一个场景。哪个好。在第二个场景中,用户正在选择他想要使用的枪(有四支枪)。当他按下播放时我正在加载新场景(gamePlay)。如何跟踪用户选择的枪?那么,他可以在gamePlay中使用那把枪吗?通过切换相机在单个场景中工作时很容易。但是如何在新场景中做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以设置用户选择不会自动销毁的GameObjects。看看DontDestroyOnLoad

这样,在更改场景时会保留它们。

在选择屏幕中,您可能需要让它们处于非活动状态。

答案 1 :(得分:1)

这就是我一直在做的事情,而且效果非常好。

实现一个派生自MonoBehaviour的Singleton,以便在菜单之间保持用户选择,并在加载新级别时不会销毁。

Singleton示例

public class UserChoices : MonoBehaviour 
{
    public static UserChoices Instance = null;

    // just an example, add more as you like
    public int gun;

    void Awake()
    {
         DontDestroyOnLoad(this.gameObject);
         if(Instance == null)
         {
             Instance = this;
         } else if(Instance != this)
         {
             Destroy(this.gameObject);
         }
     }
}

现在您只需要执行一次:

  1. 创建一个空的GameObject
  2. 将此脚本附加到该脚本,然后将其另存为预制件
  3. 在每个需要它的场景中拖动它
  4. 现在,您可以轻松地在场景之间保存和阅读用户选择:

    // read chosen gun
    int chosen_gun = UserChoises.Intance.gun;
    
    //save chosen gun
    UserChoises.Intance.gun = PlayerGuns.Knife;
    

    只是旁注,我通常创建属性而不是简单地访问公共变量,因为我喜欢控制分配的值(验证,额外行为等等)

    参考文献:

    <强> MonoBehaviour

    <强> DontDestroyOnLoad