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;
}
}
↧