Unity3d(редактор): открытие нескольких файлов с помощью EditorUtility.OpenFilePanel()

Я смотрел этот урок и закончил его, теперь я хочу его расширить.

Я хочу открыть несколько изображений, используя FileExplorer в единстве, а затем иметь возможность показывать изображения на основе значения ползунка, как показано на этом изображении:

https://stackru.com/images/23abe4cebe1727ba9e a2f1bf7a100971608b77d1.png

Любая помощь приветствуется.

1 ответ

Решение

Это не отвечает на вопрос, но то, что вы спросили в комментариях

Можете ли вы дать мне небольшой код для "просто создать список и иметь открытые изображения в нем, когда значение ползунка меняется, просто установите спрайт необработанного изображения на спрайт изображения в списке, используя int для получения изображение из списка."?

[RequireComponent(typeof(RawImage))]
public class ImageSwitcher : MonoBehaviour
{
    private RawImage image;

    public Slider SliderComponent;

    // Get the textures somehow
    public List<Texture>() textures = new List<Texture>();

    private void Awake()
    {
        image = GetComponent<RawImage>();

        if(!SliderComponent)
        {
            Debug.LogError("No SliderComponent referenced!", this);
            return;
        }

        // Make the slider accept only whole numbers
        SliderComponent.wholeNumbers = true;

        SliderComponent.value = 0;

        SliderComponent.minValue = 0;

        // Index is 0 based so can maximal be list count -1
        SliderComponent.maxValue = textures.Count - 1;

        // Register a listener for onValueChanged
        // Remove the listener first to avoid multiple listeners added
        SliderComponent.onValueChanged.RemoveListener(OnSliderChanged);
        SliderComponent.onValueChanged.AddListener(OnSliderChanged);
    }

    private void OnDestroy ()
    {
        // Allways clean up listeners when not needed anymore
        SliderComponent.onValueChanged.RemoveListener(OnSliderChanged);
    }

    // Use this to change the Texture list
    // and Max value of the slider afterwards
    public void UpdateSlider(List<Texture> textures)
    {
        // Update the texture list
        this.textures = textures;

        // Update the max value of the slider
        SliderComponent.maxValue = textures.Count - 1;

        // Unity might automatically clamp the slider value
        // after the maxValue was changed
        // But just to be sure we can do it as well
        SliderComponent.value = Mathf.Clamp(SliderComponent.value, 0, textures.Count - 1);
    }


    // Called when the slider value is changed
    private void OnSliderChanged()
    {
        // Get the value as int
        int index = (int)SliderComponent.value;

        if(index < 0 || index > textures.Count - 1)
        {
            // Should actually be impossible but just in case log it
            Debug.Log("Slider produced impossible index: " + index, this);
            return;
        }

        // Get according texture from list
        var texture = textures[index];

        // Set texture
        image.texture = texture;
    }
}

Однако это не полностью решит ваш вопрос

Unity3d(редактор): открытие нескольких файлов с помощью EditorUtility.OpenFilePanel()

как уже упоминалось в этой теме, это невозможно, так как EditorUtility.OpenFilePanel возвращает только один единственный путь к файлу как string,

Так что короткий ответ будет: это (в настоящее время) невозможно.

Существует открытый голос за добавление этой функции для нескольких выборов, так что вы можете проголосовать там.

Одной из моих идей будет попытка выбрать путь к папке и загрузить все текстуры из этой папки, но это только обходной путь, а не то, что вы запрашивали.

Но я надеюсь, что остальное поможет вам немного:)

Другие вопросы по тегам