/// <summary>
    /// フォーカスユニットの移動エリアの算出
    /// </summary>
    /// <param name="cursorManager">Cursor manager.</param>
    public void CheckMoveArea(ref Struct.NodeMove[,] activeAreaList, GameObject checkUnitObj)
    {
        // スタート地点からエンドまで再帰的に移動コストをチェックする
        Vector3 pos = checkUnitObj.transform.position;

        activeAreaList = new Struct.NodeMove[fieldHeight, fieldWidth];
        activeAreaList[-(int)pos.y, (int)pos.x].aREA = Enums.AREA.UNIT;

        CheckMoveAreaRecursive(ref activeAreaList, checkUnitObj, pos, 0);
    }
    /// <summary>
    /// フォーカスユニットから目的地までの最短ルートをチェックし、
    /// ユニットの移動ルートリストに登録する
    /// </summary>
    /// <param name="cursorManager">Cursor manager.</param>
    /// <param name="endPos">End position.</param>
    public void CheckShortestRoute(ref PhaseManager phaseManager, Vector3 endPos)
    {
        // ユニットの移動ルートを初期化
        phaseManager.moveRoot = new List <Vector3>();

        // 開始地点から終了地点までたどり着けるか
        bool    isEnd = false;
        Vector3 pos   = phaseManager.focusUnitObj.transform.position;

        Struct.NodeMove[,] nodeList            = new Struct.NodeMove[fieldHeight, fieldWidth];
        nodeList[-(int)pos.y, (int)pos.x].aREA = Enums.AREA.UNIT;

        // スタート地点からエンドまで再帰的に移動コストをチェックする
        CheckRootAreaRecursive(ref nodeList, ref phaseManager.activeAreaManager.activeAreaList, pos, ref endPos, 0, ref isEnd);

        // ゴールできる場合は最短ルートをチェックする
        if (isEnd)
        {
            phaseManager.moveRoot = CheckShootRootRecursive(ref phaseManager, ref nodeList, endPos);
        }
    }