Estoy haciendo un juego donde el personaje y Npcs son sprites, pero el resto de cosas son elementos 3D.
Lo que quiero es que los enemigos me persigan y para ello he intentado adaptar un script que lo hace pero en 2D, os dejo el script y más abajo un enlace de como se comporta el personaje, a ver si me podéis echar una mano, intuyo que hay que cambiar algunas cosillas para que funcione en los ejes tan particulares que tiene este juego.
EJEMPLO DEL RAYCAST (https://i.gyazo.com/8d6b772d13217da55a8828ea928e534d.mp4)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour {
// Variables para gestionar el radio de visión, el de ataque y la velocidad
public float visionRadius;
public float attackRadius;
public float speed;
// Variable para guardar al jugador
GameObject player;
// Variable para guardar la posición inicial
Vector3 initialPosition;
// Animador y cuerpo cinemático con la rotación en Z congelada
Animator anim;
Rigidbody rb3d;
void Start () {
// Recuperamos al jugador gracias al Tag
player = GameObject.FindGameObjectWithTag("Player");
// Guardamos nuestra posición inicial
initialPosition = transform.position;
anim = GetComponent<Animator>();
rb3d = GetComponent<Rigidbody>();
}
void Update () {
// Por defecto nuestro target siempre será nuestra posición inicial
Vector3 target = initialPosition;
// Comprobamos un Raycast del enemigo hasta el jugador
RaycastHit2D hit = Physics2D.Raycast(
transform.position,
player.transform.position - transform.position,
visionRadius,
1 << LayerMask.NameToLayer("Default")
// Poner el propio Enemy en una layer distinta a Default para evitar el raycast
// También poner al objeto Attack y al Prefab Slash una Layer Attack
// Sino los detectará como entorno y se mueve atrás al hacer ataques
);
// Aquí podemos debugear el Raycast
Vector3 forward = transform.TransformDirection(player.transform.position - transform.position);
Debug.DrawRay(transform.position, forward, Color.red);
// Si el Raycast encuentra al jugador lo ponemos de target
if (hit.collider != null) {
if (hit.collider.tag == "Player"){
target = player.transform.position;
}