IEnumerator Summon_Object() { while (true) { if (!StageManager.GetInstance().Get_isPause()) { if (m_Object_Type == OBJECT_TYPE.ENEMY && StageManager.GetInstance().Get_is_FeverTime_On()) { yield return(null); } else if (m_Waited_Summon_Time >= m_Summon_Time) // 소환 시간이 되면 { switch (m_Object_Type) // 무작위 패턴을 불러온다. { case OBJECT_TYPE.ENEMY: m_Object_Pattern = StageManager.GetInstance().Random_Pick_One_Monster_Pattern(); break; case OBJECT_TYPE.OBSTACLE: m_Object_Pattern = StageManager.GetInstance().Random_Pick_One_Obstacle_Pattern(); break; case OBJECT_TYPE.ITEM: m_Object_Pattern = StageManager.GetInstance().Random_Pick_One_Item_Pattern(); break; } for (int i = 0; i < m_Object_Pattern.Count_of_Objects; ++i) { m_Temp_Object = Instantiate(m_Object_Prefabs[m_Object_Pattern.Object_Number[i] - 1]); // 객체를 인스턴싱. m_Temp_Object.transform.SetParent(m_Object_Lanes[m_Object_Pattern.Line_Number[i] - 1].transform); // 그 다음 해당 레인의 자식으로 설정. Vector3 lpos = Vector3.zero; lpos.x = m_Object_Pattern.X_Offset_Distance[i]; m_Temp_Object.transform.localPosition = lpos; // 포지션 설정. } m_Waited_Summon_Time = 0.0f; } else { m_Waited_Summon_Time += Time.deltaTime; } } yield return(null); } }
// ================================================================= // "각종 오브젝트 패턴 리스트"를 넘겨주는 메소드. public void Get_Object_Pattern_List(ref List <Object_Pattern_Structure> list, int Max_object_num_in_one_pattern, int object_type) { Object_Pattern_Structure pattern_Structure = new Object_Pattern_Structure(); // 구조체를 할당한다. int file_Line_Count = 0; switch (object_type) // 여기서 csv 파일 내부의 행 수를 세어두고, 개행 단위로 잘라놓는다. { case OBJECT_TYPE.ENEMY: file_Line_Count = Counting_EOF(m_Enemy_Pattern_CSV); m_stringList = m_Enemy_Pattern_CSV.text.Split('\n'); break; case OBJECT_TYPE.OBSTACLE: file_Line_Count = Counting_EOF(m_Obstacle_Pattern_CSV); m_stringList = m_Obstacle_Pattern_CSV.text.Split('\n'); break; case OBJECT_TYPE.ITEM: file_Line_Count = Counting_EOF(m_Item_Pattern_CSV); m_stringList = m_Item_Pattern_CSV.text.Split('\n'); break; } list.Clear(); // 리스트를 비워준다. int pattern_num = 1; int list_Index = 0; int x_multiple = 0; m_data = m_stringList[2].Split(','); // 한줄을 읽는다. for (int i = 2; i < file_Line_Count;) // 2 부터 시작 { pattern_Structure.Line_Number = new int[Max_object_num_in_one_pattern]; // 임시 구조체 내부 배열 할당_1 pattern_Structure.Object_Number = new int[Max_object_num_in_one_pattern]; // 임시 구조체 내부 배열 할당_2 pattern_Structure.X_Offset_Distance = new int[Max_object_num_in_one_pattern]; // 임시 구조체 내부 배열 할당_3 pattern_Structure.Pattern_Number = System.Convert.ToInt32(m_data[0]); // (1) 임시 구조체에 "패턴 번호" 저장. x_multiple = System.Convert.ToInt32(m_data[4]); // x축 오프셋 배수 설정. while (pattern_Structure.Pattern_Number == System.Convert.ToInt32(m_data[0])) // 동일한 패턴 번호인지 확인한다. { pattern_Structure.Line_Number[list_Index] = System.Convert.ToInt32(m_data[1]); // (2) 임시 구조체에 "라인 번호" 저장 pattern_Structure.Object_Number[list_Index] = System.Convert.ToInt32(m_data[2]); // (3) 임시 구조체에 "객체 번호" 저장 pattern_Structure.X_Offset_Distance[list_Index] = System.Convert.ToInt32(m_data[3]) * x_multiple; // (4) 임시 구조체에 "x축 오프셋" 저장 ++list_Index; // 인덱스를 1 증가시킨다. ++i; // 1줄 증가시킨다. if (i < file_Line_Count) // 마지막 줄인지를 검사한다. { m_data = m_stringList[i].Split(','); // 마지막줄이 아니라면 그 1줄을 읽어놓는다. } else { break; // 마지막 줄이라면 탈출. } } pattern_Structure.Count_of_Objects = list_Index; // 패턴 내의 객체 수를 기록. list_Index = 0; // 인덱스 초기화 ++pattern_num; // 다음 패턴 번호로 넘어간다. list.Add(pattern_Structure); // 리스트에 기록한다. } }