public static void GetInput(this UnitOptionInput input, Output output)
    {
        switch (input)
        {
        case UnitOptionInput.POSITION:
            UI_PosOrUnitSelect.Instance.GetSelection((isUnit, unit, pos) => { output.Invoke(pos); }, true, false);
            return;

        case UnitOptionInput.UNIT:
            UI_PosOrUnitSelect.Instance.GetSelection((isUnit, unit, pos) => { output.Invoke(unit.gameObject); }, false, true);
            return;

        case UnitOptionInput.UNIT_OR_POS:
            UI_PosOrUnitSelect.Instance.GetSelection(
                (isUnit, unit, pos) =>
            {
                object obj;
                if (isUnit)
                {
                    obj = unit.gameObject;
                }
                else
                {
                    obj = pos;
                }
                output.Invoke(obj);
            }, true, true);
            return;

        default:
            Debug.LogError("Unhandled unit option type: {0}".Form(input));
            return;
        }
    }
 private void RunInputCollection(UnitOptionInput input)
 {
     input.GetInput((obj) =>
     {
         values.Add(obj);
         gathered++;
     });
 }