Помогите решить задачу с совой
У меня есть задача: создать моба сова, которая при запуске будет двигаться (лететь) в сторону объекта Player и убавлять от него по 5 хп за каждую атаку. После каждой атаки она будет отлетать по диагонали от объекта Player. Например на: y - 2, x - 2 (это максимально будет то, на сколько сова сможет отлетать.), чтобы данный моб был виден на экране у пользователя. После отлета разумеется она будет заново к нему приближаться убавлять по 5 хп и.т.д до бесконечности, пока игрок просто не убежит от нее.
PlayerHealth.cs (хп игрока): Код:
using UnityEngine;
public class PlayerHealth : MonoBehaviour
{
public int maxHealth = 100; // Максимальное хп
public int currentHealth; // Текущее хп
void Start()
{
currentHealth = maxHealth;
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
Debug.Log("Player took damage: " + damage + ". Current health: " + currentHealth);
if (currentHealth <= 0)
{
Die();
}
}
public bool IsAlive()
{
return currentHealth > 0;
}
private void Die()
{
Debug.Log("Player has died.");
gameObject.SetActive(false);
}
}
OwlMob.cs (скрипт на самого моба: сова): Код:
using UnityEngine;
public class OwlMob : MonoBehaviour
{
public float speed = 2f; // Скорость движения совы
public float attackRange = 1.5f; // Радиус, в котором сова может атаковать игрока
public int damage = 5; // Урон, который наносит сова
private Transform player;
private PlayerHealth playerHealth;
private Rigidbody rb;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
if (player != null)
{
playerHealth = player.GetComponent<PlayerHealth>();
}
else
{
Debug.LogError("Player not found! Make sure the player has the tag 'Player'.");
}
rb = GetComponent<Rigidbody>();
if (rb != null)
{
rb.isKinematic = true;
}
}
void Update()
{
if (player != null)
{
MoveTowardsPlayer();
}
}
private void MoveTowardsPlayer()
{
Vector3 direction = (player.position - transform.position).normalized;
Vector3 newPosition = transform.position + direction * speed * Time.deltaTime;
transform.position = newPosition;
float distanceToPlayer = Vector3.Distance(transform.position, player.position);
if (distanceToPlayer < attackRange)
{
AttackPlayer();
}
}
private void AttackPlayer()
{
if (playerHealth != null)
{
playerHealth.TakeDamage(damage);
Debug.Log("Owl attacked the player!");
}
}
}
Помогите пожалуйста кто знает