// 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(); }
public void ClearAll() { foreach (GameObject enemy in GeneralPool.get_enemyList()) { Destroy(enemy); } foreach (GameObject tower in GeneralPool.get_towerList()) { Destroy(tower); } GeneralPool.resetPool(); }
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); // } }
// 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,说明资源还未全部加载完成 { } }