我正在组织一场风险游戏。我有42个国家的精灵,我必须为每个国家生成随机颜色,例如 2个玩家21个绿色和21个红色。
如何随机生成颜色?
{
this.GetComponent<SpriteRenderer>().color = Color.green;
}
else
{
this.GetComponent<SpriteRenderer>().color = Color.red;
}
答案 0 :(得分:2)
这可以通过Unity的UnityEngine.Random.Range
功能轻松完成。
在 0 和 1 之间生成随机数。将 0 设为红色,将 1 设为绿色。
Color getRandomColor()
{
//0 = red
//1 = green
if (UnityEngine.Random.Range(0, 2) == 0)
return Color.red;
else
return Color.green;
}
<强>用法:强>
this.GetComponent<SpriteRenderer>().color = getRandomColor();
修改强>
我同样部署它们
我猜你的意思是平均生成随机数。 12红色和12绿色随机相同。
使用此课程:
public class EquallyColorGen
{
const int totalNumber = 24;
static bool[] randomNumbers = new bool[totalNumber];
static Color[] randomColor = new Color[totalNumber];
public static Color[] generateRandomNumbers()
{
const int halfOfTotalNumber = totalNumber / 2;
int firstRandom = UnityEngine.Random.Range(0, 2);
bool first12;
bool last12;
if (firstRandom == 0)
{
first12 = true;
last12 = false;
}
else
{
first12 = false;
last12 = true;
}
//Generate Even Random number. The first 12 are the-same. The last 12 are different but the-same
for (int i = 0; i < randomNumbers.Length; i++)
{
randomNumbers[i] = (i < halfOfTotalNumber) ? first12 : last12;
}
//Shuff Amount
const int shuffleAmount = 1;
for (int j = 0; j < shuffleAmount; j++)
{
for (int i = 0; i < halfOfTotalNumber; i++)
{
//0 = flip color
int randColor = UnityEngine.Random.Range(0, 2);
bool flip = false;
flip = (randColor == 0) ? true : false;
//Also flip the 1 to 12
randomNumbers[i] = (flip == true) ? !randomNumbers[i] : randomNumbers[i];
//Also flip the other side 12 t0 24
int lIndex = i + halfOfTotalNumber;
randomNumbers[lIndex] = (flip == true) ? !randomNumbers[lIndex] : randomNumbers[lIndex];
}
}
//Finally Make color from the list
for (int i = 0; i < randomNumbers.Length; i++)
{
//Red = false
//Green = true
randomColor[i] = (randomNumbers[i] == false) ? Color.red : Color.green;
}
return randomColor;
}
}
<强>用法强>:
Color[] randomPlayerColors = EquallyColorGen.generateRandomNumbers();
randomPlayerColors
变量中有 24 随机颜色,它们是相同生成的。如果您想要42种随机颜色,只需将const int totalNumber = 24;
更改为const int totalNumber = 42;
答案 1 :(得分:0)
好吧,我会采取不同的方法。
一个控制器对象(不是一个精灵,只是一个不可见的对象,它将在编辑器游戏逻辑接口中保存一些必要的脚本)应该有一个脚本,它将获取所有国家的GameObjects并在列表中随机地随机播放它们并在有多少球员(比如上半场球员1,第二球员......)
改组清单:
ion-infinite-scroll
在这结束时,你有一个空的 countryList 和完整的 shuffledCountryList 。您可以在foreach循环中执行任何划分:
List<CountryScript> countryList = new List<CountryScript>();
countryList.AddRange(GetComponents<CountryScript>());
List<CountryScript> shuffledCountryList = new List<CountryScript>();
while(countryList.Count > 0) {
CountryScript c = countryList[Random.Range(0, countryList.Count)];
shuffledCountryList.Add(c);
countryList.Remove(c);
}
CountryScript 应该有一个 public void SetPlayer(int Num){} 方法,该方法将通过 int Num 价值。您是否会将此列表存储在属性中的Controller脚本中,以便能够在编辑器中对其进行调整,或者在 CountryScript 中进行硬编码是您的选择。我是第一种方式,因为这样你就可以轻松添加更多玩家+编辑而无需编码。或者像程序员写道:
int playerCount = 2;
int maxNum = shuffledCountryList.Count / playerCount;
//It can be 2 or whatever you'll have it later
for(int i = 0; i < shuffledCountryList.Count; i++) {
shuffledCountryList[i].SetPlayer(i/maxNum);
}
希望这有助于你。