【问题标题】:Unity Buttons On clickUnity 按钮点击
【发布时间】:2017-12-10 23:16:48
【问题描述】:

嗨,所以我在预制件中有 4 个按钮我有一个加号按钮 a - 我已设置的按钮,因此当您单击 + 按钮时,它应该编辑其他按钮中的 2 个按钮中的文本,例如 Sell 10 和 Buy 10,当您再次单击 + 时,它会显示 Buy 20 和 Sell 20 等。

这些按钮是通过在主预制件中添加一个 c# 脚本并使用 + 和 - 按钮的 on_click 功能来设置的。我遇到的问题是更改其他 2 个按钮的文本的最佳方法是什么。由于这个预制件将被动态创建以在商店页面中制作 100-200 倍的物品,我正在考虑在附加到预制件的脚本中创建 2 个游戏对象并将两个按钮拖到它们上,但我确信必须有更好的方法来添加按钮的文本组件。

任何帮助将不胜感激。

我添加了一些图片来澄清:

我正在寻找的是最佳实践,这样当点击 + 或 - 时,它会更新买入和卖出按钮,从 10 变为 100,反之亦然。这是一个预制件,将被克隆 200-300 次,因此要寻找性能最佳的方法。

【问题讨论】:

  • 我不确定我是否完全关注你;您是否对处理 UI 中的状态更改的良好做法有疑问,例如在某些事件中更改按钮中的文本?
  • 我上传了一些图片和一份声明来帮助澄清。

标签: c# unity3d button


【解决方案1】:

以下是我通常以简洁的方式将 UI 映射到变量的方式。如果您有任何问题,请告诉我,如果您希望它进一步适合您的解决方案,您必须向我展示您的一些代码以及它现在是如何工作的。这是我通常使用的通用概念:

public class YourClass : MonoBehaviour 
{
    private Text sellButtonText;

    private int _sellAmount;
    public int SellAmount
    {
      get
      {
        return _sellAmount;
      }
      set 
      {
        _sellAmount = value;
        _sellButtonText = "Sell " + _sellAmount;
      }
    }


    void Start() 
    {
      _sellButtonText = GameObject.Find("The Object with Sell button").GetComponent<Text>();
    }
}

您将变量 SellAmount 公开,更改该变量的任何人也将使用自定义 getter 和 setter 更改 UI 中显示的内容。

如果您不熟悉这种架构,以及为什么我们还需要私有 _sellAmount,这是为了避免无限循环。 get 和 set 方法需要将它们的数据存储在另一个变量中,因为如果 get 方法返回相同的变量,它将再次输入相同的 get 方法……一次又一次……一次又一次。与 set 相同,它会设置相同的变量,进入相同的 set-method,设置相同的变量,进入相同的 set-method。要解决此问题,请将其存储在另一个私有成员中。

【讨论】:

    【解决方案2】:

    我找到了解决方案,我忘了使用 unityengine.ui 添加然后我可以创建一个公共文本并将按钮的文本拖到它上面。

    【讨论】:

      猜你喜欢
      • 2016-12-25
      • 2018-07-29
      • 2018-05-17
      • 2016-11-28
      • 1970-01-01
      • 2020-06-24
      • 2011-07-08
      • 2015-02-22
      • 2019-09-28
      相关资源
      最近更新 更多