Quantcast
Channel: Questions in topic: "enemy"
Viewing all articles
Browse latest Browse all 1488

How to implement proper enemy follow and shoot

$
0
0
Hi i dont know to how to implent something like a follow and wait and shoot enemy. i add make ammo and its directions but dont know to to implement this type of enemy what i need to add ? please help me my code: using System.Collections; using System.Collections.Generic; using UnityEngine; public class KKKshooter : Enemy { public Rigidbody2D myRigidbody; public Transform target; public float chaseRadius; public float attackRadius; public Transform homePosition; public Animator anim; public GameObject magnum; // Use this for initialization void Start() { currentState = EnemyState.idle; myRigidbody = GetComponent(); anim = GetComponent(); target = GameObject.FindWithTag("Player").transform; } // Update is called once per frame void FixedUpdate() { CheckDistance(); } public virtual void CheckDistance() { if (Vector3.Distance(target.position, transform.position) <= chaseRadius&& Vector3.Distance(target.position, transform.position) > attackRadius) { if (currentState == EnemyState.idle || currentState == EnemyState.run&& currentState != EnemyState.stagger) { Vector3 temp = Vector3.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime); changeAnim(temp - transform.position); myRigidbody.MovePosition(temp); ChangeState(EnemyState.run); anim.SetBool("run", true); } } else if (Vector3.Distance(target.position, transform.position) > chaseRadius) { anim.SetBool("run", false); } } public void SetAnimFloat(Vector2 setVector) { anim.SetFloat("moveX", setVector.x); anim.SetFloat("moveY", setVector.y); } public void changeAnim(Vector2 direction) { if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y)) { if (direction.x > 0) { SetAnimFloat(Vector2.right); } else if (direction.x < 0) { SetAnimFloat(Vector2.left); } } else if (Mathf.Abs(direction.x) < Mathf.Abs(direction.y)) { if (direction.y > 0) { SetAnimFloat(Vector2.up); } else if (direction.y < 0) { SetAnimFloat(Vector2.down); } } else if (Vector3.Distance(target.position, transform.position) <= chaseRadius && Vector3.Distance(target.position,transform.position) <= attackRadius) { anim.SetBool("run", false); } } public void ChangeState(EnemyState newState) { if (currentState != newState) { currentState = newState; } } Vector3 ChooseAmmoDirection() { float temp = Mathf.Atan2(anim.GetFloat("moveY"), anim.GetFloat("moveX")) * Mathf.Rad2Deg; return new Vector3(0, 0, temp); } private void Makeammo() { Vector2 temp = new Vector2(anim.GetFloat("moveX"), anim.GetFloat("moveY")); EnemyAmmo Magnum = Instantiate(magnum, transform.position, Quaternion.identity).GetComponent(); Magnum.Setup(temp, ChooseAmmoDirection()); } private IEnumerator AttackCo() { anim.SetBool("attack", true); currentState = EnemyState.shooting; yield return new WaitForSeconds(.5f); Makeammo(); anim.SetBool("attack", false); yield return new WaitForSeconds(.5f); currentState = EnemyState.run; } }

Viewing all articles
Browse latest Browse all 1488

Trending Articles