c# - 如何在一个场景上设置一个活动的游戏对象,形成第二个场景上的按钮单击功能,该功能加载了添加剂 C#,Unity
问题描述
我是编码和 Unity 的新手,我正在开发一个简单的点击式游戏来学习两者的基础知识。我创建了几个场景:MainMenu、UI、1st level 和 2nd level。在主菜单中按“开始”后,我正在加载 UI 和第一级。
在 UI 层,我有一个商店 UI 和其他我不想卸载的部分。在第 1 层和第 2 层,我有一些我只想在那些场景中拥有的部分。
所以,我想做的是当我购买物品或升级第一级时,我希望将游戏对象(精灵)设置为活动状态。
我试图做的是在一个脚本中调用一个函数,该脚本从附加到 UI 场景中的购买按钮的脚本中附加到第一级的 GameObject,但是从我能够理解的弄乱它将设置如果在 UI 场景中分配了该游戏对象,则该游戏对象处于活动状态 - 所以整个事情基本上没有意义,我可以更轻松地做到这一点。
附加到第一级场景中游戏对象的脚本中的代码
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();
}
}
}
如果您对我如何吐槽或其他任何事情有任何评论,他们将非常受欢迎!
谢谢!
解决方案
您需要注意一些事情,那就是您不能在一个场景中引用一个对象,在另一个场景中。你可以引用相同的 Prefab,但这是一个稍微不同的问题。
我发现有效的一种方法是做这样的事情:
public class Work_Button : MonoBehaviour
{
public GameObject hubert12;
public void Awake ( )
{
Shop.Register ( this );
}
public void Huberd ( )
{
hubert12.SetActive ( true );
}
}
然后,您可以拥有一个具有实例和静态组件的 Shop manager。
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)。
推荐阅读
- r - 在 R 中可视化具有 3 个变量的线性规划
- instagram - 为什么无法访问 instagram 最近的媒体?
- javascript - 检查对象数组中嵌套对象属性值的唯一性
- python - 为什么输入输入后我的循环结束?
- python - 根据第 1 列条件在第 2 列中第一次出现 1
- python - 具有多个要求的字符串的正则表达式
- sql - 用于比较字段中某些值的计数的 SQL 查询
- javascript - 如何仅使用 JS 将 1% 添加到循环内的 div 宽度?
- javascript - 假对讲小部件 - 如何通过单击其他按钮来运行它
- android - TextFormField 验证器参数类型“动态函数()”不能分配给