UNITY - 攻击命中组合代码错误。需要帮助

时间:2017-02-25 07:42:49

标签: c# unity3d

我的代码出了问题。当我按下指定的键码" Z"时,CurrentState不会更改为1并继续整个组合。我尝试放置一个debug.log,发现盒式对撞机在按下Z时激活,但数字不会增加1.任何人都可以帮帮我吗?这是代码。

公共级战斗机:MonoBehaviour {

public Collider[] attackhitboxes;
public Animator art;
public int CurrentState = 0;
bool activateTimertoreset = false;
public float currentcombotimer;
float origTimer = 50f;
private void Start()
{
    art = gameObject.GetComponent<Animator>();
    origTimer = currentcombotimer;
}
void Update()
{
    art.SetInteger("currentstate", CurrentState);
    NewComboSystem();
    ResetComboState(activateTimertoreset);

}

void ResetComboState(bool resettimer)
{
    if(resettimer)
    {
        currentcombotimer -= Time.deltaTime;

        if(currentcombotimer <= 0)
        {
            CurrentState = 0;
            activateTimertoreset = false;
            currentcombotimer = origTimer;
        }
    }
}
    private void LaunchAttack(Collider col)
{
    Collider[] cols = Physics.OverlapBox(col.bounds.center, col.bounds.extents, col.transform.rotation, LayerMask.GetMask("Hitbox"));
    foreach(Collider c in cols)
    {
        if(c.transform.parent.parent == transform)
        {
            continue;
        }
    }
}

void NewComboSystem()
{
    if (Input.GetKeyDown(KeyCode.Z))
    {
        activateTimertoreset = true;
        CurrentState++;
        if (CurrentState == 1)
        {
            LaunchAttack(attackhitboxes[0]); 
        }

        if (CurrentState == 2)
        {
            LaunchAttack(attackhitboxes[0]);
        }

        if (CurrentState >= 3)
        {
            LaunchAttack(attackhitboxes[0]);
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

尝试将你的if(input.keydown)放入更新功能并让它调用你的攻击。通过你拥有它的方式,我相信它会每秒多次调用你的攻击函数,因为更新会在每一帧都运行。还可以尝试调试currentstate的值。

编辑: 您是否在编辑器中为currentcombotimer分配了一个值,因为它是公开的?在脚本中它没有起始值。在start函数中,将其分配给origTimer。如果此值为零,那么您的组合时间为零。