如何在一个场景上激活游戏对象,而在第二个场景上通过按钮单击功能加载了C#,Unity

问题描述 投票:1回答:1

我是编码和Unity的新手,我正在研究一个简单的点击式游戏,以了解两者的基础。我创建了几个场景:MainMenu,UI,第一级和第二级。在主菜单中按“开始”后,我正在加载UI和第一级。

在UI层中,我有商店UI和其他我永远不想卸载的位。在第一级和第二级,我只想拥有那些场景上的位。

所以,我想做的是当我购买物品或升级到第一级时,我希望将GameObject(精灵)设置为活动状态。

[我试图做的是在一个脚本中调用一个函数,该脚本在第一个级别中从附加到UI场景中购买按钮的脚本中附加到GameObject的第一个级别,但是从我弄清楚它的过程中我可以理解如果在UI场景中分配了该游戏对象,它将将该游戏对象设置为活动状态-因此整个操作基本上是毫无意义的,我可以轻松得多。

第一级场景中附加到GameObject的脚本中的代码

public class Work_Button : MonoBehaviour
{
    public GameObject hubert12;

    public void Huberd()
    {
        hubert12.SetActive(true);
    }

}

UI场景中附加到GameObject的脚本中的代码

public class Shop : MonoBehaviour
{
    public GameObject buyHubertOnebutton;
    public GameObject test;

    public void UnlockHubert1()
    {

        if (Global_Cash.CashCount >= 20)
        {
            Global_Cash.CashCount -= 20;
            buyHubertOnebutton.GetComponent<UnityEngine.UI.Button>().interactable = false;
            Work_Button sn = test.GetComponent<Work_Button>();
            sn.Huberd();           
        }

    }

}

如果您有任何评论,以及我如何吐出场景或其他任何东西,我们将不胜感激!

谢谢!

c# unity3d
1个回答
0
投票

您需要了解一些事情,那就是您不能引用另一个场景中的一个对象。您可以引用相同的Prefab,但这是一个稍微不同的问题。

我发现有效的一种方法是做这样的事情:

public class Work_Button : MonoBehaviour
{
    public GameObject hubert12;

    public void Awake ( )
    {
        Shop.Register ( this );
    }

    public void Huberd ( )
    {
        hubert12.SetActive ( true );
    }
}

然后您可以拥有一个包含实例和静态组件的商店经理。

public class Shop : MonoBehaviour
{
    // Static variables
    private static Work_Button _workButton;

    // Instance variables
    public GameObject buyHubertOnebutton;

    public static void Register ( Work_Button workButton )
    {
        _workButton = workButton;
    }

    public void UnlockHubert1 ( )
    {

        if ( Global_Cash.CashCount >= 20 )
        {
            Global_Cash.CashCount -= 20;
            buyHubertOnebutton.GetComponent<UnityEngine.UI.Button> ( ).interactable = false;
            if ( _workButton != null )
                _workButton.Huberd ( );
        }

    }
}

这是通过让您的按钮在商店中注册来完成的。并且因为我们在这里使用静态变量,所以我们不需要“查找” Shop对象。实例方法UnlockHubert1将检查以确保已注册按钮。

这仅是完成此操作的许多方法之一。它也是最基本的基本实现。但是到目前为止,我很喜欢这种方法。扩展这一点,您可以将注册的项目存储在Dictionary集合中,并且可以在按钮被破坏(即OnDestroy)时进行一些清理/注销。

这里的假设是场景中只有一个Work_Button,否则您将需要一种区分它们的方法(即,以am标识符为键的Dictionary(字典)。

© www.soinside.com 2019 - 2024. All rights reserved.