Как выбрать цвет случайно из списка? - PullRequest
0 голосов
/ 13 октября 2019

Unity C # Я сделал список. Цвет меняется через 5 секунд. Я определил цвет, с которого начинается список ("_currentIndex = 0"). Первый цвет всегда должен быть тем, который я определил в начале. То, что у меня есть, означает, что каждый цвет в списке выбирается один за другим. После последнего цвета все возвращается к началу.

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ColorCycler : MonoBehaviour
{
 public Color[] Colors;
 public float Speed = 5;
 int _currentIndex;
 Camera _cam;
 bool _shouldChange = false;

 private int randomColors;

 void Start()
 {
     _cam = GetComponent<Camera>();

     _currentIndex = 0;
     SetColor(Colors[_currentIndex]);
 }


 public void SetColor(Color color)
 {
     _cam.backgroundColor = color;
 }

 public void Cycle()
 {
     _shouldChange = true;
 }

 void Update()
 {
     if (_shouldChange)
     {
         var startColor = _cam.backgroundColor;

         //start from color with number
         var endColor = Colors[0];
         if (_currentIndex + 1 < Colors.Length)
         {
             endColor = Colors[_currentIndex + 1];
         }

         var newColor = Color.Lerp(startColor, endColor, Time.deltaTime * Speed);
         SetColor(newColor);

         if (newColor == endColor)
         {
             _shouldChange = false;
             if (_currentIndex + 1 < Colors.Length)
             {
                 _currentIndex++;
             }
             else
             {
                 _currentIndex = 0;
             }
         }
     }
 }

}

1 Ответ

0 голосов
/ 13 октября 2019

Если вам нужен случайный элемент из списка, просто выберите случайный индекс.

Random random = new Random();
int randomIndex = random.Next(Colors.Count);
color = Colors[randomIndex];
...