2017-01-09 3 views
3

Я использую Unity. Я хочу изменить изображение случайным образом, возможно, нажав кнопку или вызвать событие.Unity случайно изменить изображение

Я могу придумать решение, как это:

public Image randomImage; 
    public Sprite s0; 
    public Sprite s1; 
    public Sprite s2; 
    public Sprite s3; 
    public Sprite[] images; 
    void Start(){ 
     images = new Sprite[4]; 
     images [0] = s0; 
     images [1] = s1; 
     images [2] = s2; 
     images [3] = s3; 
    } 
    void changeImage(){ 
     Random rnd = new Random(); 
     int num = rnd.Next(0, 4); 
     randomImage <Image>().sprite = images[num]; 
     } 

Затем я могу перетащить спрайт, что я хочу изменить в randomImage и перетащите четыре изображения в s0, s1, s2, s3. Однако количество изображений, которые я хочу выбрать, намного больше, чем 4, может быть, 20. Я не знаю, есть ли более разумный способ сделать это, вместо того, чтобы создавать 20 переменных и перетаскивать в него 20 изображений. Спасибо.

+1

Объявление 's0',' s1', '' s2' и s3' не нужно здесь, так как 'images' массив будет сериализовать, что позволяет перетащить и падение непосредственно ваши спрайтов в инспекторе. – Hellium

+0

Спасибо! Я не знал об этом. @Hellium – kukunut0

ответ

4

Вам необходимо использовать UnityEngine.Random.Range. Вот и все. Вам не нужно создавать новый экземпляр.

Поскольку массив начинается с 0, перейдите 0 к первому параметру и длину массива ко второму параметру. Второй параметр является исключительным, поэтому вы не получите исключение вне диапазона.

Не нужно randomImage <Image>(), потому что randomImage уже есть изображение (public Image randomImage;). Вы должны сделать это, если randomImage - GameObject или любой другой тип.

public Image randomImage; 
public Sprite s0; 
public Sprite s1; 
public Sprite s2; 
public Sprite s3; 
public Sprite[] images; 

void Start() 
{ 
    images = new Sprite[4]; 
    images[0] = s0; 
    images[1] = s1; 
    images[2] = s2; 
    images[3] = s3; 
} 

void changeImage() 
{ 
    int num = UnityEngine.Random.Range(0, images.Length); 
    randomImage.sprite = images[num]; 
} 
+0

Спасибо! Я буду использовать эту случайную функцию. И я думаю, что мне не нужно объявлять s0, s1 ... тоже, согласно комментарию Hellium. – kukunut0

+0

Да, вам это не нужно, поскольку все они являются «типом спрайтов». Просто удалите все внутри функции «Пуск», а затем перетащите их в массив изображений (спрайт) в редакторе. Единственный раз, когда вам может понадобиться метод, который у вас есть сейчас, - это когда вы хотите динамически задавать количество спрайтов из кода, тогда вы не должны использовать редактор. – Programmer

Смежные вопросы