同时输出不同的随机数(Unity C#)

时间:2014-11-08 19:42:43

标签: c# random unity3d

我目前正在使用C#编写的Unity3D开始我的第一场比赛。我现在正在做的是玩家可以偶然获得不同攻击的部分。例如。如果它的关键几率设定为20%,那么它将造成严重的伤害。

我的问题是它的随机数生成器正在为例如输出相同的输出。当它造成严重伤害时,它也会在满足要求时造成眩晕伤害。我想要的是,对于关键,眩晕等有不同的随机值。我已经读过我可以使用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中看到它输出相同的值。

3 个答案:

答案 0 :(得分:0)

您只在开始中制作随机值,因此保持,直到最后您必须将其放入方法中并在需要新值时调用它

答案 1 :(得分:0)

似乎您想要更新游戏中不同点的值。因此,您需要创建可以调用的函数。

 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();
}

答案 2 :(得分: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;
        }
    }
}