Exemplo n.º 1
0
 /// <summary>
 /// 设置当前状态
 /// </summary>
 /// <param name="stateInfo"></param>
 void SetCurStateInfo(XX_AnimationStateInfo stateInfo)
 {
     _curStateInfo = stateInfo;
     _curStateTime = 0;
     IsAttacking   = true;
     animator.SetBool(isAttack, IsAttacking);
 }
Exemplo n.º 2
0
 /// <summary>
 /// 初始化攻击动画
 /// </summary>
 void InitStateInfos()
 {
     normalStateInfo  = new XX_AnimationStateInfo(animator, "UpBody.OrientalSword_COMBOATTACK01", 0.5f, true, 0f, 0.5f, 0.5f);
     normal1StateInfo = new XX_AnimationStateInfo(animator, "UpBody.OrientalSword_COMBOATTACK01", 0.6f, true, 0.5f, 0.6f, 0.6f);
     normal2StateInfo = new XX_AnimationStateInfo(animator, "UpBody.OrientalSword_COMBOATTACK01", 0.9f, true, 1.1f, 0.9f, 0.9f);
     _stateInfos.Add(normalStateInfo);
     _stateInfos.Add(normal1StateInfo);
     _stateInfos.Add(normal2StateInfo);
 }
Exemplo n.º 3
0
    /// <summary>
    /// 当状态离开
    /// </summary>
    /// <param name="stateInfo"></param>
    void OnExitState(XX_AnimationStateInfo stateInfo)
    {
        SetUpBodyLayerWeight(0);
        SetDownBodyLayerWeight(0);
        SetAttackHorParameter(0);
        SetAttackVerParameter(0);

        _curStateTime = 0;
        _curStateInfo = null;
        IsAttacking   = false;
        animator.SetBool(isAttack, IsAttacking);
        _isAction            = null;
        _normalNextStateInfo = null;
    }
Exemplo n.º 4
0
    /// <summary>
    /// 攻击逻辑
    /// </summary>
    void OnAttack()
    {
        bool canAttack = characterController.animState.attackIndex != 0;

        canAttack &= _curStateInfo == null || (_curStateInfo != null && _curStateTime >= _curStateInfo.AnimationLength);

        canAttack |= (_curStateInfo != null && _normalNextStateInfo != null && _curStateTime >= _curStateInfo.AnimationLength);

        if (IsAttacking)
        {
            if (characterController.animState.attackIndex == 1 && IsCurAttackNormal())
            {
                _normalNextStateInfo = _curStateInfo == normalStateInfo ? normal1StateInfo :
                                       _curStateInfo == normal1StateInfo ? normal2StateInfo :
                                       _curStateInfo == normal2StateInfo ? normalStateInfo : null;
            }
            //判断是否在其他不同行为 例如 走,跳,蹲下
            bool isAction = !characterController.animState.onGround;
            isAction |= characterController.animState.run;
            isAction |= characterController.animState.walk;
            isAction |= characterController.animState.crouch;
            if (isAction != _isAction)
            {
                _isAction = isAction;
                SetDownBodyLayerWeight(isAction ? 0 : 1.0f);
            }
        }
        if (!canAttack)
        {
            return;
        }

        //TODO 获取合适得状态
        //XX_AnimationStateInfo stateInfo;
        SetCurStateInfo(_normalNextStateInfo ?? normalStateInfo);
        SetAttackHorParameter(1);
        SetUpBodyLayerWeight(1);
    }