void Awake() { healthPoint = playerhealth; target = GameObject.FindGameObjectWithTag("Enemy").transform; character = GameObject.FindGameObjectWithTag("character").transform; enemyState = ENEMYSTATE.IDLE; characterController = GetComponent <CharacterController>(); if (animationeffect) { anima = GetComponent <Animation>(); } else { anim = GetComponent <Animator>(); } enemystate = target.GetComponent <enemymode>(); }
// Update is called once per frame void Update() { if (Input.GetKey(KeyCode.Z)) { enemyState = ENEMYSTATE.MOVE; } else if (Input.GetKey(KeyCode.X)) { enemyState = ENEMYSTATE.ESCAPE; } Vector3 dir = target.position - transform.position; if (GameObject.FindGameObjectWithTag("Enemy") != null) { target = GameObject.FindGameObjectWithTag("Enemy").transform; } else { enemyState = ENEMYSTATE.KILL; } if (target != null) { enemystate = target.GetComponent <enemymode>(); } if (!animationeffect) { anim.SetBool("walking", walk); } if (healthPoint <= 0 && enemyState != ENEMYSTATE.DEAD) { enemyState = ENEMYSTATE.DEAD; } switch (enemyState) { case ENEMYSTATE.IDLE: { stateTime += Time.deltaTime; walk = false; if (animationeffect) { anima.CrossFade("aelf_pet_idle"); } if (stateTime > idleStateMaxTime) { stateTime = 0.0f; enemyState = ENEMYSTATE.MOVE; } } break; case ENEMYSTATE.MOVE: { walk = true; if (animationeffect) { anima.CrossFade("aelf_move"); } float distance = (target.position - transform.position).magnitude; if (distance < attackRange) { enemyState = ENEMYSTATE.ATTACK; stateTime = attackStateMaxTime; } else { dir = target.position - transform.position; //Debug.Log(transform.position); // Debug.Log(dir); dir.y = 0.0f; dir.Normalize(); characterController.SimpleMove(dir * moveSpeed); transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotationSpeed * Time.deltaTime); } } break; case ENEMYSTATE.ATTACK: { stateTime += Time.deltaTime; dir = target.position - transform.position; dir.y = 0.0f; dir.Normalize(); transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotationSpeed * Time.deltaTime); if (stateTime > attackStateMaxTime) { if (animationtime == 0) { if (animationeffect) { anima.CrossFade("aelf_hit"); } else { anim.SetTrigger("Isattack_tiger"); } } animationtime += Time.deltaTime; if (animationtime > animationplay) { if (animationeffect) { anima.CrossFade("aelf_pet_idle"); } enemystate.DamageByEnemy(playerpower); animationtime = 0f; stateTime = 0.0f; } walk = false; } float distance = (target.position - transform.position).magnitude; if (distance > attackRange || target == null) { enemyState = ENEMYSTATE.IDLE; } } break; case ENEMYSTATE.KILL: { if (animationeffect == false) { walk = false; } else { anima.CrossFade("aelf_pet_idle"); } } break; case ENEMYSTATE.DEAD: { if (deadtime == 0) { if (!animationeffect) { anim.SetTrigger("Die"); } } deadtime += Time.deltaTime; //Destroy(gameObject); if (animationeffect) { transform.Rotate(0f, 0f, -1f); transform.Translate(-Vector3.up * 8 * Time.deltaTime); } if (deadtime > 0.6f) { Destroy(gameObject); } enemyState = ENEMYSTATE.NONE; } break; case ENEMYSTATE.ESCAPE: { walk = true; if (animationeffect) { anima.CrossFade("aelf_move"); } escape = character.position; escape.z -= 2; dir = escape - transform.position; if (dir.magnitude > 2f) { dir.y = 0.0f; dir.Normalize(); characterController.SimpleMove(dir * moveSpeed); transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotationSpeed * Time.deltaTime); } } break; } }