Помогите решить задачу с совой

У меня есть задача: создать моба сова, которая при запуске будет двигаться (лететь) в сторону объекта 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!");
        }
    }
}

Помогите пожалуйста кто знает


Ответы (0 шт):