Genel

TOPDOWN CONTROLLER KOD

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TopDownController : MonoBehaviour
{
    [Header("Hareket Ayarları")]
    public float moveSpeed = 5f;         // Karakterin hareket hızı
    public float rotationSpeed = 720f;   // Döndürme hızı (derece/saniye)

    void Update()
    {
        // Input.GetAxisRaw kullanarak doğrudan ve anlık giriş değerlerini alıyoruz.
        float horizontal = Input.GetAxisRaw("Horizontal");
        float vertical = Input.GetAxisRaw("Vertical");

        // Hareket yönünü oluştur (X: sağ-sol, Z: ileri-geri; Y ekseni sabit 0)
        Vector3 direction = new Vector3(horizontal, 0f, vertical);

        // Eğer yeterli bir hareket girişi varsa (küçük titreşimleri önlemek için)
        if (direction.magnitude >= 0.1f)
        {
            // Hedef yönün açısını hesapla (Z eksenini referans alarak)
            float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg;

            // Mevcut açıyı, hedef açıya doğru yumuşakça döndür.
            float angle = Mathf.LerpAngle(transform.eulerAngles.y, targetAngle, rotationSpeed * Time.deltaTime);
            transform.rotation = Quaternion.Euler(0f, angle, 0f);

            // Karakteri, kendi ileri yönü (transform.forward) doğrultusunda hareket ettir.
            transform.position += transform.forward * moveSpeed * Time.deltaTime;
        }
        // Hareket girişi olmadığında hiçbir işlem yapılmaz, mevcut rotasyon korunur.
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyAI : MonoBehaviour
{
    public float speed;
    [SerializeField] GameObject target;
    [SerializeField] Transform[] patrolPoints;
    int currentIndex = 0;
    bool isChase;
    bool wasChasing;
    private void Start()
    {
        ChooseNewPatrolPoint();

    }

    private void Update()
    {
        float playerDistance = Vector3.Distance(transform.position, target.transform.position);
        if (playerDistance < 5f)
        {
            isChase = true;
        }else
        {
            isChase = false;
        }

        if (isChase)
        {
            transform.position = Vector3.MoveTowards(transform.position, target.transform.position, speed * Time.deltaTime);
        }
        else
        {
           if(wasChasing != isChase)
            {
                ChooseNewPatrolPoint();
            }
            Patrol();
           
        }

        wasChasing = isChase;
    }

    void ChooseNewPatrolPoint()
    {
        int newIndex = Random.Range(0, patrolPoints.Length);
        currentIndex = newIndex;
    }

    void Patrol()
    {
        transform.position = Vector3.MoveTowards(transform.position, patrolPoints[currentIndex].position, speed * Time.deltaTime);

        float distance = Vector3.Distance(transform.position, patrolPoints[currentIndex].position);
        if (distance < 0.5f)
        {
            ChooseNewPatrolPoint();
        }

        Debug.Log(currentIndex);
    }

}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


error: Content is protected !!