/// <summary>
    /// 得到指定距离可用攻击位
    /// </summary>
    /// <param name="attackDist_">攻击距离</param>
    private Vector3 OnGetAttackSlot(attackRoleInfo attackInfo_)
    {
        // 填充攻击者
        if (attackInfoNumDict.ContainsKey(attackInfo_.attackDist))
        {
            attackInfoNumDict[attackInfo_.attackDist] += 1;
        }
        else
        {
            attackInfoNumDict.Add(attackInfo_.attackDist, 1);
        }

        // 找到有没有当前攻击距离的攻击槽信息
        List <slotInfo> nowSlotList = OnGetAttckSlots(attackInfo_.attackDist);
        //if (slotDict.ContainsKey(attackInfo_.attackDist))
        //    nowSlotList = slotDict[attackInfo_.attackDist];  // 有就直接得到
        //else
        //    nowSlotList = OnGetAttckSlots(attackInfo_.attackDist); // 没有就获取

        // 得到攻击槽位
        slotInfo slotInfo = null;

        if (nowSlotList.Count > 0)
        {
            for (int j = 0; j < nowSlotList.Count; ++j)
            {
                slotInfo info = nowSlotList[j];
                if (!info.isOccupy)
                {
                    if (slotInfo == null)
                    {
                        slotInfo = info;
                    }
                    else
                    {
                        // 目标槽位距离
                        float targetDis = Vector3.Distance(attackInfo_.attackRole.position, slotInfo.attackPos);
                        // 当前槽位距离
                        float currDis = Vector3.Distance(attackInfo_.attackRole.position, info.attackPos);

                        // 找到和自己距离最短的攻击位
                        if (currDis < targetDis)
                        {
                            slotInfo = info;
                        }
                    }
                }
            }
        }

        // 设置占用
        if (slotInfo != null)
        {
            slotInfo.isOccupy = true;
        }

        return(slotInfo != null ? slotInfo.attackPos : Vector3.zero);
    }
    /// <summary>
    /// 测试工具函数-设置移动
    /// </summary>
    private IEnumerator OnSetModelMove(attackRoleInfo obj_)
    {
        while (true)
        {
            if (Vector3.Distance(obj_.attackRole.position, obj_.targetPos) > 0.01f)
            {
                // 均速移动
                obj_.attackRole.position = Vector3.MoveTowards(obj_.attackRole.position, obj_.targetPos, Time.deltaTime * 2f);
            }
            else
            {
                yield break;
            }

            yield return(new WaitForSeconds(0.01f));
        }
    }
    /// <summary>
    /// 寻找目标攻击点
    /// </summary>
    private void OnSelectAttackPos()
    {
        // 攻击距离
        float attackDist = 5f;

        for (int i = 0; i < attackList.Count; ++i)
        {
            attackRoleInfo attackInfo = attackList[i];

            // 获取攻击位
            Vector3 slotPos = OnGetAttackSlot(attackInfo);

            if (slotPos != Vector3.zero)
            {
                attackInfo.targetPos = slotPos;
                StartCoroutine(OnSetModelMove(attackInfo));
            }
        }
    }