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);
}
}