Unity - 如何从不同的场景中获取GameObjects?

时间:2017-07-24 14:38:34

标签: unity3d gameobject

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

2 个答案:

答案 0 :(得分:0)

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

可以有多种选择。在你的情况下,最简单的是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);
}

这是一个非常简单的例子,你必须适应你的需要。但是没有你的代码,我无法帮助你。

答案 1 :(得分:0)

您可以尝试使用PlayerPrefs。至少我尝试过并且有效。

首先,您应该在层次结构中以玩家身份创建一个空的GameObject。然后将您所有的玩家模型作为该GameObject的子对象,并禁用所有它们。

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

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

PlayerPrefs.SetFloat("Character", 1);

这就是它们的调用方式(此处的0为默认值,在获取PlayerPref时始终将其设置为0,它控制是否设置它。如果没有,则将其简单地设置为0 );

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

然后,您可以在脚本的启动功能中使用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;
...
...

只需将所有模型放入检查器窗口中的数组中,它就可以正常工作。另外,您应该在脚本的“开始”功能中添加if或switch语句。