Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在加载了additive C#的第二个场景上通过按钮点击功能在一个场景上设置GameObject活动

如何在加载了additive C#的第二个场景上通过按钮点击功能在一个场景上设置GameObject活动
EN

Stack Overflow用户
提问于 2020-06-11 19:31:21
回答 1查看 407关注 0票数 1

我是编程和Unity的新手,我正在开发一个简单的点击风格的游戏来学习两者的基础知识。我已经创建了几个场景: MainMenu,UI,1级和2级。在按下主菜单中的“开始”后,我正在加载UI和第一级。

在UI层,我有一个商店UI和其他我永远不想卸载的部分。在第一层和第二层,我有一些我只想在这些场景中使用的东西。

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

我尝试做的是在一个脚本中调用一个函数,这个脚本附加在第一级的GameObject中,这个脚本附加在UI场景中的一个购买按钮上,但是从我能够理解的是,如果游戏对象是在UI场景中分配的,它将被设置为活动的-所以整个事情基本上没有意义,我可以更容易地做到这一点。

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

代码语言:javascript
运行
AI代码解释
复制
public class Work_Button : MonoBehaviour
{
    public GameObject hubert12;

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

}

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

代码语言:javascript
运行
AI代码解释
复制
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();           
        }

    }

}

如果你对我吐出的场景或其他任何东西有任何评论,他们将非常受欢迎!

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 03:35:05

有一点你需要注意,那就是你不能在一个场景中引用另一个场景中的对象。你可以引用相同的Prefab,但这是一个稍微不同的问题。

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

代码语言:javascript
运行
AI代码解释
复制
public class Work_Button : MonoBehaviour
{
    public GameObject hubert12;

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

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

然后,您可以拥有一个具有实例和静态组件的Shop管理器。

代码语言:javascript
运行
AI代码解释
复制
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将进行检查,以确保注册了一个按钮。

这只是实现这一目标的众多方法中的一种。它也是最基本的基本实现。但到目前为止,我喜欢这种方法。对此进行扩展,您可以将注册项存储在一个字典集合中,并且可以在按钮被销毁(即OnDestroy )时执行一些清理/注销操作。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62332121

复制
相关文章
为什么我在 Linux 上使用 exa 而不是 ls?
我们生活在一个繁忙的世界里,当我们需要查找文件和数据时,使用 ls 命令可以节省时间和精力。但如果不经过大量调整,默认的 ls 输出并不十分舒心。当有一个 exa 替代方案时,为什么要花时间眯着眼睛看黑白文字呢?
用户1880875
2021/09/06
2K0
为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
作者:Yujiaao 来源:segmentfault.com/a/1190000019962661
Java技术栈
2020/06/16
1.5K0
如何使用 Vue 命名插槽创建多个模板插槽?
这是最基本的示例,如果我们不提供父级的任何slot 内容,则我们将<slot>放在其中的任何内容都会作为后备内容。
前端小智@大迁世界
2022/06/15
2.8K0
如何使用 Vue 命名插槽创建多个模板插槽?
为什么 useState 返回的是 array 而不是 object?
这里可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?我们在自定义 hook 时应该返回什么类型呢?
小鑫
2022/04/26
2.3K0
为什么 build 方法放在 State 中而不是在 StatefulWidget 中
为什么 build 方法放在 State 中而不是在 StatefulWidget 中呢?其中前2点是源代码的注释中给出的原因,最后一点是我的一点个人理解。
老孟Flutter
2021/01/28
9470
如何优雅的在SpringBoot中编写选择分支,而不是大量if else?
部门编号通常由公司或组织的管理人员根据实际情况进行规划和安排,各个部门的编号应当具有独立性、唯一性和易于记忆等特点,以方便在日常管理活动中使用。
Designer 小郑
2023/08/01
2750
如何优雅的在SpringBoot中编写选择分支,而不是大量if else?
和智能机器一起工作,而不是惧怕它们
如果我们想利用科技,就必须直面恐惧。 ——加里·卡斯帕罗夫 卡斯帕罗夫 生于1963年 前苏联、俄罗斯国际象棋棋手 22岁成为世界上最年轻的国际象棋冠军 接下来的职业生涯里 他获得了一连串冠军头衔 直到2005年退役 但是 幸运也是不幸 让他真正“家喻户晓”的 是历史课本里 1997年5月11日 他作为人类的代表 与IBM计算机“深蓝”的一次对弈 那一次 人类输了 此后的20年 人类好像一直在输 到了2017年 IBM已经有了能赢取智力竞赛节目的Watson 而距离谷歌用AlphaGo震惊世界 也已
企鹅号小编
2018/01/16
7300
和智能机器一起工作,而不是惧怕它们
「译文」常见的SLO陷阱以及如何避免它们
如今,在线服务需要接近 100% 的正常运行时间。这种需求使 DevOps 团队越来越需要维护关键业务应用程序的性能和可靠性。构建服务水平目标 (SLO)以及服务水平协议和服务水平指标,是团队评估和衡量错误预算范围内的软件性能的好方法。但是存在SLO陷阱。因此,在创建SLO时,避免这些常见错误非常重要,这些错误可能会给您的DevOps团队带来更多麻烦。
东风微鸣
2022/12/01
6730
在应用开发中,我为什么选择 Flutter 而不是 React Native ?
作为一位开发人员,我想在本文中与大家聊聊跨平台开发领域的两大核心选项——Flutter 与 React Native 框架,并介绍我自己为什么更偏爱 Flutter。
逆锋起笔
2021/01/28
3.4K0
vue2.0 插槽不是响应性的
项目中自定了组件 widget,作为容器,其中 header 部分做了预置插槽 slot,用于信息的展示;在实际使用过程中,header 内容需要根据不同条件展示不同信息。至此,问题出现了~~~
奋飛
2023/01/13
8140
vue2.0 插槽不是响应性的
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
链表和数组相比,数组可以通过下标快速定位,或者通过二分查找,查询复杂度为O(logn),而链表只能按照顺序挨个查找,复杂度为O(n)。
大忽悠爱学习
2023/03/23
2.4K0
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
如何丝滑的在React中使用插槽
每个组件交互逻辑是一样的,但是由于用途不一样,每个组件的样式和内容区别较大,比如普通弹窗只需要放置一个关闭按钮,但是用于选择时间的弹窗除了需要确定和关闭按钮,还需要清空按钮。
Jou
2023/05/31
2.3K0
如何丝滑的在React中使用插槽
创建型-Prototype
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式,简称原型模式。
acc8226
2022/05/17
3100
为什么我们的机器学习平台支持Python,而不是R
有很多文章比较了Python和R在数据科学方面的相对优点。但是这并不在这篇文章的讨论范围。这篇文章是关于数据分析师和机器学习工程师的分歧,以及他们对编程语言的不同需求。
HuangWeiAI
2020/03/18
6980
为什么我们的机器学习平台支持Python,而不是R
为什么建议你用nullptr而不是NULL?
在C语言中,我们常常用NULL作为指针变量的初始值,而在C++中,却不建议你这么做。
编程珠玑
2019/08/28
9.6K0
为什么建议使用你 LocalDateTime ,而不是 Date?
多线程并发如何保证线程安全 - 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat对象 => 创建和销毁对象的开销大 - 对使用format和parse方法的地方进行加锁 => 线程阻塞性能差 - 使用ThreadLocal保证每个线程最多只创建一次SimpleDateFormat对象 => 较好的方法
芋道源码
2019/10/23
1.6K0
为什么使用OPA而不是原生的Pod安全策略?
https://www.magalix.com/blog/enforce-pod-security-policies-in-kubernetes-using-opa
CNCF
2020/09/04
1.2K0
为什么特征工程要用 SQL 而不是 Python
我们常说机器学习是一门实验科学。所以相比较传统工程而言,机器学习分成两个大的阶段:
用户2936994
2022/05/18
8350
为什么特征工程要用 SQL 而不是 Python
JDBC为什么要使用PreparedStatement而不是Statement
前言 这篇博客不是我写的,是由刘志军大大翻译的,真心觉得很棒,而且是必学要掌握的东西,所以就转载过来了,我个人的第一篇转载文章。 开始 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时Prepar
roobtyan
2018/06/04
1.4K0
JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。下面是一个例子:
哲洛不闹
2018/09/19
9580
JDBC为什么要使用PreparedStatement而不是Statement

相似问题

haskell如何管理递归函数调用的内存?

13

Haskell递归和内存使用

31

Haskell向构造函数添加约束

12

在模板Haskell中定义递归函数

18

Haskell:递归定义函数值的有效计算

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文