/// <summary>
        /// 必要な武器を選択し終えるまで選択を再帰的に行う
        /// </summary>
        private static void StartSelectConsumeInstanceWeaponRecursive(
            this ISelectConsumeInstanceWeapons self,
            Actor actor,
            WeaponRecord targetWeaponRecord,
            List <WeaponRecord> targetWeaponRecords,
            List <InstanceWeapon> selectConsumeInstanceWeapons,
            Action <List <InstanceWeapon> > OnCompleteSelect,
            Action OnCancel
            )
        {
            Assert.IsNotNull(targetWeaponRecord, $"対象となる{typeof(WeaponRecord)}がありません");

            // 所持している武器から対象となる武器を抽出
            var targetInstanceWeapons = actor.StatusController.Inventory.Weapons
                                        .Where(x => x.WeaponRecord == targetWeaponRecord)
                                        .ToList();

            Broker.Global.Publish(RequestShowGridUI.Get(targetInstanceWeapons, i =>
            {
                selectConsumeInstanceWeapons.Add(targetInstanceWeapons[i]);

                Broker.Global.Publish(RequestHideGridUI.Get());

                var nextTargetWeaponRecord = GetTargetWeaponRecord(targetWeaponRecords, selectConsumeInstanceWeapons);

                // 次に選択する武器がない場合は完了処理を実行
                if (nextTargetWeaponRecord == null)
                {
                    OnCompleteSelect(selectConsumeInstanceWeapons);
                }
                else
                {
                    self.StartSelectConsumeInstanceWeaponRecursive(
                        actor,
                        nextTargetWeaponRecord,
                        targetWeaponRecords,
                        selectConsumeInstanceWeapons,
                        OnCompleteSelect,
                        OnCancel
                        );
                }
            }, () =>
            {
                OnCancel();
            }));
        }
        /// <summary>
        /// 消費する武器の選択を開始する
        /// </summary>
        public static void StartSelectConsumeInstanceWeapon(
            this ISelectConsumeInstanceWeapons self,
            Actor actor,
            NeedItems needItems,
            Action <List <InstanceWeapon> > OnCompleteSelect,
            Action OnCancel
            )
        {
            var targetWeaponRecords          = needItems.GetNeedWeaponRecords();
            var selectConsumeInstanceWeapons = new List <InstanceWeapon>();
            var targetWeaponRecord           = GetTargetWeaponRecord(targetWeaponRecords, selectConsumeInstanceWeapons);

            self.StartSelectConsumeInstanceWeaponRecursive(
                actor,
                targetWeaponRecord,
                targetWeaponRecords,
                selectConsumeInstanceWeapons,
                OnCompleteSelect,
                OnCancel
                );
        }