首页 > 解决方案 > 攻击动画不触发

问题描述

我在 Unity 中设置了一个名为 DoAttack 的参数。这应该会在按下空格键时触发攻击动画。(见下图)

https://i.imgur.com/q44dPtq.jpg">参数图片

每次我按下攻击动画时,我都会收到错误“参数'DoAttack'不存在Unityengine.Animator:SetTrigger(String)”

我为我的角色创建了多个脚本。在这些脚本中,我创建了一个空白,告诉角色在按下按钮时应该做什么。

在下面,您可以看到字符库控件。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterBaseControl : MonoBehaviour
{
    private CharacterMovementModel m_MovementModel;
    private CharacterInteractionModel m_InteractionModel;
    private CharacterMovementView m_MovementView;

    void Awake() //Awake is similar to start, but awake is called before start. Make sure everything is set up in awake so you can start it in start.
    {
        m_MovementModel = GetComponent<CharacterMovementModel>();
        m_MovementView = GetComponent<CharacterMovementView>();
        m_InteractionModel = GetComponent<CharacterInteractionModel>();
    }

    protected void SetDirection( Vector2 direction )
    {
        if( m_MovementModel == null )
        {
            return;
        }
        m_MovementModel.SetDirection( direction );
    }

    protected void OnActionPressed()
    {
        if( m_InteractionModel == null )
        {
            return;
        }

        m_InteractionModel.OnInteract();
    }

    protected void OnAttackPressed()
    {
        if( m_MovementModel == null )
        {
            return;
        }

        if (m_MovementModel.CanAttack() == false )
        {
            return;
        }

        m_MovementModel.DoAttack();
        m_MovementView.DoAttack();
    }
}

为了与此混合,我创建了一个公共布尔值,我在其中返回攻击状态。

public bool CanAttack()
{
    return true;
}

public void DoAttack()
{
    Debug.Log( "Attack" );
}

在运动视图的更新功能中(我可以在其中设置攻击的动画),我创建了一个动画器布尔值,在攻击期间更新运动和动画视图。

void UpdateDirection()
{
    Vector3 direction = m_MovementModel.GetDirection();

    if ( direction != Vector3.zero )
    {
        Animator.SetFloat( "DirectionX", direction.x );
        Animator.SetFloat( "DirectionY", direction.y );
    }

    Animator.SetBool( "IsMoving", m_MovementModel.IsMoving() );
}

public void DoAttack()
{
    Animator.SetTrigger( " DoAttack ");
}

然而,我所做的一切都让我不断收到同样的信息。我查看了所有代码,但似乎找不到错误?


字符键盘控件。

void Update()
{
    UpdateDirection();
    UpdateAction();
    UpdateAttack();
}

void UpdateAttack()
{
    if( Input.GetKeyDown( KeyCode.Space ) )
    {
        OnAttackPressed();
    }
}

void UpdateAction()
{
    if( Input.GetKeyDown( KeyCode.E ) )
    {
        OnActionPressed();
    }
}

标签: c#unity3d2d

解决方案


看起来你的答案在评论中找到了,这是一个简单的错字/拼写错误。

Animator.SetTrigger( " DoAttack ");

现在应该变成...

Animator.SetTrigger("DoAttack");

归功于 Johnny 和 Ehsan Mohammadi 与 OP 一起深入研究。


推荐阅读