C# 使用百分比触发Unity中的事件

C# 使用百分比触发Unity中的事件,c#,unity3d,C#,Unity3d,我正在制作一个游戏,我想根据百分比触发一个事件。因此,根据我的英雄的行动,事件发生的几率会上升或下降。问题是,假设因为变量“ChanceofPawningKremlin”是75%,我不确定如何在函数中使用这75%来导致发生,我想选择一个随机数,如果这个数字在0到75之间,那么就导致发生,但是出于某种原因,我认为这不是最好的方法 float random = Random.value; if (random<chanceOfSpawningKremlin)//75% { spa

我正在制作一个游戏,我想根据百分比触发一个事件。因此,根据我的英雄的行动,事件发生的几率会上升或下降。问题是,假设因为变量“ChanceofPawningKremlin”是75%,我不确定如何在函数中使用这75%来导致发生,我想选择一个随机数,如果这个数字在0到75之间,那么就导致发生,但是出于某种原因,我认为这不是最好的方法

float random = Random.value;

 if (random<chanceOfSpawningKremlin)//75%
 {
    spawnBeast();
}
float random=random.value;

if(random执行此操作的经典方法是随机均匀地选择一个介于0和1之间的值,然后检查该值是否严格低于您的概率。因此,在您的情况下:

var random = new Random(seed);
var chanceOfSpawningKremlin = 0.75;

if(random.NextDouble() < chanceOfSpawningKremlin)
{
    SpawnBeast();
}
如果你的概率曾经是
1.0
,你需要从中找出一个特例,并将其视为总是成功的


请注意,在这两种情况下,您都使用概率作为介于
0.0
1.0
之间的值,而不是百分比。如果您希望将值保留为百分比,则在概率测试中使用时,将其除以
100.0

执行此操作的经典方法是选择一个介于0和1之间的值t random,然后检查该值是否严格低于您的概率。因此,在您的情况下:

var random = new Random(seed);
var chanceOfSpawningKremlin = 0.75;

if(random.NextDouble() < chanceOfSpawningKremlin)
{
    SpawnBeast();
}
如果你的概率曾经是
1.0
,你需要从中找出一个特例,并将其视为总是成功的


请注意,在这两种情况下,您都使用概率作为
0.0
1.0
之间的值,而不是百分比。如果您希望将值保留为百分比,则在概率测试中使用时,将其除以
100.0

使用恒定种子将导致每场游戏都有相同的繁殖行为,但仍然会有所不同在产卵间隔内产卵。+1如果需要完全随机性,请使用随机种子。@KYL3R您说的是random.Value()还不够随机吗?@Niana如果你想让游戏与上次不同,就需要随机种子。
DateTime。现在。勾号通常用作seed@Niana您可能应该继续使用Unity的
Random
库(我的第一段代码是针对.NET Framework类的),在这种情况下,您可以使用
Random.InitState(DateTime.Now.Ticks)
在游戏开始时。@Niana就像V0ldek在上面的评论中说的那样。请记住,最好使用unity类并尽可能避免.netframework类。使用常量种子将导致每场游戏都有相同的繁殖行为,但繁殖间隔仍然不同。+1如果需要完全的随机性,请使用random种子。@KYL3R你说的是随机。Value()还不够随机吗?@Niana如果你想让游戏与上次不同,就需要随机种子。
DateTime。现在。Ticks
通常用作seed@Niana您可能应该继续使用Unity的
Random
库(我的第一段代码是针对.NET Framework类的)在这种情况下,您可以在游戏开始时执行
Random.InitState(DateTime.Now.Ticks);
。@Niana就像V0ldek在上面的评论中所说的那样。请记住,最好使用unity类,尽可能避免使用.netframework类。