public IEnemyState DoState(NormalZombie enemy, Player player, ref float timeDelay) { if (enemy.agent == null) { Debug.Log("NULL"); return(null); } enemy.agent.isStopped = false; timeDelay = 1f; float dis = Vector3.Distance(enemy.transform.position, player.transform.position); if (dis < enemy.DistanceToChase) { enemy.agent.SetDestination(player.transform.position); return(enemy.chase); } //Nếu ở là type run thì không phải wander làm gì if (enemy.ZombieType != NormalZombie.TypeOfZombie.Walker) { enemy.anim.SetBool("Chasing", false); return(enemy.wander); } if (enemy.changeDirec) { Vector3 newPos = new Vector3(enemy.transform.position.x + Random.Range(-1, 1), enemy.transform.position.y, enemy.transform.position.z + Random.Range(-5, 5)); enemy.agent.SetDestination(newPos); enemy.changeDirec = false; } enemy.anim.SetBool("Chasing", true); return(enemy.wander); }
public NormalZombie createZombie(Vector2 pos) { NormalZombie zom = new NormalZombie(); MoveComponent moveCom = zom.GetComponent(typeof(MoveComponent)) as MoveComponent; moveCom.Position = pos; return zom; }
private void OnTriggerEnter(Collider other) { if (other.CompareTag("FreezeSpell")) { isFreeze = true; GetComponent <Animator>().enabled = false; //STOP BEHAVIOR NormalZombie nm = GetComponent <NormalZombie>(); StopCoroutine(nm.Couroutine_PathFiding); nm.agent = null; GetComponent <NavMeshAgent>().enabled = false; //stop path finding StartCoroutine(CurrentDestroy_SpawnContinue()); } }
private void Shot() { Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 direction = CalculateDirection(mousePosition - (Vector2)spawn.position, Stats.BulletSpread); RaycastHit2D raycastInfo = Physics2D.Raycast(spawn.position, direction, 100f, ~DontHit); //Debug.DrawLine(spawn.position, direction * 100, Color.yellow); if (raycastInfo.transform != null && raycastInfo.transform.CompareTag("Zombie")) { NormalZombie hitZombie = raycastInfo.collider.GetComponentInParent <NormalZombie>(); hitZombie.DamageZombie(Stats.Damage); Debug.Log("Zombie hit:" + hitZombie.name + ", HP: " + hitZombie.CurrentHealth); } Stats.BulletsLeft--; speakerShot.clip = Shooting; speakerShot.Play(); }
public IEnemyState DoState(NormalZombie enemy, Player player, ref float timeDelay) { if (enemy.agent == null) { return(null); } enemy.agent.isStopped = true; timeDelay = 0.2f; float dis = Vector3.Distance(enemy.transform.position, player.transform.position); if (dis < enemy.DistanceToChase) { return(enemy.chase); } else { enemy.anim.SetBool("Chasing", false); return(enemy.wander); } }
public IEnemyState DoState(NormalZombie enemy, Player player, ref float timeDelay) { if (enemy.agent == null) { return(null); } enemy.agent.isStopped = true; float dis = Vector3.Distance(enemy.transform.position, player.transform.position); AnimatorStateInfo currInfo = enemy.anim.GetCurrentAnimatorStateInfo(0); timeDelay = currInfo.length; enemy.anim.SetBool("Attack", true); // this animation include key event attack if (dis < enemy.DistanceToChase) { return(enemy.chase); //Tai enum attack , tức là lúc attack phải set des tại chỗ để tấn công , sau đó set chase vì nhân vật chắc chắc k di chuyen quá xa } else { return(enemy.idle); } }