我目前正在使用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中看到它输出相同的值。
答案 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;
}
}
}