c# - 攻击动画不触发
问题描述
我在 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();
}
}
解决方案
看起来你的答案在评论中找到了,这是一个简单的错字/拼写错误。
Animator.SetTrigger( " DoAttack ");
现在应该变成...
Animator.SetTrigger("DoAttack");
归功于 Johnny 和 Ehsan Mohammadi 与 OP 一起深入研究。
推荐阅读
- python - 在 3D 空间中插入不同长度的 2D 数组
- javascript - 当输入的输入以空格开头时,输入值为 ""
- python - 有人可以举个例子来说明由python中的小方差引起的某种数值错误吗?
- redis - OpenShift - ErrImagePull 即使使用 rhel8/redis-5 的 PullSecret
- flutter - 一个 RenderFlex 在底部溢出了 729 个像素。在 SingleChildScrollView
- entity-framework - EF 和 asp-.net-core - 无法生成控制器
- python - 如何更改 anaconda 环境的路径?
- excel - 从 SharePoint URL 打开 Excel 文件(被其他人使用时)时,如何绕过“文件正在使用”提示?
- java - 如何使粒子对象跟随鼠标移动
- java - 如何使用相同的连接将 RMI 服务器替换为另一个 RMI 服务器?