コード例 #1
0
    // 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();
        }));
    }
コード例 #2
0
    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);
    }