void AttackUpdate() { float distance = Vector3.Distance(target.transform.position, transform.position); if (distance > attackRange + 0.5f) { state = goblinState.move; } }
IEnumerator WaitUpdate() { state = goblinState.wait; float waitTime = Random.Range(1.0f, 3.0f); yield return(new WaitForSeconds(waitTime)); state = goblinState.idle; }
void MoveUpdate() { Vector3 diff = Vector3.zero; Vector3 lookAtPositon = Vector3.zero; switch (state) { case goblinState.patrol: if (target.transform.position != Vector3.zero) { diff = target.transform.position - transform.position; if (diff.magnitude > attackRange) { StartCoroutine(WaitUpdate()); return; } lookAtPositon = new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z); } break; case goblinState.move: if (target != null) { diff = target.transform.position - transform.position; if (diff.magnitude < attackRange) { state = goblinState.attack; return; } lookAtPositon = new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z); } break; } Vector3 direction = diff.normalized; direction = new Vector3(direction.x, 0, direction.z); Vector3 moveAmount = direction * speed * Time.deltaTime; transform.Translate(moveAmount, Space.World); transform.LookAt(lookAtPositon); }
private void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("Player Attack")) { HP -= 10; if (HP > 0) { anim.CrossFade(damage.name); //Instantiate(damageEffect, other.transform.position, Quaternion.identity); DamageTweenEffect(); } else { state = goblinState.die; } } }
private void Start() { state = goblinState.idle; anim = GetComponent <Animation>(); anim[idle.name].wrapMode = WrapMode.Loop; anim[move.name].wrapMode = WrapMode.Loop; anim[attack.name].wrapMode = WrapMode.Once; anim[damage.name].wrapMode = WrapMode.Once; anim[damage.name].layer = 10; anim[die.name].wrapMode = WrapMode.Once; anim[die.name].layer = 10; AddAnimationEvent(attack, "OnAttackFinish"); AddAnimationEvent(damage, "OnDamageFinish"); AddAnimationEvent(die, "OnDieFinish"); skinnedMeshRenderer = transform.Find("body").GetComponent <SkinnedMeshRenderer>(); }
void IdleUpdate() { if (target == null) { Vector3 randomTarget = new Vector3(transform.position.x + Random.Range(-10.0f, 10.0f), transform.position.y + 1000.0f, transform.position.z + Random.Range(-10.0f, 10.0f)); Ray ray = new Ray(randomTarget, Vector3.down); RaycastHit raycastHit = new RaycastHit(); if (Physics.Raycast(ray, out raycastHit, Mathf.Infinity)) { randomTarget.y = raycastHit.point.y; } target.transform.position = randomTarget; state = goblinState.patrol; } else { state = goblinState.move; } }
void OnSetTarget(GameObject obj) { target = obj; state = goblinState.move; }