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 GameObject Pop_Pooling(Enemy info_) { GameObject Return_Unit = Enemy_Unit_List[0]; EnemyM enemy = Return_Unit.GetComponent <EnemyM>(); GameObject model = enemy.Enemy_Models[info_.enemy_name]; Return_Unit.SetActive(true); model.SetActive(true); enemy.mModel = model; Enemy_Unit_List.Remove(Return_Unit); enemy.Enemy_info_update(info_); return(Return_Unit); }
public void Push_Pooling(GameObject unit, Enemy info_) { EnemyM enemy_ = unit.GetComponent <EnemyM>(); //모델 비활성 후 null enemy_.mModel.SetActive(false); enemy_.mModel = null; enemy_.Menemy_info.Enemy_delete(); //유닛 비활성 후 리스트 추가 unit.transform.parent = Enemy_poolFolder.transform; unit.SetActive(false); Enemy_Unit_List.Add(unit); }
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)); } }
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { player = GameObject.FindGameObjectWithTag("Player").transform; rb = animator.GetComponent <Rigidbody2D>(); enemyM = animator.GetComponent <EnemyM>(); }
//적 public void Shoot_Bullet(EnemyM origin, CharacterM target) { StartCoroutine(Bullet_Move(origin, target)); }
//전투 IEnumerator MinusHealth_c() { 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; } mTarget = MyTarget.GetComponent <EnemyM>(); now_node.bIsWall = false; while (true) { if (GameMGR._state == Board_Define.GAME_BATTLE) { // 타겟이 살아있는 경우 if (mTarget.Is_Dead == false) { now_node.bisCharacter = true; transform.LookAt(MyTarget.transform); if (MyTarget != null) { // 나의 공격력만큼 타겟의 체력을 깎아라 if (Current_MP >= 100) { Current_MP = 0; Skill_Switch = true; // 스킬 애니메이션 실행 while (true) { Set_Ani(Ani_Define.SKILL); if (Skill_Switch == false) { break; } yield return(null); } } else { Set_Ani(Ani_Define.ATTACK); Mana += Mcharacter_info.character_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.bisCharacter = false; MyTarget = null; While_Fight = null; Character_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; Character_state = Unit_Battle_State.READY; MyTarget = null; While_Fight = null; is_Unit_init = false; yield break; } } }