【问题标题】:How to use one object selected from previous scene to the current scene?如何使用从前一个场景中选择的一个对象到当前场景?
【发布时间】:2014-04-03 12:12:22
【问题描述】:

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

【问题讨论】:

    标签: unity3d scene


    【解决方案1】:

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

    实现一个从MonoBehaviour 派生的单例,以保存用户在菜单之间的选择,并且在加载新关卡时不会被销毁。

    单例示例

    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. 创建一个空的游戏对象
    2. 将此脚本附加到其中,然后将其保存为预制件
    3. 在每个需要它的场景中也可以拖动它

    现在您可以轻松保存和读取场景之间的用户选择:

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

    顺便说一句,我通常创建属性而不是简单地访问公共变量,因为我喜欢控制分配的值(验证、额外行为等...)

    参考资料:

    MonoBehaviour

    DontDestroyOnLoad

    【讨论】:

      【解决方案2】:

      您可以将用户选择的游戏对象设置为不被自动销毁。看看DontDestroyOnLoad

      这样他们在改变场景时会得到保留。

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

      【讨论】:

        猜你喜欢
        • 2016-05-29
        • 2012-11-09
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多