Unity toggle sprite swap for on-off sprites

Unity default toggle component doesn’t have ability to just toggle two images for on/off state.
So here my simple component to do this. It is based on Unity.UI.Button.

using System;
using UnityEngine;
using UnityEngine.UI;

public class ToggleSpriteSwap: MonoBehaviour
    [SerializeField] private Image targetImage;

    [SerializeField] private Sprite onSprite;
    [SerializeField] private Sprite offSprite;
    [SerializeField] private bool isOn;

    public bool IsOn { get { return isOn; } set { isOn = value; UpdateValue(); }}
    public event Action<bool> onValueChanged;

    private Button button;

    // to set initial value and skip onValueChanged notification
    public void Initialize(bool value)
        isOn = value;

    // Use this for initialization
    void Start ()
        button = GetComponent<Button>();
        button.transition = Selectable.Transition.None;

    void OnClick()
        isOn = !isOn;

    private void UpdateValue(bool notifySubscribers = true)
        if(notifySubscribers && onValueChanged != null)

        if (targetImage == null)

        targetImage.sprite = isOn ? onSprite : offSprite;

Feel free to use it, credits will be nice, but not crucial for this simple peace of code.

Понравилась статья? Поделиться с друзьями:
Автор snezhok_13
Время от времени пишет статьи о разработке игр и проводит интервью с разработчиками. Сейчас работает engine-progremmer'ом в Larian Studios. Большой поклонник игр Naughty Dog.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *