Пример #1
0
    IEnumerator SpawnEnemy(int pathIndex, int[] prefabIndex, int[] count, bool waitFlag)
    {
        List <GameObject> curEnemyGroup = new List <GameObject>();
        int curEnemyGroupIndex          = GeneralPool.addToEnemyGroupList(curEnemyGroup);

        for (int i = 0; i < prefabIndex.Length; i++)
        {
            for (int j = 0; j < count[i]; j++)
            {
                GameObject enemy = GameObject.Instantiate(EnemyPrefabsList[prefabIndex[i]], AllPath[pathIndex].transform.GetChild(0).transform.position, Quaternion.identity);
                enemy.transform.parent = EnemyParent;
                if (AllPath[pathIndex].transform.childCount > 1)
                {
                    enemy.transform.LookAt(AllPath[pathIndex].transform.GetChild(1).transform.position, Vector3.up);
                }
                Enemy enemyComp = enemy.GetComponent <Enemy>();
                enemyComp.InitWithData(AllPath[pathIndex]);

                GeneralPool.addToEnemyGroup(enemy, curEnemyGroupIndex);

                if (tempWalkFlag)
                {
                    enemyComp.StartWalk();
                }
                if (waitFlag)
                {
                    yield return(new WaitForSeconds(0.5f));
                }
                else
                {
                    yield return(null);
                }
            }
        }
    }
Пример #2
0
    private void Detect()
    {
        List <Vector2> gridPosList = new List <Vector2>();

        foreach (Vector2 off in towerDetectScope)
        {
            Vector2 pos = new Vector2((float)Mathf.Floor(transform.position.x) + 0.5f, (float)Mathf.Floor(transform.position.z) + 0.5f);
            pos += off;
            gridPosList.Add(pos);
        }

        List <Vector2>    enemyPosList = new List <Vector2>();
        List <GameObject> enemyList    = GeneralPool.get_enemyList();

        foreach (GameObject enemy in enemyList)
        {
            Vector2 pos = new Vector2((float)Mathf.Floor(enemy.transform.position.x) + 0.5f, (float)Mathf.Floor(enemy.transform.position.z) + 0.5f);
            enemyPosList.Add(pos);
        }

        //Debug.Log(gridPosList.Count.ToString() + "  " + enemyPosList.Count.ToString());

        detectedEnemyList.Clear();
        for (int i = 0; i < enemyPosList.Count; i++)
        {
            for (int j = 0; j < gridPosList.Count; j++)
            {
                if (enemyPosList[i] == gridPosList[j])
                {
                    detectedEnemyList.Add(enemyList[i]);
                }
            }
        }
    }
Пример #3
0
 // Update is called once per frame
 void Update()
 {
     towerList = GeneralPool.get_towerList();
     healthBarTransform.position = Camera.main.WorldToScreenPoint(healthBarDefineTransform.position);
     Detect();
     if (enemyState == BasicInfo.enemyStates.Stop)
     {
         UpdateEnemyByState();
     }
     else
     {
         if (detectedTowerList.Count > 0)
         {
             enemyState = BasicInfo.enemyStates.Attack;
             UpdateEnemyByState();
             enemyLastState = BasicInfo.enemyStates.Attack;
         }
         else
         {
             enemyState = BasicInfo.enemyStates.Walk;
             UpdateEnemyByState();
             enemyLastState = BasicInfo.enemyStates.Walk;
         }
     }
     // UpdateEnemyByState();
 }
Пример #4
0
    public void SellFocusTower()
    {
        if (focusTower != null)
        {
            float sellCoins      = 0;
            Tower focusTowerComp = focusTower.GetComponent <Tower>();
            if (focusTowerComp.getRoundWhenCreated() != currentRound)
            {
                sellCoins = focusTowerComp.towerPrice / 2;
            }
            else
            {
                sellCoins = focusTowerComp.towerPrice;
            }
            sellCoins         *= (focusTowerComp.getCurrentHealth() / focusTowerComp.towerTotalHealth);
            GeneralPool.coins += sellCoins;
            uiHelper.updateCoinCountText(GeneralPool.coins);


            GeneralPool.getBP(focusTower).SetActive(true);
            GeneralPool.removeFromTowerAndBPDict(focusTower);
            GeneralPool.removeFromTowerList(focusTower);
            Destroy(focusTower);
            focusTower = null;
            towerOperatePanel_Prepare.transform.localScale = Vector3.zero;
        }
    }
Пример #5
0
    public void Die()
    {
        dieAlready = true;
        Debug.Log("当前敌人死亡前,enemyList数量为:" + GeneralPool.get_enemyList().Count);
        GeneralPool.removeFromEnemyGroup(gameObject);

        modelAnim.Play("death");
        Invoke("destroyGameObject", 3f);
    }
Пример #6
0
    // Update is called once per frame
    void Update()
    {
        if (!waitflag)
        {
            if (gameStep == 0)
            {
            }
            else
            {
                List <GameObject> enemyList = GeneralPool.get_enemyList();
                //Debug.Log(enemyList.Count);
                if (enemyList.Count == 0)
                {
                    toStep0();
                }
                else
                {
                    bool stopFlag = true;
                    foreach (GameObject enemy in enemyList)
                    {
                        if (enemy.GetComponent <Enemy>().getEnemyState() != BasicInfo.enemyStates.Stop)
                        {
                            stopFlag = false;
                            break;
                        }
                    }
                    if (stopFlag)
                    {
                        toStep0();
                    }
                    else
                    {
                        if (gameStep == 1)
                        {
                            timerTime -= Time.deltaTime;
                            uiHelper.updateTimerText(timerTime);
                            if (timerTime < 0)
                            {
                                toStep2();
                            }
                        }
                        else if (gameStep == 2)
                        {
                        }
                    }
                }


                //Debug.Log(gateList.Count+","+gateCount);
                if (gateList.Count < gateCount)
                {
                    gameOver(0);
                }
            }
        }
    }
Пример #7
0
 public void ClearAllEnemies()
 {
     foreach (GameObject enemy in GeneralPool.get_enemyList())
     {
         Destroy(enemy);
     }
     foreach (List <GameObject> enemyGroup in GeneralPool.get_enemyGroupList())
     {
         enemyGroup.Clear();
     }
     GeneralPool.get_enemyGroupList().Clear();
 }
Пример #8
0
 public void ClearAll()
 {
     foreach (GameObject enemy in GeneralPool.get_enemyList())
     {
         Destroy(enemy);
     }
     foreach (GameObject tower in GeneralPool.get_towerList())
     {
         Destroy(tower);
     }
     GeneralPool.resetPool();
 }
Пример #9
0
    private void Detect()
    {
        List <Vector2> gridPosList = new List <Vector2>();
        Vector2        pos         = new Vector2((float)Mathf.Floor(transform.position.x) + 0.5f, (float)Mathf.Floor(transform.position.z) + 0.5f);

        foreach (Vector2 off in enemyDetectScope)
        {
            Vector2 temppos = pos;
            temppos += off;
            gridPosList.Add(temppos);
        }

        List <Vector2> towerPosList = new List <Vector2>();

        towerList = GeneralPool.get_towerList();
        //Debug.Log(towerList.Count);
        foreach (GameObject tower in towerList)
        {
            Vector2 towerpos = new Vector2((float)Mathf.Floor(tower.transform.position.x) + 0.5f, (float)Mathf.Floor(tower.transform.position.z) + 0.5f);
            towerPosList.Add(towerpos);
        }

        detectedTowerList.Clear();
        //List<Vector2> detectedTowerPosList_toGridList = new List<Vector2>();
        for (int i = 0; i < towerPosList.Count; i++)
        {
            for (int j = 0; j < gridPosList.Count; j++)
            {
                //Debug.Log(towerPosList[i].x.ToString() + "," + towerPosList[i].y.ToString() + "/" + gridPosList[i].x.ToString() + "," + gridPosList[i].y.ToString());
                if (towerPosList[i] == gridPosList[j])
                {
                    detectedTowerList.Add(towerList[i]);
                    //detectedTowerPosList_toGridList.Add(new Vector2(towerList[i].transform.position.x, towerList[i].transform.position.y) - pos);
                }
            }
        }
        // Debug.Log("检测到的塔:"+detectedTowerList.Count);
        // Debug.Log("塔总数:"+towerList.Count);


        // detectedTowerList.Sort(delegate(GameObject t1,GameObject t2){
        //     Vector2 t1Vec2=new Vector2(t1.transform.position.x,t1.transform.position.z)-pos;
        //     float t1Vec2Len=t1Vec2.magnitude;
        //     Vector2 t2Vec2=new Vector2(t2.transform.position.x,t2.transform.position.z)-pos;
        //     float t2Vec2Len=t2Vec2.magnitude;
        //     return t1Vec2Len.CompareTo(t2Vec2Len);
        // });
        // foreach (GameObject tower in detectedTowerList)
        // {
        //     Debug.Log(tower.transform.position);
        // }
    }
Пример #10
0
 // Start is called before the first frame update
 void Start()
 {
     GeneralPool.resetPool();
     gateCount = gateList.Count;
     foreach (GameObject gate in gateList)
     {
         GeneralPool.addToTowerList(gate);
     }
     uiHelper        = GetComponent <UIHelper>();
     towerController = GetComponent <TowerController>();
     enemyController = GetComponent <EnemyController>();
     enemySpawner    = GetComponent <EnemySpawner>();
     currentRound    = 0;
     toStep0();
 }
Пример #11
0
 public void setGameStep(int gameStep)
 {
     this.gameStep = gameStep;
     if (gameStep == 1)
     {
         displayPath.HidePathOfEnemyGroup();
         foreach (GameObject enemy in GeneralPool.get_enemyList())
         {
             enemy.GetComponent <QuickOutline>().enabled = false;
         }
         for (int i = 0; i < enemyScrollViewContent_Prepare.childCount; i++)
         {
             Destroy(enemyScrollViewContent_Prepare.GetChild(i).gameObject);
         }
     }
 }
Пример #12
0
 public void Die()
 {
     if (towerName == "Gate")
     {
         GameObject.Find("GameController").GetComponent <RoundController>().removeFromGateList(gameObject);
     }
     else
     {
         GameObject BP = GeneralPool.getBP(gameObject);
         if (BP == null)
         {
         }
         else
         {
             BP.SetActive(true);
         }
     }
     GeneralPool.removeFromTowerAndBPDict(gameObject);
     GeneralPool.removeFromTowerList(gameObject);
     Destroy(gameObject);
 }
Пример #13
0
    void AttackTimer()
    {
        if (detectedEnemyList.Count > 0)
        {
            //Debug.Log("攻击一次");

            if (towerAttackScope > 0)//攻击范围大于0
            {
                List <Vector2> offList = new List <Vector2>();
                for (int i = 1; i <= towerAttackScope; ++i)
                {
                    for (int j = 0; j <= i; ++j)
                    {
                        int k = i - j;
                        if (j > 0 && k == 0)
                        {
                            offList.Add(new Vector2(j, k));
                            offList.Add(new Vector2(-j, k));
                        }
                        else if (j == 0 && k > 0)
                        {
                            offList.Add(new Vector2(j, k));
                            offList.Add(new Vector2(j, -k));
                        }
                        else if (j > 0 && k > 0)
                        {
                            offList.Add(new Vector2(j, k));
                            offList.Add(new Vector2(-j, k));
                            offList.Add(new Vector2(j, -k));
                            offList.Add(new Vector2(-j, -k));
                        }
                    }
                }
                List <Vector2> gridPosList = new List <Vector2>();
                foreach (Vector2 off in offList)
                {
                    Vector2 pos = new Vector2((float)Mathf.Floor(detectedEnemyList[0].transform.position.x) + 0.5f, (float)Mathf.Floor(transform.position.z) + 0.5f);
                    pos += off;
                    gridPosList.Add(pos);
                }

                List <Vector2>    enemyPosList = new List <Vector2>();
                List <GameObject> enemyList    = GeneralPool.get_enemyList();
                foreach (GameObject enemy in enemyList)
                {
                    Vector2 pos = new Vector2((float)Mathf.Floor(enemy.transform.position.x) + 0.5f, (float)Mathf.Floor(enemy.transform.position.z) + 0.5f);
                    enemyPosList.Add(pos);
                }

                List <GameObject> detectedEnemyList_inAttackScope = new List <GameObject>();
                detectedEnemyList_inAttackScope.Add(detectedEnemyList[0]);
                for (int i = 0; i < enemyPosList.Count; i++)
                {
                    for (int j = 0; j < gridPosList.Count; j++)
                    {
                        if (enemyPosList[i] == gridPosList[j])
                        {
                            detectedEnemyList_inAttackScope.Add(enemyList[i]);
                        }
                    }
                }
                foreach (GameObject detectedEnemy_inAttackScope in detectedEnemyList_inAttackScope)
                {
                    Enemy detectedEnemyComp_inAttackScope = detectedEnemy_inAttackScope.GetComponent <Enemy>();
                    float towerAttackPower_final          = BasicInfo.calcuteAttackPower(towerAttackPower, this.towerAttr, detectedEnemyComp_inAttackScope.enemyAttr);
                    detectedEnemy_inAttackScope.GetComponent <Enemy>().GetAttacked(towerAttackPower_final);
                }
            }
            else
            {
                Enemy detectedEnemyComp      = detectedEnemyList[0].GetComponent <Enemy>();
                float towerAttackPower_final = BasicInfo.calcuteAttackPower(towerAttackPower, this.towerAttr, detectedEnemyComp.enemyAttr);
                detectedEnemyComp.GetAttacked(towerAttackPower_final);
            }
        }
        else
        {
            TimersManager.ClearTimer(AttackTimer);
        }
    }
Пример #14
0
    // Update is called once per frame
    void Update()
    {
        if (loadedflag_inner)
        {
            //Debug.Log("gamestep情况:"+gameStep);
            if (gameStep == 0)
            {
                if (towerMode)
                {
                    foreach (GameObject tower in GeneralPool.get_towerList())
                    {
                        if (tower.tag == "Tower")
                        {
                            Collider towerColli = tower.GetComponent <Collider>();
                            if (towerColli != null)
                            {
                                tower.GetComponent <Collider>().enabled = false;
                            }
                        }
                    }
                    //创建一条从摄像机到触摸位置的射线
                    Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 定义射线
                    RaycastHit rayHit;
                    if (Physics.Raycast(ray, out rayHit, 200))                          // 参数1 射线,参数2 碰撞信息, 参数3 碰撞层
                    {
                        //Debug.Log(rayHit.collider.gameObject.name);
                        if (rayHit.collider.gameObject.tag == "BuildablePlane")
                        {
                            Vector3 hitpoint          = rayHit.point;
                            float   hitpoint_x        = hitpoint.x;
                            float   hitpoint_y        = hitpoint.y;
                            float   hitpoint_z        = hitpoint.z;
                            float   hitpoint_x_center = Mathf.Floor(hitpoint_x) + 0.5f;
                            float   hitpoint_z_center = Mathf.Floor(hitpoint_z) + 0.5f;
                            tempTower.transform.position = new Vector3(hitpoint_x_center, hitpoint_y, hitpoint_z_center);
                            if (!tempTower.activeSelf)
                            {
                                tempTower.SetActive(true);
                            }

                            if (CheckGuiRaycastObjects())
                            {
                                return;
                            }
                            if (Input.GetMouseButtonDown(0))//建塔
                            {
                                if (tempTower.activeSelf)
                                {
                                    if (GeneralPool.coins >= tempTowerComp.towerPrice)
                                    {
                                        uiHelper.updateCoinCountText(GeneralPool.coins);
                                        GameObject realTower = Instantiate(towerPrefab, tempTower.transform.position, new Quaternion());

                                        realTower.transform.parent = TowerParent;
                                        Tower realTowerComp = realTower.GetComponent <Tower>();
                                        realTowerComp.setRoundWhenCreated(currentRound);
                                        GameObject realTowerScopePlane = realTowerComp.getScopePlane();
                                        realTowerScopePlane.SetActive(false);
                                        List <Vector3> realTowerScopePlanePos = realTowerComp.getScopePlanePosList();
                                        displayScopePlane.DisplayScopeOfTower(realTowerScopePlanePos, realTowerScopePlane.transform);
                                        GeneralPool.addToTowerList(realTower);
                                        GeneralPool.addToTowerAndBPDict(realTower, rayHit.collider.gameObject);
                                        rayHit.collider.gameObject.SetActive(false);
                                        GeneralPool.coins -= realTowerComp.towerPrice;
                                        uiHelper.updateCoinCountText(GeneralPool.coins);
                                        //Debug.Log(rayHit.collider.gameObject.name);
                                    }
                                    else
                                    {
                                        Debug.Log("金币不足");
                                        uiHelper.ShowAlarm("金币不足");
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (tempTower.activeSelf)
                            {
                                //Debug.Log("nothing");
                                tempTower.SetActive(false);
                            }
                        }
                    }
                }
                else//非TowerMode
                {
                    //非TowerMode中所有塔都可以被点击,要先全设置为碰撞体
                    foreach (GameObject tower in GeneralPool.get_towerList())
                    {
                        if (tower.tag == "Tower")
                        {
                            Collider towerColli = tower.GetComponent <Collider>();
                            if (towerColli != null)
                            {
                                tower.GetComponent <Collider>().enabled = true;
                            }
                        }
                    }

                    if (CheckGuiRaycastObjects())
                    {
                        return;
                    }
                    if (Input.GetMouseButtonDown(0))
                    {
                        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 定义射线
                        RaycastHit rayHit;
                        if (Physics.Raycast(ray, out rayHit, 200))                          // 参数1 射线,参数2 碰撞信息, 参数3 碰撞层
                        {
                            GameObject rayHitObject = rayHit.collider.gameObject;
                            if (rayHitObject.tag == "Tower")//点击塔会显示塔的外轮廓,塔的检测范围,以及塔的选项
                            {
                                if (focusTower == rayHitObject)
                                {
                                    QuickOutline towerOutline = rayHitObject.GetComponent <QuickOutline>();
                                    towerOutline.enabled = false;
                                    focusTower           = null;
                                    //towerOperatePanel_Prepare.transform.localScale = Vector3.zero;
                                }
                                else
                                {
                                    // foreach (GameObject tower in GeneralPool.get_towerList())
                                    // {
                                    //     if (tower.tag == "Tower")
                                    //     {
                                    //         tower.GetComponent<QuickOutline>().enabled = false;
                                    //         Transform OneScopePlaneTransform = tower.transform.Find("scopePlane");
                                    //         OneScopePlaneTransform.gameObject.SetActive(false);
                                    //     }
                                    // }

                                    if (focusTower == null)
                                    {
                                    }
                                    else
                                    {
                                        focusTower.GetComponent <QuickOutline>().enabled = false;
                                        Transform OneScopePlaneTransform = focusTower.transform.Find("scopePlane");
                                        OneScopePlaneTransform.gameObject.SetActive(false);
                                        towerOperatePanel_Prepare.transform.localScale = Vector3.zero;
                                    }
                                    focusTower = rayHitObject;
                                    focusTower.GetComponent <QuickOutline>().enabled = true;
                                }
                                GameObject TowerScopePlane = rayHitObject.transform.Find("scopePlane").gameObject;
                                TowerScopePlane.SetActive(!TowerScopePlane.activeSelf);
                                switchTowerOperatePanel_Prepare(rayHitObject);
                            }
                            else if (rayHitObject.name == "Road1" || rayHitObject.name == "Road2")
                            {
                                Debug.Log("its road");
                            }
                            else
                            {
                                Debug.Log(rayHitObject.name);
                                // foreach (GameObject tower in GeneralPool.get_towerList())
                                // {
                                //     if (tower.tag == "Tower")
                                //     {
                                //         tower.GetComponent<QuickOutline>().enabled = false;
                                //         Transform OneScopePlaneTransform = tower.transform.Find("scopePlane");
                                //         OneScopePlaneTransform.gameObject.SetActive(false);
                                //     }
                                // }
                                if (focusTower != null)
                                {
                                    focusTower.GetComponent <QuickOutline>().enabled = false;
                                    Transform OneScopePlaneTransform = focusTower.transform.Find("scopePlane");
                                    OneScopePlaneTransform.gameObject.SetActive(false);
                                }
                                focusTower = null;

                                towerOperatePanel_Prepare.transform.localScale = Vector3.zero;
                            }
                        }
                    }

                    if (focusTower != null)
                    {
                        towerOperatePanel_Prepare.transform.position = Camera.main.WorldToScreenPoint(focusTower.transform.position);
                    }
                }
            }
            else//在出兵阶段和交战阶段,点击塔可以显示塔的攻击范围,塔名和属性,紧急修复按钮,及技能按钮
            {
                //此时所有塔都可以被点击,要先全设置为碰撞体
                foreach (GameObject tower in GeneralPool.get_towerList())
                {
                    if (tower.tag == "Tower")
                    {
                        Collider towerColli = tower.GetComponent <Collider>();
                        if (towerColli != null)
                        {
                            tower.GetComponent <Collider>().enabled = true;
                        }
                    }
                }
                if (CheckGuiRaycastObjects())
                {
                    return;
                }
                if (Input.GetMouseButtonDown(0))
                {
                    Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 定义射线
                    RaycastHit rayHit;
                    if (Physics.Raycast(ray, out rayHit, 200))                          // 参数1 射线,参数2 碰撞信息, 参数3 碰撞层
                    {
                        GameObject rayHitObject = rayHit.collider.gameObject;
                        if (rayHitObject.tag == "Tower")//点击塔会显示塔的外轮廓,塔的检测范围,以及塔的选项
                        {
                            if (focusTower == rayHitObject)
                            {
                                QuickOutline towerOutline = rayHitObject.GetComponent <QuickOutline>();
                                towerOutline.enabled = false;
                                focusTower           = null;
                                //towerOperatePanel_Prepare.transform.localScale = Vector3.zero;
                            }
                            else
                            {
                                // foreach (GameObject tower in GeneralPool.get_towerList())
                                // {
                                //     if (tower.tag == "Tower")
                                //     {
                                //         tower.GetComponent<QuickOutline>().enabled = false;
                                //         Transform OneScopePlaneTransform = tower.transform.Find("scopePlane");
                                //         OneScopePlaneTransform.gameObject.SetActive(false);
                                //     }
                                // }

                                if (focusTower == null)
                                {
                                }
                                else
                                {
                                    focusTower.GetComponent <QuickOutline>().enabled = false;
                                    Transform OneScopePlaneTransform = focusTower.transform.Find("scopePlane");
                                    OneScopePlaneTransform.gameObject.SetActive(false);
                                    towerOperatePanel_Battle.transform.localScale = Vector3.zero;
                                }
                                focusTower = rayHitObject;
                                focusTower.GetComponent <QuickOutline>().enabled = true;
                            }
                            GameObject TowerScopePlane = rayHitObject.transform.Find("scopePlane").gameObject;
                            TowerScopePlane.SetActive(!TowerScopePlane.activeSelf);
                            switchTowerOperatePanel_Battle(rayHitObject);
                        }
                        else if (rayHitObject.name == "Road1" || rayHitObject.name == "Road2")
                        {
                            Debug.Log("its road");
                        }
                        else
                        {
                            Debug.Log(rayHitObject.name);
                            // foreach (GameObject tower in GeneralPool.get_towerList())
                            // {
                            //     if (tower.tag == "Tower")
                            //     {
                            //         tower.GetComponent<QuickOutline>().enabled = false;
                            //         Transform OneScopePlaneTransform = tower.transform.Find("scopePlane");
                            //         OneScopePlaneTransform.gameObject.SetActive(false);
                            //     }
                            // }
                            if (focusTower != null)
                            {
                                focusTower.GetComponent <QuickOutline>().enabled = false;
                                Transform OneScopePlaneTransform = focusTower.transform.Find("scopePlane");
                                OneScopePlaneTransform.gameObject.SetActive(false);
                            }
                            focusTower = null;

                            towerOperatePanel_Battle.transform.localScale = Vector3.zero;
                        }
                    }
                }

                if (focusTower != null)
                {
                    towerOperatePanel_Battle.transform.position = Camera.main.WorldToScreenPoint(focusTower.transform.position);
                }
                else
                {
                    towerOperatePanel_Battle.transform.localScale = Vector3.zero;
                }
            }
        }
        else//loadedflag_inner为false,说明资源还未全部加载完成
        {
        }
    }
Пример #15
0
    // Update is called once per frame
    void Update()
    {
        if (loadedflag_inner)
        {
            if (CheckGuiRaycastObjects())
            {
                return;
            }
            if (Input.GetMouseButtonDown(0))
            {
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 定义射线
                RaycastHit rayHit;
                if (Physics.Raycast(ray, out rayHit, 200))                          // 参数1 射线,参数2 碰撞信息, 参数3 碰撞层
                {
                    GameObject rayHitObject = rayHit.collider.gameObject;
                    //Debug.Log(rayHitObject.name);
                    if (rayHitObject.name == "Road1" || rayHitObject.name == "Road2")
                    {
                        Vector3 hitpoint   = rayHit.point;
                        float   hitpoint_x = hitpoint.x;
                        float   hitpoint_y = hitpoint.y;
                        float   hitpoint_z = hitpoint.z;
                        hitpoint_x_center = Mathf.Floor(hitpoint_x) + 0.5f;
                        hitpoint_z_center = Mathf.Floor(hitpoint_z) + 0.5f;
                        displayPath.HidePathOfEnemyGroup();
                        foreach (GameObject enemy in GeneralPool.get_enemyList())
                        {
                            enemy.GetComponent <QuickOutline>().enabled = false;
                        }
                    }
                    else if (rayHitObject.tag == "Tower" || rayHitObject.tag == "BuildablePlane")
                    {
                    }
                    else
                    {
                        hitpoint_x_center = 1000f;
                        hitpoint_z_center = 1000f;
                        displayPath.HidePathOfEnemyGroup();
                        foreach (GameObject enemy in GeneralPool.get_enemyList())
                        {
                            enemy.GetComponent <QuickOutline>().enabled = false;
                        }
                    }
                }

                List <GameObject> insideEnemyList = new List <GameObject>();
                foreach (GameObject enemy in GeneralPool.get_enemyList())
                {
                    //displayPath.HidePathOfEnemyGroup();
                    //enemy.GetComponent<QuickOutline>().enabled = false;
                    if (Mathf.Floor(enemy.transform.position.x) + 0.5f == hitpoint_x_center && Mathf.Floor(enemy.transform.position.z) + 0.5f == hitpoint_z_center)
                    {
                        insideEnemyList.Add(enemy);
                    }
                }
                //List<int> insideEnemyGroupIndexs = new List<int>();
                foreach (GameObject insideEnemy in insideEnemyList)
                {
                    insideEnemy.GetComponent <QuickOutline>().enabled = true;
                    //int enemyGroupIndex = GeneralPool.get_enemyGroupIndex(insideEnemy);
                    //if (enemyGroupIndex == -1)
                    //{
                    //    Debug.Log("存在Bug:某一enemy没有加入军团");
                    //}
                    //else
                    //{
                    //    if (!insideEnemyGroupIndexs.Contains(enemyGroupIndex))
                    //        insideEnemyGroupIndexs.Add(enemyGroupIndex);
                    //}
                }

                changeEnemyScrollView_and_DisplayPath(insideEnemyList);
            }
            updateEnemyScrollView();
        }
    }