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; } }