Проблема в том, что сделать вещи действительно случайными - довольно сложная задача для компьютера. Существует много литературы о генерации случайных и псевдослучайных значений, и я не эксперт в этом вопросе, но основная идея состоит в том, чтобы принимать происходящее и постоянно меняющееся значение в вашей системе (например, время ) и измените его, чтобы получить «случайное» значение.
Когда вы не получите значения, которые соответствуют вашей цели (в вашем случае событие происходит слишком часто), попробуйте использовать другой (равно более сложный) алгоритм.
Редактировать: проверить вашу функцию изолированно, окружив ее какой-нибудь тестовой функцией, подобной этой:
using UnityEngine;
public class RandomTest : MonoBehaviour
{
private const int TestRuns = 1000000;
private const int Probability = 1;
// Use this for initialization
void Start ()
{
int hits = 0;
for (int i = 0; i < TestRuns; i++)
{
int randomValue = Random.Range(0, 100);
if (randomValue < Probability)
{
hits++;
}
}
float probability = (float) hits / TestRuns * 100;
Debug.Log("Outcome: " + probability.ToString("f4") + " %");
}
}
Для меня значения довольно близки к ожидаемым и должны (не рассчитывать) лежать в пределах стандартного распределения:
Outcome: 0.9984 %