【问题标题】:Unity - How to get GameObjects from a different scene?Unity - 如何从不同的场景中获取游戏对象?
【发布时间】:2017-12-30 04:56:24
【问题描述】:

首先,我是初学者,所以请放轻松。我正在尝试从另一个场景激活和停用 GameObjects(游戏中的玩家)。基本上,当用户按下商店场景中的某个按钮时,我试图通过停用当前玩家模型并激活游戏场景中想要的玩家模型来更改游戏场景中的玩家,但我无法访问游戏对象(玩家在游戏场景)从商店场景中的游戏场景。有谁知道我该怎么办?

【问题讨论】:

    标签: unity3d gameobject


    【解决方案1】:

    您必须以持久的方式保存选择。

    可以有多个选项。在您的情况下,最简单的是PlayerPrefs

    假设您有一个用于在商店场景中选择游戏对象的脚本和一个用于在游戏场景中启​​用适当玩家的脚本。

    // Shop Scene
    public void SelectPlayer( GameObject gameobject )
    {
        PlayerPrefs.SetString( "selectedPlayer", gameObject.name ) ;
        PlayerPrefs.Save();
    }
    
    // ----------
    
    // GameScene
    public GameObject[] Players; // Drag & Drop the possible players
    
    private void Awake()
    {
        string selectedPlayer = PlayerPrefs.GetString( "selectedPlayer" ) ;
        for( int i = 0 ; i < Players.Length ; ++i )
            Players[i].SetActive( String.Equals(Players[i].name, selectedPlayer, StringComparison.Ordinal);
    }
    

    这是一个非常简单的例子,你必须适应你的需要。但是没有你的代码,我帮不了你更多。

    【讨论】:

      【解决方案2】:

      您可以尝试使用 PlayerPrefs。至少我试过了,它奏效了。

      首先,您应该在 Hierarchy 中创建一个空的 GameObject 作为玩家。然后让你的所有玩家模型成为该游戏对象的子对象并禁用它们。

      在您的商店场景中添加一个脚本,以在单击该按钮时更改某些 PlayerPrefs。

      这就是 PlayerPrefs 的初始化方式(1 是您可以将 2 用于第二个模型的值集,依此类推。);

      PlayerPrefs.SetFloat("Character", 1);
      

      这就是它们的调用方式(这里的 0 是默认值,当你得到一个 PlayerPref 时总是放 0,它控制你是否设置它。如果你不设置它,它只是将它设置为 0 .);

      GameObject character = PlayerPrefs.GetFloat("Character", 0);
      

      然后您可以在脚本的 Start 函数中使用 if 或 switch 语句来启用特定的播放器模型。 您也可以使用整数或字符串。

      我使用一个数组来存储我的模型并启用它们,因为它们是玩家 GameObject 的子级,但如果您愿意,可以尝试其他方式。

      最后这就是我所说的数组的使用方式;

      public GameObject[] Characters;
      private GameObject subCharacter;
      
      ...
      ...
      GameObject character = PlayerPrefs.GetFloat("Character", 0);
      
      switch (character)
              {
                  case 1:
                      subCharacter = Characters[0];
                      subCharacter.SetActive(true);
                      break;
      ...
      ...
      

      只需将所有模型放入检查器窗口中的数组中,它应该可以正常工作。此外,您应该在脚本的 Start 函数中添加 if 或 switch 语句。

      【讨论】:

        猜你喜欢
        • 2022-10-18
        • 1970-01-01
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多