2014-11-08 2 views
-1

В настоящее время я делаю свою первую игру, используя Unity3D, написанную на C#. То, что я сейчас делаю, - это та часть, в которой игрок может получить различную атаку случайно. например. если это критический шанс установлен на 20%, то он наносит критический урон.Различные случайные числа в то же время (Unity C#)

Моя проблема заключается в том, что генератор случайных чисел производит одинаковый выход, например. когда он наносит критический урон, он также наносят урон оглушению, когда выполняются требования. То, что я хочу, есть другое случайное значение для критического, оглушения и т. Д. Я прочитал, что могу использовать Random.Next, но он не работает в Unity3D, хотя это и C#. Это то, что я сделал

private float _criticalChance; 
private float _stunChance; 

     // Use this for initialization 
     void Start() { 
      _criticalChance = Random.Range (0f, 1f); 
      _stunChance = Random.Range (0f, 1f); 
     } 

Потом я вижу в его debug.log, что он выдает такое же значение.

+0

Быстрый вопрос .. вы посмотрели [Документацию Unity] (http://docs.unity3d.com/ScriptReference/Random.Range.html) ..? – MethodMan

+0

Я прочел это, и именно там я и познакомился с Random.Range, чтобы делать случайные числа. –

+0

@DJKRAZE Ссылка на документацию действительно полезна, но ничего не объясняет ... Было бы очень удивительно, если бы кто-нибудь, кто создал эту функцию, не читал http://stackoverflow.com/questions/767999/random-number-generator-only- генерирование-одно-случайное число/768001 # 768001 (также возможно). –

ответ

0

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

private float chance; 
private int choice; 

void Start() { 
    chance = Random.Range(0f, 1f); 
    choice = Random.Range(0, 2); 
} 

void Update() { 
    chance = Random.Range(0f, 1f); 
    choice = Random.Range(0, 2); 
} 

public void getHit(int damage) { 
    if(chance <= fighter.attribute.criticalChance && chance <= fighter.attribute.stunChance) { 
     if(choice == 0) { 
      attribute.maxHealth -= damage + (int)(damage * fighter.attribute.criticalDamage); 
     } else { 
      getStun(fighter.attribute.stunTime); 
      attribute.maxHealth -= (int)damage; 
      fighter.attribute.resetStun(); 
      stunned = true; 
     } 
    } 
} 
0

вы делаете случайное значение только в начала так будет оставаться это значение до конца, вы должны поместить его в метод и назовите его, если вы хотите новое значение

+0

В соответствии с тем, что я изучаю, необходимо поставить его в начале для инициализации. У меня есть метод оглушения, крита и т. Д., И я замечаю, что все они получают одинаковое случайное значение. –

+0

вы имеете в виду при запуске _criticalChance = _stunChance –

+0

Я имею в виду, когда мой игрок имеет 0.2f критический && 0.1f оглушение, если сгенерированное случайное значение равно 0.05, оно сделает критический и оглушает врага, потому что их случайные значения одинаковы. –

0

It похоже, вы хотите обновить значение в разных точках игры. Поэтому вам необходимо выполнить функции, которые вы можете вызвать.

public float criticalChanceGenerator() 
{ 
     return Random.Range (0f, 1f); 
} 

public float stunChanceGenerator() 
{ 
    return Random.Range (0f, 1f); 
} 

Тогда, когда нападение происходит, просто вызывайте эти функции.

public void attack() 
{ 
    float stunChance = stunChanceGenerator(); 
    float criticalChance = criticalChanceGenerator(); 
} 
Смежные вопросы