IEnumerator Bullet_Move(EnemyM origin, CharacterM target) { if (origin.Menemy_info.enemy_name.Equals("Enemy Wizard")) { Now_Bullet = EnemyWizard; } Now_Bullet.SetActive(true); while (true) { if ((transform.position - target.transform.position).sqrMagnitude < 0.3f) { target.GetHit(origin.Menemy_info.enemy_damage); origin.On_hit_bullet = true; Now_Bullet.SetActive(false); transform.localPosition = origin.mBullet_POS; origin.Mana += origin.Menemy_info.enemy_VaryMP; break; } else { transform.LookAt(target.transform); transform.Translate(Vector3.forward * Time.deltaTime * Bullet_Speed); } yield return(null); } }
public void Push_Pooling(GameObject unit, Character info_) { CharacterM Char_ = unit.GetComponent <CharacterM>(); unit.transform.parent = Character_poolFolder.transform; Char_.mModel.SetActive(false); Char_.mModel.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); Char_.mModel.transform.rotation = Quaternion.identity; Char_.mModel = null; unit.SetActive(false); Character_Unit_List.Add(unit); }
public void Pop_Pooling(CharacterM character_) { if (character_.MyTarget != null) { // 화살을 리스트에서 꺼낸다 GameObject Return_Arrow = Archor_Arrow_List[0]; Archor_Arrow_List.RemoveAt(0); // 화살의 위치를 잡는다 Return_Arrow.transform.position = character_.mModel.transform.position; Debug.Log("mBullet_POS :" + character_.mBullet_POS); // 화살이 날릴 타겟의 방향을 바라본다 Return_Arrow.transform.LookAt(character_.MyTarget.transform); // 화살을 킨다 Return_Arrow.SetActive(true); // 날아가는 것을 바라본다.(우리가) Debug.Log("날아간다~"); } }
private void Init_Pooling() { for (int i = 0; i < Character_max_poolobject; i++) { Character_Unit_List.Add(Instantiate(character_unit, Character_poolFolder.transform)); // 새로운 캐릭터 유닛 생성 for (int j = 0; j < dataMGR.characters.Count; j++) { CharacterM character_ = Character_Unit_List[i].GetComponent <CharacterM>(); string character_name = dataMGR.characters[j].character_name; // Debug.Log(character_name); character_.Character_Models.Add(character_name, character_.transform.Find(character_name).gameObject); character_.Character_Models[character_name].SetActive(false); } Character_Unit_List[i].SetActive(false); } for (int i = 0; i < Enemy_max_poolobject; i++) { Enemy_Unit_List.Add(Instantiate(enemy_unit, Enemy_poolFolder.transform)); // 새로운 적 유닛 생성 for (int j = 0; j < dataMGR.enemys.Count; j++) { EnemyM enemy_ = Enemy_Unit_List[i].GetComponent <EnemyM>(); string enemy_name = dataMGR.enemys[j].enemy_name; enemy_.Enemy_Models.Add(enemy_name, enemy_.transform.Find(enemy_name).gameObject); enemy_.Enemy_Models[enemy_name].SetActive(false); } Enemy_Unit_List[i].SetActive(false); } // 지정된 수만큼 아처 오브젝트 생성 for (int i = 0; i < Arrow_max_poolobject; i++) { Archor_Arrow_List.Add(Instantiate(Archer_Arrow, Arrow_poolFolder.transform)); } }
public GameObject Pop_Pooling(Character info_) { // 캐릭터 정보에 따라 모델 활성화 // 유닛 자식 순서 변경 // 오브젝트 반환 GameObject Return_Unit = Character_Unit_List[0]; CharacterM character = Return_Unit.GetComponent <CharacterM>(); GameObject model = character.Character_Models[info_.character_name]; Return_Unit.SetActive(true); character.Character_Models[info_.character_name].SetActive(true); character.mModel = model; character.mModel.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); character.mModel.transform.rotation = Quaternion.identity; character.Character_info_update(info_); Character_Unit_List.Remove(Return_Unit); return(Return_Unit); }
//적 public void Shoot_Bullet(EnemyM origin, CharacterM target) { StartCoroutine(Bullet_Move(origin, target)); }
public void LevelUp_Character_(Character info_) { Transform Character_pos = null; CharacterM tmp_character; GameObject tmp = null; // 상점 구매시 호출, 구매한 캐릭터의 정보로 개수를 추가한다. mCharacter_Count[info_.character_name]++; // Debug.Log(info_.character_name + " / " + mCharacter_Count[info_.character_name]); // 추가하고 개수가 3개인 경우 레벨업 진행 if (mCharacter_Count[info_.character_name] == 3) { //배치된 캐릭터 분석 for (int i = 0; i != Positioned_Character.Count;) { tmp_character = Positioned_Character[i].GetComponent <CharacterM>(); // 같은 정보의 캐릭터를 제거 if (tmp_character.Mcharacter_info.character_index.Equals(info_.character_index)) { Character_pos = tmp_character.transform; // 배치된 캐릭터 위치 저장 //제거 작업 PoolMGR.Push_Pooling(tmp_character.gameObject, tmp_character.Mcharacter_info); Character_origin_position.Remove(tmp_character.now_node.transform); Positioned_Character.Remove(tmp_character.gameObject); All_Character.Remove(tmp_character.gameObject); is_Board = true; // 보드위 설정 i = 0; // 리스트 } else { i++; } } // 상점의 캐릭터 분석 for (int i = 0; i != Storage_Character.Count;) { tmp_character = Storage_Character[i].GetComponent <CharacterM>(); // if (tmp_character.Mcharacter_info.character_name == info_.character_name) if (tmp_character.Mcharacter_info.character_index.Equals(info_.character_index)) { PoolMGR.Push_Pooling(tmp_character.gameObject, tmp_character.Mcharacter_info); Storage_Character.Remove(tmp_character.gameObject); All_Character.Remove(tmp_character.gameObject); // 배치된 캐릭터가 없는 경우 if (Character_pos == null) { Character_pos = tmp_character.transform; // 창고의 캐릭터의 is_Board = false; } i = 0; } else { i++; } } BoardMGR.SpawnCharacter(info_, Character_pos, ref tmp); if (is_Board) { Positioned_Character.Add(tmp); Character_origin_position.Add(tmp.GetComponent <CharacterM>().Out_Node().transform); } else { Storage_Character.Add(tmp); } CharacterM tmp_character_ = tmp.GetComponent <CharacterM>(); tmp_character_.Init(); tmp_character_.On_board = is_Board; tmp_character_.mLevel++; UiMGR.StorageCheck(); mCharacter_Count[info_.character_name] = 0; } }
IEnumerator Dispose_unit_mouse() { Transform origin_Transform = Dispose_unit.transform; Vector3 origin_position = Dispose_unit.transform.position; CharacterM unit_ = Dispose_unit.GetComponent <CharacterM>(); int Origin_mouse_type = Mouse_on_Type; //Line_.SetActive(true); GridMGR.Line_Set(true); Debug.Log("Dispose_unit_mouse : start"); while (true) { yield return(null); if (gameMGR.Mouse_Type == Mouse_Mode.ON_EXIT) { //Line_.SetActive(false); GridMGR.Line_Set(false); Check_.dispos_mode = false; unit_.mCollider.gameObject.SetActive(true); unit_.Set_Ani(Ani_Define.IDLE); // 왓큼로직 if (WOTCM_MGR.Click_Switch == true && WOTCM_MGR.Click_Coru == null) { WOTCM_MGR.Click_Coru = StartCoroutine(WOTCM_MGR.WOTCM_CLICK_END()); } if (Origin_mouse_type != Mouse_on_Type) { if (Mouse_on_Type == Board_Define.ONBOARD) { gameMGR.Positioned_Character.Add(Dispose_unit); gameMGR.Storage_Character.Remove(Dispose_unit); gameMGR.Character_origin_position.Add(unit_.Out_Node().transform); unit_.On_board = true; } else if (Mouse_on_Type == Board_Define.ONSTORAGE) { gameMGR.Storage_Character.Add(Dispose_unit); gameMGR.Positioned_Character.Remove(Dispose_unit); gameMGR.Character_origin_position.Remove(unit_.now_node.transform); unit_.On_board = false; } else if (Mouse_on_Type == Board_Define.ONSELLZONE) { if (Origin_mouse_type == Board_Define.ONBOARD) { gameMGR.Positioned_Character.Remove(Dispose_unit); gameMGR.Character_origin_position.Remove(unit_.now_node.transform); } else if (Origin_mouse_type == Board_Define.ONSTORAGE) { gameMGR.Storage_Character.Remove(Dispose_unit); } gameMGR.mCharacter_Count[Dispose_unit.GetComponent <CharacterM>().Mcharacter_info.character_name]--; gameMGR.All_Character.Remove(Dispose_unit); PoolMGR.Push_Pooling(Dispose_unit, Dispose_unit.GetComponent <CharacterM>().Mcharacter_info); gameMGR.Player_HP += 5; //0930 _ 판매시 체력 증가 // 왓큼 로직 WOTCM_MGR.Click_Coru = StartCoroutine(WOTCM_MGR.WOTCM_SELL()); } } else { if (Mouse_on_Type == Board_Define.ONBOARD) { gameMGR.Character_origin_position.Remove(unit_.now_node.transform); gameMGR.Character_origin_position.Add(unit_.Out_Node().transform); } } if (Mouse_on_Type == Board_Define.NONE || Check_.spawn_order == false) { Debug.Log(Dispose_unit.transform.position + " / " + origin_position); Dispose_unit.transform.position = origin_position; } Dispose_unit = null; //gameMGR.On_Touch = false; Check_.gameObject.SetActive(false); Dispose_coroutine = null; Mouse_on_Type = Board_Define.NONE; Check_.gameObject.transform.position = Vector3.zero; yield break; } //왓큼 로직 else { WOTCM_MGR.Click_Coru = null; } Check_.dispos_mode = true; unit_.mCollider.SetActive(false); if (Check_.gameObject.activeSelf) { Dispose_unit.transform.position = Check_.transform.position; } else if (Mouse_on_Type == Board_Define.NONE || Mouse_on_Type == Board_Define.ONSELLZONE && gameMGR.Mouse_Type != Mouse_Mode.ON_EXIT) { Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 21); Dispose_unit.transform.position = Main_camera.ScreenToWorldPoint(mousePosition); // 왓튼에게 Dispose_unit.transform 을 던져주면서 바라보게 만들면됨. WOTCM_MGR.WOTCM_CLICK_STAY(Dispose_unit.transform); } if (Mouse_on_Type == Board_Define.ONSELLZONE) { Debug.Log(Dispose_unit); unit_.Set_Ani(Ani_Define.VICTORY); } else { unit_.Set_Ani(Ani_Define.ATTACK); } } }
//전투 IEnumerator MinusHealth_e() { Debug.Log(mPath); if (mPath != null) { float now_distance = (transform.position - now_node.transform.position).sqrMagnitude; float next_distance = (transform.position - mPath[path_index].transform.position).sqrMagnitude; transform.position = now_distance > next_distance ? mPath[path_index].transform.position : now_node.transform.position; mPath = null; } if (Next_Move != null) { StopCoroutine(Next_Move); Next_Move = null; } now_node.bIsWall = false; mTarget = MyTarget.GetComponent <CharacterM>(); while (true) { if (GameMGR._state == Board_Define.GAME_BATTLE) { // 타겟이 살아있는 경우 if (mTarget.Is_Dead == false) { now_node.bisEnemy = true; // MoveMGR.LookAt_Target(MyTarget, ref MyTrans); transform.LookAt(MyTarget.transform); if (MyTarget != null) { if (Current_MP >= 100) { Current_MP = 0; Skill_Switch = true; if (Menemy_info.enemy_index == 3) { gameObject.transform.eulerAngles = new Vector3(0, 180, 0); } // 스킬 애니메이션 실행 while (true) { Set_Ani(Ani_Define.SKILL); if (Skill_Switch == false) { break; } yield return(null); } } else { Set_Ani(Ani_Define.ATTACK); Mana += Menemy_info.enemy_VaryMP; yield return(new WaitForSeconds(mAnimator.GetCurrentAnimatorStateInfo(0).length)); if (Long_attack) { while (true) { Set_Ani(Ani_Define.IDLE); if (On_hit_bullet) { On_hit_bullet = false; break; } yield return(null); } } } } } // 타겟이 죽은 경우 else { now_node.bisEnemy = false; MyTarget = null; While_Fight = null; Enemy_state = Unit_Battle_State.FINDING; yield break; } } else if (GameMGR._state == Board_Define.GAME_BATTEL_END) { mSkillObj.SetActive(false); mSKillBox = null; now_node.bIsWall = true; Enemy_state = Unit_Battle_State.READY; MyTarget = null; While_Fight = null; is_Unit_init = false; yield break; } } }