示例#1
0
    public void ControlledUpdate()
    {
        if (m_character == null)
        {
            return;
        }

        if (m_character.m_specialAttackActive)
        {
            return;
        }

        Vector3 moveDir = Vector3.zero;
        Vector3 forward = Vector3.ProjectOnPlane(m_camTrans.forward, Vector3.up).normalized;
        Vector3 right   = m_camTrans.right;

        if (Input.GetKey(m_buttomMapping.m_upKey))
        {
            moveDir += forward;
        }
        if (Input.GetKey(m_buttomMapping.m_downKey))
        {
            moveDir -= forward;
        }
        if (Input.GetKey(m_buttomMapping.m_rightKey))
        {
            moveDir += right;
        }
        if (Input.GetKey(m_buttomMapping.m_leftKey))
        {
            moveDir -= right;
        }

        if (moveDir != Vector3.zero)
        {
            moveDir.Normalize();
            // detect double tap

            if (m_character.m_isOnGround && m_lastMoveDir == Vector3.zero && Vector3.Dot(m_lastNoneZeroMoveDir, moveDir) > 0.9f)
            {
                m_character.m_run = true;
            }
        }
        else
        {
            m_character.m_run = false;
        }

        m_character.MoveToward(moveDir);

        if (Input.GetKeyDown(m_buttomMapping.m_jumpKey))
        {
            m_character.Jump();
            m_character.m_run = false;
        }

        if (Input.GetKeyDown(m_buttomMapping.m_actionKey))
        {
            m_actionHoldTimer = 0.0f;
        }
        else if (Input.GetKey(m_buttomMapping.m_actionKey))
        {
            m_actionHoldTimer += Time.deltaTime;
            if (m_actionHoldTimer > HOLD_ACTION_THRESHOLD)
            {
                m_character.ActivateHoldAction();
            }
        }
        if (Input.GetKeyUp(m_buttomMapping.m_actionKey))
        {
            m_character.DoAction();
            m_character.m_run = false;
        }

        m_lastMoveDir = moveDir;
        if (m_lastMoveDir != Vector3.zero)
        {
            m_lastNoneZeroMoveDir = m_lastMoveDir;
        }
    }