【问题标题】:Change image in UI depending on the value of the slider根据滑块的值更改 UI 中的图像
【发布时间】:2021-06-15 21:52:35
【问题描述】:

当滑块的值改变时,我试图在 UI 中改变图像,现在当我移动滑块时什么都没有发生,这是我的代码:

public class ImagesSlider : MonoBehaviour
{
// Start is called before the first frame update

public Sprite sprite1;
public Sprite sprite2;
public Sprite sprite3;
public Sprite sprite4;
public Sprite sprite5;
public Sprite sprite6;
public Sprite sprite7;
public Sprite sprite8;
public Sprite sprite9;
public Sprite sprite10;
public Sprite sprite11;

public Slider imageslider;


void Start()
{
    gameObject.GetComponent<Image>();
}

void Update()
{
    ChangeImage();
}

// Update is called once per frame
void ChangeImage()
{
    if (imageslider.value == 1.0f)
    {
        gameObject.GetComponent<Image>().sprite = sprite1;
    }

    if (imageslider.value == 2.0f)
    {
        gameObject.GetComponent<Image>().sprite = sprite2;
    }
}

非常感谢您的帮助

【问题讨论】:

    标签: c# visual-studio unity3d user-interface


    【解决方案1】:

    如果您的滑块的最大值为 1,您必须检查 0-1 之间的值,因为它是浮动的,您需要大于或小于您的条件。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class MySlider : MonoBehaviour
    {
        // Start is called before the first frame update
    
        public Sprite sprite1;
        public Sprite sprite2;
        public Sprite sprite3;
        public Sprite sprite4;
        public Sprite sprite5;
        public Sprite sprite6;
        public Sprite sprite7;
        public Sprite sprite8;
        public Sprite sprite9;
        public Sprite sprite10;
        public Sprite sprite11;
    
        public Slider imageslider;
        public Image img;
    
    
        void Start()
        {
            img = gameObject.GetComponent<Image>();
        }
    
        void Update()
        {
            ChangeImage();
        }
    
        // Update is called once per frame
        void ChangeImage()
        {
            if (imageslider.value <= .1f)
            {
                img.sprite = sprite1;
            }
    
            if (imageslider.value <= .2f && imageslider.value >= .1f)
            {
                img.sprite = sprite2;
            }
        }
    }
    

    【讨论】:

    • 我将滑块更改为 11,因为有 11 个图像,我希望顶部每个值都有一个图像,当您上下移动时,它会更改图像
    • 那么您必须将滑块的Slider.maxValue 更改为11,并将Slider.wholeNumbers 启用为true。
    • 请注意,即使 Slider.wholeNumbers 设置为 true,它仍然是 float,因此您应该使用 if(Mathf.Approximately(imageslider.value, 1f)){ ... }
    • 我已经将该滑块更改为 11 和整数
    • 当我尝试该代码时没有任何反应@ArtZolinaIII
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2017-08-30
    • 2021-11-05
    相关资源
    最近更新 更多