IEnumerator IdleImpl() { targetedMonster = null; var time = 0.5f; //Debug.Log("IdleImpl"); while (true) { this.animator.Play($"{data.prefab_name}_Idle"); //Debug.Log("아이들링"); //var runtimeAC = this.animator.runtimeAnimatorController; //for (int i = 0; i < runtimeAC.animationClips.Length; i++) //{ // //Debug.Log($"{data.prefab_name}----------{runtimeAC.animationClips[i].name}"); // //Debug.Log(runtimeAC.animationClips[0].name); // if (runtimeAC.animationClips[i].name == $"{data.prefab_name}_Idle") // { // time = runtimeAC.animationClips[i].length; // break; // } //} //Debug.Log($"Commander_IdleTime:{time}"); yield return(new WaitForSeconds(calculatedAspd)); OnIdleComplete(); break; } }
IEnumerator SearchImpl() { if (listMonsters.Count == 0) { ChangeBehavior(eHeroState.IDLE); } var layerMask = 1 << LayerMask.NameToLayer("Monster") | 1 << LayerMask.NameToLayer("Obstacle"); while (true) { this.animator.Play("Search", -1, 0); //Debug.Log("Search While문"); //Debug.Log($"{listMonsters.Count}"); if (listMonsters.Count > 0) { var shortDis = Vector3.Distance(gameObject.transform.position, listMonsters[0].transform.position); // 첫번째를 기준으로 잡아주기 var foundMonster = listMonsters[0]; // 첫번째를 먼저 foreach (var monster in listMonsters) { float dis = Vector3.Distance(gameObject.transform.position, monster.transform.position); if (dis < shortDis) // 위에서 잡은 기준으로 거리 재기 { foundMonster = monster; shortDis = dis; } } //Debug.LogFormat("찾은 몬스터 {0}", foundMonster.data.prefab_name); //OnTargetFound(); var dir = foundMonster.transform.position - this.transform.position; var dis2 = dir.magnitude; RaycastHit hit; Debug.DrawRay(this.transform.position, dir * data.atkRange, Color.red, 1f); if (Physics.Raycast(this.transform.position, dir, out hit, data.atkRange, layerMask)) { //Debug.Log($"{hit.transform.gameObject.name} 부딪힌녀석"); //Debug.Log($"dis:{dis2}/atkRange:{data.atkRange}"); if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Monster")) { //Debug.Log($"{hit.transform.gameObject.name} 부딪힌녀석2222222222222"); this.targetedMonster = hit.transform.gameObject.GetComponentInChildren <TestMonster>(); OnTargetFound(); break; } } //Debug.Log(hit.transform.gameObject.name); } yield return(null); } }
public void LoadMonster(TestMonster data) { if (m_ActiveMonster != null) { Destroy(m_ActiveMonster); Resources.UnloadUnusedAssets(); } m_ActiveMonsterData = data; StartCoroutine(LoadMonster(data.Prefab)); m_LastSpell = null; }
IEnumerator IdleImpl() { targetedMonster = null; //Debug.Log("IdleImpl"); while (true) { this.animator.Play($"{data.anim_name}_Idle"); //Debug.Log("아이들링"); var idleTime = FormulaCalculator.GetInstance().CalculateIdleTime(this.calculatedAspd, this.bySelfDecreaedDelay, this.byOtherDecreasedDelay); Debug.Log($"idleTime: {idleTime}"); yield return(new WaitForSeconds(idleTime)); OnIdleComplete(); break; } }
private void TabMonsterSpell() { TestMonster activeMonsterData = m_Main.ActiveMonsterData; if (activeMonsterData == null || activeMonsterData.AvailableSpells == null || activeMonsterData.AvailableSpells.Length == 0) { return; } GUILayout.Label("Target", new GUILayoutOption[0]); m_TargetIndex = (ETarget)GUILayout.SelectionGrid((Int32)m_TargetIndex, m_PartySelection, m_PartySelection.Length, (GUILayoutOption[])null); m_MonsterSpellView = GUILayout.BeginScrollView(m_MonsterSpellView, new GUILayoutOption[] { GUILayout.MaxHeight(200f) }); foreach (TestSpell testSpell in activeMonsterData.AvailableSpells) { if (GUILayout.Button(testSpell.Name, new GUILayoutOption[0])) { m_Main.MonsterCastSpell(m_TargetIndex, testSpell); } } GUILayout.EndScrollView(); }
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); }