首页 > 解决方案 > 动画期间统一攻击一次

问题描述

由于我仍然是非常初学者的问题可能很愚蠢,但我真的找不到任何解决方案。我正在创建第三人称冒险游戏并尝试实施敌人攻击。问题是我无法以敌人在攻击动画期间只造成一次伤害的方式实现它。在我的代码中,已经攻击的 bool 仅在动画之间的转换发生时才变为 false。但是我想在每次攻击动画开始或结束时重置这个值。

void FixedUpdate()
{
    playerInSightRange = Physics.CheckSphere(transform.position, sightRange, playerMask);
    playerInAttackRange = Physics.CheckSphere(transform.position, attackRange, playerMask);

    if (!playerInSightRange && !playerInAttackRange) Patroling();
    if (playerInSightRange && !playerInAttackRange) Chasing();
    if (playerInSightRange && playerInAttackRange) Attacking();
}

private void Attacking()
{
    animator.SetInteger("Condition", 2);
    agent.SetDestination(player.position);

    if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.4f 
        && animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 0.6f 
        && alreadyAttacked == false)
    {
        player.GetComponent<Health>().healthValue -= damage / 100f;

        alreadyAttacked = true;
    } 

    if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f )
    {
        alreadyAttacked = false;
    }  
}

标签: c#unity3danimation

解决方案


您可能更想查看动画事件

无需查询状态,Animator您可以直接从动画状态本身调用某些事件!

只是宁愿做到

public void CauseDamage()
{
    if(player) player.GetComponent<Health>().healthValue -= damage / 100f;
}

然后在你的动画本身中添加一个事件

在此处输入图像描述

并选择要在事件检查器中调用的方法。

然后,每次您的动画通过该关键帧时,该事件将被调用一次。


推荐阅读