// Start is called before the first frame update void Start() { var json = Resources.Load <TextAsset>("Data/defense_monster_data").text; var arr = JsonConvert.DeserializeObject <DefenseMonsterData[]>(json); testMonster.Init(Vector3.zero, arr[0], fence, deMaterial); testMonster.hp = 50000; this.anim = this.gameObject.GetComponentInChildren <Animator>(); this.effectEvents = this.GetComponentInChildren <EffectEvents>(); this.effectEvents.rangeMonstersAction = (listMonsters) => { for (int i = 0; i < listMonsters.Count; i++) { int capt = i; listMonsters[capt].gameObject.GetComponent <TestMonster>().Hit(2); Debug.Log($"맞냐? {listMonsters.Count} "); } }; this.btnAttack.onClick.Add(new EventDelegate(() => { Attack(); })); }
IEnumerator SpawnMonsterImpl(int index, WaveData waveData) { var data = DataManager.GetInstance().dicMonsterData[waveData.monster_id]; GameObject prefab = (GameObject)(from obj in App.instance.resource where obj.name == data.prefab_name select obj).FirstOrDefault(); EasyObjectPool.instance.MakePoolInfo(data.name, prefab); var monsterPosition = new Vector3(waveData.x, waveData.y, waveData.z); for (int i = 0; i < waveData.count; i++) { GameObject go = EasyObjectPool.instance.GetObjectFromPool(data.name, monsterPosition, Quaternion.identity); TestMonster monster = go.GetComponent <TestMonster>(); if (monster == null) { monster = go.AddComponent <TestMonster>(); } var destination_x = UnityEngine.Random.Range(waveData.destination_x - 1, waveData.destination_x + 1); var destination = new Vector3(destination_x, waveData.destination_y, waveData.destination_z); monster.Init(destination, DataManager.GetInstance().dicMonsterData[waveData.monster_id], fence, whiteMaterial); monster.monsterAttackEvent.monsterAttackAction = () => { fence.Hit(monster.data.damage); }; monster.ChangeBehavior(TestMonster.eMonsterState.MOVE); listMonsters.Add(monster); monster.OnCompleteMove = () => { monster.previousState = monster.currentState; monster.ChangeBehavior(TestMonster.eMonsterState.FOLLOW); }; monster.OnCompleteKnockBack = () => { if (monster.previousState == TestMonster.eMonsterState.MOVE) { monster.previousState = TestMonster.eMonsterState.FOLLOW; } monster.ChangeBehavior(monster.previousState); monster.previousState = monster.currentState; }; monster.OnCompleteStun = () => { monster.ChangeBehavior(monster.previousState); monster.previousState = monster.currentState; }; monster.OnMonsterDie = () => { //Debug.Log($"OnMonsterDie{monster.name}"); monster.previousState = monster.currentState; monster.ChangeBehavior(TestMonster.eMonsterState.DIE); bool isSuccess = listMonsters.Remove(monster); //Debug.Log($"isSuccess: {isSuccess}"); OnMonsterRemovedFromList(); }; monster.OnMonsterDead = () => { monster.previousState = monster.currentState; monster.ChangeBehavior(TestMonster.eMonsterState.IDLE); EasyObjectPool.instance.ReturnObjectToPool(monster.gameObject); }; monster.OnDisplayHudText = (damage) => { DisplayHudText(uiRoot, monster.transform.position, damage); }; yield return(new WaitForSeconds(waveData.term)); } OnStopSpawnMonster(index); }