【问题标题】:Changing background of toggle button when pressed按下时更改切换按钮的背景
【发布时间】:2016-03-10 21:35:03
【问题描述】:

所以,我想在按下切换按钮时更改它的背景。我已经使用新的 UI 系统创建了按钮,并创建了一个具有更改背景功能的脚本。

在场景视图中,我可以看到切换按钮的目标图形正在按照我的意愿改变,但切换的背景仍然没有改变。

我附上了我在检查员身上看到的内容,希望你能告诉我我做错了什么。谢谢!

【问题讨论】:

  • 您已在 3 天内提出此问题超过 3 次。你想把它改成什么颜色?将切换按钮从白色更改为黑色?或者更改按钮的图像?为什么不提供您必须在问题中切换背景的代码。
  • 但是我一直在进步,我没有粘贴代码,因为它正在工作。在我发送的图像中,您可以看到切换状态更改时目标图形正在更改。
  • 我不想改变背景颜色,我想改变背景图像。请在检查器中查看目标图形
  • heh .. 您是否要更改 您的图像中最右侧面板 上标记为 SOURCE IMAGE 的内容
  • 我明白了。您希望更改背景图像,而这发生在编辑器视图中。你放的最后一张图,是干什么用的?我和乔一样困惑。

标签: c# unity3d


【解决方案1】:

所以看看你之前对同一个问题的解释:

https://stackoverflow.com/a/35921218/294884

public void ChangeBackground()
{
        if (theToggle.isOn) {   WRONG
            theToggle.image = Background1;}  WRONG
        else
        {  theToggle.image = Background2; }  WRONG
        }        
}

注意它改变了一些叫做“切换”的东西。

错了!

首先,创建一个名为“iWantToChangeTHIS”的变量...

public Image iWantToChangeTHIS;
public Sprite oneSprite;
public Sprite twoSprite;

public Toggle theToggle;

public void ChangeBackground()
  {
   if (theToggle.isOn)
     iWantToChangeTHIS.sprite = oneSprite;
   else
     iWantToChangeTHIS.sprite = twoSprite;
  }        
}

接下来,将您实际想要更改的内容拖到变量“iWantToChangeTHIS”中

像往常一样,将开关拖到“theToggle”,然后将两个精灵(从您的项目面板)拖到精灵项。

你已经完成了。

【讨论】:

  • 这看起来像他要找的东西,但他的问题有点混乱。
  • @JoeBlow 似乎我无法在 iWantToChangeTHIS 上调用图像,它说 UnityEngine.UI.image 没有定义
  • 我想我之前可以调用 image 参数,因为它是在 Toggle 上调用的,现在我在 Image 上调用它
  • 我想我现在不需要调用它,因为我已经在处理图像了
【解决方案2】:

只是想分享我为我们的项目制作的脚本;

您可以使用它来更改切换对象的目标图像(通常是背景) AND/OR,切换第二个类似复选标记的图形的可见性。

  • 新建一个脚本,
  • 将其命名为“ToggleImageSwap”(或根据您的脚本名称更改代码中的类),
  • 将此代码粘贴到脚本中,
  • 将其附加到您的切换开关上。
  • 选择你想要的。

    • 如果您想保持背景完好无损,您基本上可以复制切换开关的 CheckMark 子对象,并将其精灵更改为您想要在取消选中切换时显示的精灵。

我试图在变量 cmets 中解释更多。

这是代码;

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

[RequireComponent(typeof(Toggle))]
public class ToggleImageSwap : MonoBehaviour
{
    //First, we get the target Toggle Component. 
    //Even if you don't select the target Toggle component here, the script get the one one the same object.
    [SerializeField] private Toggle targetToggle;

    //This means that we want to actually "Swap" the target image which is set in Toggle component. 
    //By default, it is the "Background".
    //You may want to use this while "Checkmark" image set to "none" for traditional effect.
    [SerializeField] private bool swapTogglesTargetGraphic = true;
    [SerializeField] private Sprite swapSprite;

    //This means that we want to "Enable" a different image instead of "Checkmark" image when the toggle is unchecked.
    //You need to create a new image to use this, you can just duplicate Checkmark image and change it.
    [SerializeField] private bool enableUncheckedGraphic = false;
    [SerializeField] private Graphic uncheckedGraphic;


    void Start () {
        if (targetToggle == null)
            targetToggle = GetComponent<Toggle>();
        targetToggle.onValueChanged.AddListener(OnTargetToggleValueChanged);
        targetToggle.toggleTransition = Toggle.ToggleTransition.None;
        if (uncheckedGraphic != null)
            uncheckedGraphic.CrossFadeAlpha(targetToggle.isOn ? 0f : 1f, 0f, true);
    }

    void OnTargetToggleValueChanged(bool toggleValue) {
        if (swapTogglesTargetGraphic)
        {
            Image targetImage = targetToggle.targetGraphic as Image;
            if (targetImage != null) {
                if (toggleValue) 
                    targetImage.overrideSprite = swapSprite;
                else 
                    targetImage.overrideSprite = null;
            }
        }
        if (enableUncheckedGraphic)
        {
            uncheckedGraphic.CrossFadeAlpha(toggleValue ? 0f : 1f, 0f, true);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多