Пример #1
0
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateEnter(animator, stateInfo, layerIndex);

        if (m_Target == null)
        {
            m_Target = animator.GetComponentInParent <TargetCmpt>();
        }

        if (m_Target == null || m_Target.GetAttackEnemy() == null)
        {
            return;
        }

        if (m_IKs == null)
        {
            GetIKs(m_Target.transform);
        }

        if (m_IKs == null || m_IKs.Length <= 0)
        {
            return;
        }

        for (int i = 0; i < m_IKs.Length; i++)
        {
            m_IKs[i].solver.target = m_Target.GetAttackEnemy().CenterBone;
        }
    }
Пример #2
0
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateEnter(animator, stateInfo, layerIndex);

        if (m_IKs == null)
        {
            GetIKs(animator.transform);
        }

        if (m_Target == null)
        {
            m_Target = animator.GetComponentInParent <TargetCmpt>();
        }

        if (m_Target == null || m_Target.GetAttackEnemy() == null)
        {
            return;
        }

        if (m_IKs == null || m_IKs.Length <= 0)
        {
            return;
        }

        m_Pos = m_Target.GetAttackEnemy().centerPos;
    }
Пример #3
0
        void CalculateDestination()
        {
            m_CurMoveDestination = m_MoveDestination;

            if (m_CurMoveDestination != Vector3.zero && m_Motor != null)
            {
                float sqrDis = PEUtil.SqrMagnitude(m_Motor.transform.position, m_CurMoveDestination, m_Motor.gravity < PETools.PEMath.Epsilon);

                Enemy enemy = m_target != null?m_target.GetAttackEnemy() : null;

                if (enemy != null && PEUtil.SqrMagnitude(m_CurMoveDestination, enemy.position, false) < 0.25f * 0.25f)
                {
                    if (m_Motor.gravity < PETools.PEMath.Epsilon)
                    {
                        sqrDis = enemy.SqrDistance;
                    }
                    else
                    {
                        sqrDis = enemy.SqrDistanceXZ;
                    }
                }

                if (sqrDis < 0.1f * 0.1f)
                {
                    m_CurMoveDestination = Vector3.zero;
                }
            }
        }
Пример #4
0
    Transform GetIKTransform()
    {
        if (m_Scanner != null)
        {
            Enemy enemy = m_Scanner.GetAttackEnemy();
            if (!Enemy.IsNullOrInvalid(enemy))
            {
                return(enemy.CenterBone);
            }
        }

        return(null);
    }
Пример #5
0
    public bool HasAttackEnemy()
    {
        foreach (PeEntity skEntity in m_Entities)
        {
            if (skEntity != null && !skEntity.IsDeath())
            {
                TargetCmpt targetCmpt = skEntity.GetComponent <TargetCmpt>();
                if (targetCmpt != null && targetCmpt.GetAttackEnemy() != null)
                {
                    return(true);
                }
            }
        }

        return(false);
    }