1. 全局修改父动画名称:
获取当前动画状态
if (!enemy.animator.GetCurrentAnimatorStateInfo(0).IsName("idle"))
{
enemy.animState = 1;
enemy.MoveToTarget();
}
2. 自然动画退出如果不设置条件,动画会到下一个动作,假如设置过条件,则需满足条件,才会到下一个动画
3. 相对运动,由于游戏过程中,当前目标的距离实时在变,所以每次取实时的值
if (enemy.attackList.Count == 0)
{
enemy.TransitionToState(enemy.patrolState);
}
if (enemy.attackList.Count > 1)
{
for (int i = 0; i < enemy.attackList.Count; i++)
{
//相对运动,坐标距离实时在变
if (Mathf.Abs(enemy.transform.position.x - enemy.attackList[i].position.x) <
Mathf.Abs(enemy.transform.position.x - enemy.targetPoint.position.x))
{
enemy.targetPoint = enemy.attackList[i];
}
}
}
4. 攻击间隔,与距离向量判断距离
public void AttackAction()
{
if (Vector2.Distance(transform.position, targetPoint.position) < attackRange)
{
if (Time.time > nextAttack)
{
Debug.Log("attack action");
//播放攻击动画
nextAttack = Time.time + attackRate;
}
}
}
5. 动画覆盖
创建一个weight为1的Attack Layer层,默认状态留空
6. 判断当前播放的动画
if (!animator.GetCurrentAnimatorStateInfo(0).IsName("bomb_off"))