【问题标题】:Change an image of ImageButton permenantly when do something做某事时永久更改 ImageButton 的图像
【发布时间】:2016-06-22 11:26:08
【问题描述】:

如上所述,我想在执行某些事件(单击或几秒钟后)时更改 ImageButton 的图像。

void OnclkMe(GameObject go)
{
    go.GetComponentInChildren<UISprite>().spriteName = "NumCard_01";
}

当我单击按钮时,它看起来运行良好,但是当鼠标点移出按钮时,更改后的图像被重新更改为第一张图像。

我使用 Debug.Log func 测试了 spriteName,并检查了 sprite 是否自动重新更改。

当某些事件永久发生时,如何更改 ImageButton 的图像?

【问题讨论】:

  • 确保NumCard_01存在于atlast中。此外,它区分大小写。如果这是一个新项目,则不应使用 NGUI。您需要使用新的 Unity UI。例外情况是您的整个游戏已经使用 NGUI 制作。
  • NumCard_01 存在于图集中。我使用 NGUI 是因为我想缩短开发时间……但是……这又会困扰我吗?我的项目还处于初始阶段..
  • 看起来像。如果很多人采用 Unity 的 uGUI,它可以随时停止。我曾经使用Daikon Forge。太棒了,但我在 Unity 发布后立即切换到了 UI。几个月后,Daikon Forge 停产,不再更新。事实是,如果人们停止购买它,出版商将没有时间和资源继续更新它。

标签: c# image unity3d imagebutton


【解决方案1】:

对于新项目,您应该使用 Unity 的新 UI 系统 uGUI。

您可以使用Button.onClick.AddListener(() =&gt; callbackFunction()) 注册按钮事件,并且可以使用Button.image.sprite = newSprite; 更改按钮图像中的精灵。您需要在脚本顶部包含 using UnityEngine.UI;

public Button button1;
public Button button2;

public Sprite newSprite;

void OnEnable()
{
    //Register Button Events
    button1.onClick.AddListener(() => buttonCallBack(button1));
    button2.onClick.AddListener(() => buttonCallBack(button2));
}

private void buttonCallBack(Button buttonPressed)
{
    if (buttonPressed == button1)
    {
        //Your code for button 1
        buttonPressed.image.sprite = newSprite;
    }

    if (buttonPressed == button2)
    {
        //Your code for button 2
    }
}

void OnDisable()
{
    //Un-Register Button Events
    button1.onClick.RemoveAllListeners();
    button2.onClick.RemoveAllListeners();
}

【讨论】:

  • 执行 AddListener 匿名函数的性能与事件相同吗?
  • @P0lT10n 最好在 Unity 中随时使用事件,因为它的性能更好。 AddListener 使使用按钮更容易制作事件。使用 AddListener 不会造成性能损失,因为您不会每秒点击 200 万次按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多