that my script `void Start()
{
col = GetComponent();
col.enabled = true;
Enable.heiad += 1;
agent = this.GetComponent();
Anim = GetComponent();
SNDSource = GetComponent();
player = GameObject.FindWithTag("Player").transform;
agent.speed = moveSpeed;
agent.acceleration = moveSpeed * 40;
agent.angularSpeed = 999;
}
private float nextAttack = 0.0f;
float attackInterval = 0.7f;
private float attackTimer = 0.8f;
void FixedUpdate()
{
hp = DamageHandler.CurrentHealth;
if (hp > 0 && isDeath == false)
{
Anim.SetBool("isDead", false);
if (Anim.GetCurrentAnimatorStateInfo(0).IsName("Spawn"))
return;
checkView();
if (playerChase && Anim.GetBool("isChasing"))
{
chasePlayer();
}
AnimatorStateInfo state = Anim.GetCurrentAnimatorStateInfo(0);
if (!state.IsName("Attack") && playerChase && reachedPathEnd())
{
if (!Anim.GetBool("attace"))
Anim.SetFloat("AttackType", Random.Range(0, 2));
Anim.SetBool("attace", true);
agent.Stop();
Anim.SetBool("isIdle", false);
Anim.SetBool("isChasing", false);
Anim.SetBool("isEating", false);
Attack();
playerChase = false;
}
if (state.IsName("Attack") && state.normalizedTime >= 1.50f)
{
chasePlayer();
}
}
else
{
playerChase = false;
Anim.SetBool("attace", false);
Anim.SetBool("isIdle", false);
Anim.SetBool("isChasing", false);
Anim.SetBool("isEating", false);
BroadcastMessage("ActivateR", SendMessageOptions.RequireReceiver);
col.enabled = false;
isDeath = true;
}
}
void checkView()
{
Vector3 direction = player.position - transform.position;
if (direction.magnitude >= 1.5f)
{
chasePlayer();
}
}
void chasePlayer()
{
Anim.SetBool("isChasing", true);
if (canRun)
Anim.SetBool("isRunning", true);
Anim.SetBool("attace", false);
Anim.SetBool("isIdle", false);
playerChase = true;
agent.SetDestination(player.position);
agent.Resume();
playSound(audioClips[1], false, false, true, true);
}
void playSound(AudioClip sound, bool loop, bool randomStart = false, bool checkSameClip = false, bool isPlayingCheck = false)
{
if (checkSameClip && SNDSource.clip == sound && !SNDSource.isPlaying)
return;
if (isPlayingCheck && SNDSource.clip == sound && SNDSource.isPlaying)
return;
SNDSource.clip = sound;
SNDSource.loop = loop;
if (randomStart)
SNDSource.time = Random.Range(0.0f, sound.length);
SNDSource.Play();
}
void Attack()
{
if (!meleeDistance())
return;
agent.updateRotation = false;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(agent.destination - transform.position, transform.up), 7.0f * Time.deltaTime);
agent.updateRotation = true;
if (attackTimer > 0)
attackTimer -= Time.deltaTime;
if (attackTimer < 0)
attackTimer = 0;
// only repeat attack after attackInterval
nextAttack = Time.time + attackInterval;
player.SendMessage("Damage", damage, SendMessageOptions.RequireReceiver);
}
bool reachedPathEnd()
{
if (!agent.pathPending && agent.remainingDistance <= agent.stoppingDistance)
{
if (!agent.hasPath || agent.velocity.sqrMagnitude == 0.0f)
{
return true;
}
return true;
}
return false;
}
bool meleeDistance()
{
if (Vector3.Distance(transform.position, player.position) < 1.5f)
{
return true;
}
return false;
}`