85 lines
2.4 KiB
C#
85 lines
2.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
public class SlimeAI : MonoBehaviour
|
|
{
|
|
|
|
Animator animator;
|
|
float playerDistance;
|
|
GameObject player;
|
|
int HP;
|
|
|
|
//[SerializeField]
|
|
//private UnityEvent onAttack;
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
animator = GetComponent<Animator>();
|
|
player = GameObject.FindWithTag("Player");
|
|
HP = 10;
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
playerDistance = Vector3.Distance(player.transform.position, transform.position);
|
|
if (playerDistance < 1.5) //Attack
|
|
{
|
|
animator.SetBool("EnemyInAttackRange", true);
|
|
animator.SetBool("EnemyInAggroRange", true);
|
|
animator.SetBool("EnemyInVisionRange", true);
|
|
Rotate();
|
|
}
|
|
else if (playerDistance < 5) //Chase
|
|
{
|
|
animator.SetBool("EnemyInAttackRange", false);
|
|
animator.SetBool("EnemyInAggroRange", true);
|
|
animator.SetBool("EnemyInVisionRange", true);
|
|
Rotate();
|
|
Move();
|
|
}
|
|
else if (playerDistance < 8) //Stare
|
|
{
|
|
animator.SetBool("EnemyInAttackRange", false);
|
|
animator.SetBool("EnemyInAggroRange", false);
|
|
animator.SetBool("EnemyInVisionRange", true);
|
|
Rotate();
|
|
}
|
|
else //Idle
|
|
{
|
|
animator.SetBool("EnemyInAttackRange", false);
|
|
animator.SetBool("EnemyInAggroRange", false);
|
|
animator.SetBool("EnemyInVisionRange", false);
|
|
}
|
|
if (HP <= 0)
|
|
{
|
|
animator.SetBool("Dead", true);
|
|
}
|
|
if (animator.GetBool("DeathComplete"))
|
|
{
|
|
print("asd");
|
|
Destroy(this.gameObject);
|
|
}
|
|
}
|
|
void Rotate()
|
|
{
|
|
// Rotate the forward vector towards the target direction by one step
|
|
Vector3 newDirection = Vector3.RotateTowards(transform.forward, player.transform.position - transform.position, 1.0f * Time.deltaTime, 0.0f);
|
|
|
|
// Calculate a rotation a step closer to the target and applies rotation to this object
|
|
transform.rotation = Quaternion.LookRotation(newDirection);
|
|
}
|
|
void Move()
|
|
{
|
|
transform.position += transform.forward * Time.deltaTime * 1.0f;
|
|
}
|
|
|
|
public void GetHit(int dmg)
|
|
{
|
|
HP -= dmg;
|
|
}
|
|
}
|