public override void Intialize(AIGameManger _aIGameManger) { proprity = MediumProprity; DropProp = true; aIGameManger = _aIGameManger; SetObjInfo(); player = GameObject.Find("Player"); audioController = Role.GetComponent <AudioController>(); nav = Role.GetComponent <NavMeshAgent>(); targetPos = Role.transform.GetChild(2).GetComponent <CapsuleCollider>(); targetPos.transform.parent = null; ResetTargetPos(targetPos); ModelPrefab = Role.transform.GetChild(1).gameObject; m_anim = ModelPrefab.GetComponent <Animator>(); p_health = Role.GetComponent <PlayerHealth>(); p_health.stateController = this; p_health.Proprity = proprity; m_aiState = CombineEnemyState.IDLE; CanEscape = true; CanCombine = true; SetValue(); particileControl = Role.GetComponent <ParticileControl>(); //layersChecked = LayerMask.NameToLayer("Combine"); DropProp = true; RenderGamObjs = ModelPrefab.transform.GetComponentsInChildren <Renderer>(); EventManager.StartListening("DeadEnemy", DeadEnemy); }
public virtual void MotionChase(GameObject target) { if (target != null) { if (EnemyIsAround(AttackDistance, theTarget)) { Debug.Log("Enemy IS In AttackRange"); m_anim.SetBool("Walk", false); m_aiState = CombineEnemyState.ATTACK; } if (Vector3.Distance(Role.transform.position, target.transform.position) > ChaseDistance) { Debug.Log("Enemy TooFar"); theTarget = null; m_anim.SetBool("Walk", false); m_aiState = CombineEnemyState.IDLE; } else { m_anim.SetBool("Walk", true); nav.SetDestination(target.transform.position); } } else { theTarget = null; //m_anim.SetBool("Attack", false); m_anim.SetBool("Walk", false); m_aiState = CombineEnemyState.IDLE; } }
public virtual void MotionFindCombinePos(GameObject target) { if (originator != null) { GoTargetPos(target); } else { IsGroup = false; m_aiState = CombineEnemyState.IDLE; } }
protected void StartCombine() { currentCombineTime += Time.deltaTime; if (currentCombineTime > combineTime) { proprity = HeavyProprity; //changemodel ChangeModel(); DestoryOtherNeighbor(); p_health.Proprity = proprity; m_aiState = CombineEnemyState.IsCombine; } }
public virtual void CheckDoEscape() { if (CanEscape) { if (p_health.currenthp <= 5f) { Debug.Log(Role.name + "start escape"); //m_anim.SetBool("Attack", false); m_anim.SetBool("Walk", true); CanEscape = false; m_aiState = CombineEnemyState.Escape; } } }
protected virtual void CheckArrive() { for (int i = 0; i < 4; i++) { if (Vector3.Distance(neighbors[i].Role.transform.position, Role.transform.position) < 10 && !neighbors[i].IsArrive) { neighbors[i].IsArrive = true; arrivedNum += 1; } } if (arrivedNum > 4) { m_aiState = CombineEnemyState.StartCOMBINE; } }
public virtual void MotionAttack(GameObject target) { if (target == null) { Debug.Log("Enemy Is Dead"); theTarget = null; m_aiState = CombineEnemyState.IDLE; } else { if (currentTime > AttackTime) { Debug.Log("DoAttack 0.0"); currentTime = 0; Attack(); } else if (currentTime < AttackTime) { currentTime += Time.deltaTime; Vector3 backpos = Role.transform.position + target.transform.forward * 5; nav.SetDestination(backpos); if (audioController != null) { //audioController.StopSound(0); } } else if (currentTime < 0) { Vector3 backpos = Role.transform.position - target.transform.forward * 4.5f; nav.SetDestination(backpos); m_anim.SetBool("Walk", true); } Vector3 Dir = target.transform.position - Role.transform.position; Dir.y = 0; Role.transform.rotation = Quaternion.LookRotation(Dir); if (!EnemyIsAround(AttackDistance, target)) { Debug.Log("Start Chase Target"); m_aiState = CombineEnemyState.Chase; } } }
public virtual void MotionDefend(GameObject target) { m_anim.SetBool("Walk", true); nav.SetDestination(target.transform.position); if (CheckEnemy()) { if (EnemyIsAround(AttackDistance, theTarget)) { Debug.Log("Enemy IS In AttackRange"); m_anim.SetBool("Walk", false); m_aiState = CombineEnemyState.ATTACK; } else { Debug.Log("Wander See Enemy Start Chase"); m_aiState = CombineEnemyState.Chase; } } }
protected virtual void MotionIdle(float w_time) { if (CheckEnemy()) { if (EnemyIsAround(AttackDistance, theTarget) || TowerIsAround(30, theTarget)) { Debug.Log("Enemy IS In AttackRange"); m_aiState = CombineEnemyState.ATTACK; } else { Debug.Log("SeeEnemy Start Chase"); m_aiState = CombineEnemyState.Chase; } } currentWaitTime += Time.deltaTime; if (currentWaitTime > w_time) { Debug.Log("Start Wander"); //DigOutGround(); m_aiState = CombineEnemyState.Wander; } if (BeAttack) { BeAttack = false; if (theTarget != null) { Debug.Log("Beattack attacker's name = " + theTarget.name); } else { Debug.Log("Target is dead"); } m_aiState = CombineEnemyState.ATTACK; } }
private void CheckCombine() { if (CanCombine) { if (!IsGroup) { Checktimer += Time.deltaTime; if (Checktimer > checkInterval) { neighbors.Clear(); Debug.Log("Neighbor Clear!!"); Aroundcolliders = Physics.OverlapSphere(Role.transform.position, detectRadius, layersChecked); for (int i = 0; i < Aroundcolliders.Length; i++) { if (Aroundcolliders[i].CompareTag("CombineBefore")) { //neighbors.Add(Aroundcolliders[i].gameObject); Debug.Log("SEE PARNER" + ": " + Aroundcolliders[i].transform.name); theTarget = Aroundcolliders[i].transform.gameObject; } } Checktimer = 0; Debug.Log("Neighbor Num is" + Aroundcolliders.Length); } if (Aroundcolliders.Length >= 4) { for (int i = 0; i < Aroundcolliders.Length; i++) { Aroundcolliders[i].transform.GetComponent <ObjInfo>().m_ai.IsGroup = true; Debug.Log(Aroundcolliders[i].name); Aroundcolliders[i].transform.GetComponent <ObjInfo>().m_ai.nav.SetDestination(this.Role.transform.position); if (Aroundcolliders[i].gameObject != Role.gameObject) { //Aroundcolliders[i].gameObject.GetComponent<StateController>().Model.GetComponent<Animator>().SetBool("Walk", true); GameObject.Destroy(Aroundcolliders[i].gameObject, Mathf.Abs(Vector3.Distance(Aroundcolliders[i].transform.position, Role.transform.position)) / (nav.speed * 2)); //Aroundcolliders[i].gameObject.GetComponent<StateController>().ReleaseWayPoints(); //Debug.Log(" DD " + Mathf.Abs(Vector3.Distance(Aroundcolliders[i].transform.position, controller.transform.position)) / controller.enermyStats.moveSpeed); //Debug.Log(" DD " + Mathf.Abs(Vector3.Distance(Aroundcolliders[i].transform.position, controller.transform.position)) / (controller.enermyStats.moveSpeed * 2)); //Debug.Log(" DD " + Mathf.Abs(Vector3.Distance(Aroundcolliders[i].transform.position, controller.transform.position)) / controller.enermyStats.moveSpeed / 2); //Debug.Log(" DD " + Mathf.Abs(Vector3.Distance(Aroundcolliders[i].transform.position, controller.transform.position)) / 2); } else { nav.Stop(); } } //return true; Role.tag = "CombineAfter"; m_aiState = CombineEnemyState.StartCOMBINE; } else { Debug.Log("false" + neighbors.Count); //return false; } } else { Debug.Log("IsGroup Cant Combine again"); } } }
//徘徊 public virtual void MotionWander(CapsuleCollider t, float wd_time) { //currentWanderTime += Time.deltaTime; //if (currentWanderTime > wd_time) //{ // currentWaitTime = 0; // currentWanderTime = 0; // m_anim.SetBool("Walk", false); // m_aiState = CombineEnemyState.IDLE; //} //else //{ // nav.SetDestination(t.gameObject.transform.position); // if (Vector3.Distance(targetPos.transform.position, Role.transform.position) < 2) // { // ResetTargetPos(targetPos); // m_anim.SetBool("Walk", false); // m_aiState = CombineEnemyState.IDLE; // } // if (CheckEnemy()) // { // if (EnemyIsAround(AttackDistance, theTarget)) // { // Debug.Log("Enemy IS In AttackRange"); // m_anim.SetBool("Walk", false); // m_aiState = CombineEnemyState.ATTACK; // } // else // { // Debug.Log("Wander See Enemy Start Chase"); // m_aiState = CombineEnemyState.Chase; // } // } // m_anim.SetBool("Walk", true); //} //-------------- currentWaitTime = 0; nav.SetDestination(t.gameObject.transform.position); if (Vector3.Distance(targetPos.transform.position, Role.transform.position) <= StopDistance) { ResetTargetPos(targetPos); m_anim.SetBool("Walk", false); m_aiState = CombineEnemyState.IDLE; } if (CheckEnemy()) { if (EnemyIsAround(AttackDistance, theTarget)) { Debug.Log("Enemy IS In AttackRange"); m_anim.SetBool("Walk", false); //CallParner(); m_aiState = CombineEnemyState.ATTACK; } else { Debug.Log("Wander See Enemy Start Chase"); m_aiState = CombineEnemyState.Chase; } } m_anim.SetBool("Walk", true); }
protected override void StateAction() { if (m_objInfo.IsDead == true) { m_aiState = CombineEnemyState.DEAD; } m_objInfo.State = m_aiState.ToString(); switch (m_aiState) { case CombineEnemyState.Wait: { nav.Stop(); nav.ResetPath(); targetPos.transform.position = Role.transform.position + Role.transform.forward * 3; SetCombinePos(); CheckArrive(); } break; case CombineEnemyState.IDLE: { //1 MotionIdle(WaitTime); } break; case CombineEnemyState.Wander: { MotionWander(targetPos, wanderTime); } break; case CombineEnemyState.WALK: { //1 MotionWalk(targetPos.gameObject); } break; case CombineEnemyState.Chase: { MotionChase(theTarget); } break; case CombineEnemyState.ATTACK: { //1 MotionAttack(theTarget); } break; case CombineEnemyState.FindCombinePos: { MotionFindCombinePos(targetPos.gameObject); } break; case CombineEnemyState.StartCOMBINE: { StartCombine(); } break; case CombineEnemyState.IsCombine: { // m_aiState = CombineEnemyState.ATTACK; } break; case CombineEnemyState.CombineOther: { aIGameManger.ReleaseCombineEnemyAI(this, .5f); } break; case CombineEnemyState.DEFEND: { //1 MotionDefend(targetPos.transform.gameObject); } break; case CombineEnemyState.Avoid: { if (currentAvoidTime < AvoidTime) { MotionAvoid(theTarget); } else { currentAvoidTime = 0; m_aiState = CombineEnemyState.IDLE; } } break; case CombineEnemyState.Escape: { MotionEscape(theTarget); } break; case CombineEnemyState.DEAD: { //1 MotionDead(); } break; default: break; } }