c# - 动画期间统一攻击一次
问题描述
由于我仍然是非常初学者的问题可能很愚蠢,但我真的找不到任何解决方案。我正在创建第三人称冒险游戏并尝试实施敌人攻击。问题是我无法以敌人在攻击动画期间只造成一次伤害的方式实现它。在我的代码中,已经攻击的 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;
}
}
解决方案
您可能更想查看动画事件。
无需查询状态,Animator
您可以直接从动画状态本身调用某些事件!
只是宁愿做到
public void CauseDamage()
{
if(player) player.GetComponent<Health>().healthValue -= damage / 100f;
}
然后在你的动画本身中添加一个事件
并选择要在事件检查器中调用的方法。
然后,每次您的动画通过该关键帧时,该事件将被调用一次。
推荐阅读
- c# - MongoDB C# 驱动程序 (2.7) 和序列化问题
- javascript - 如果在页面加载禁用按钮
- python - 将 Mathematica 函数转换为 Java 形式
- angular - ngrx:如何订阅状态字段的更改
- oauth - EWS OAuth .net 核心 2.1
- c# - 在 ASP.NET Core 2.1 中添加自定义 TagHelper
- python - Issues on Height Map to Normal Map with Python OpenCV
- jquery-mobile - pagecontainer 触发事件(多页站点)
- java - 无法恢复活动运行时异常
- sql - 在 sql server 中修改列数据类型的最佳方法是什么?