如何从列表中随机选择一种颜色?

时间:2019-10-13 10:57:44

标签: unity3d background-color

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 :(得分:0)

如果您只想从列表中选择一个随机元素,则只需选择一个随机索引即可。

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