Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: MatiasBoyer en Julio 23, 2015, 01:02:29 AM

Título: Script enemigo BÁSICO
Publicado por: MatiasBoyer en Julio 23, 2015, 01:02:29 AM
Hola a todos,
Soy nuevo en esto del scripting y estaba probando hacer un script enemigo al que, al estar más cerca de el nos empiece a ***guir.Pero hay un problema, al estar lejos de él, se va acercando muy lento, y al irnos acercando aumenta su velocidad.El script está escrito en JS y quizá tenga horrores en él pero almenos lo intente :s
#pragma strict
var Jugador: Transform;
var VelocidadEnemigo = 4;
var DistanciaMin = 5;
var DistanciaMax = 10;

function Update(){
  transform.LookAt(Jugador);
    if(Vector3.Distance(transform.position, Jugador.position) <= DistanciaMin){
      transform.position + transform.forward * 0;
    } else
      if(Vector3.Distance(transform.position, Jugador.position) >= DistanciaMin){
        transform.position + transform.forward * VelocidadEnemigo*Time.deltaTime;
  }
}
 Gracias a todos.
Título: Script enemigo BÁSICO
Publicado por: GSG3D en Julio 23, 2015, 01:28:38 AM
Si el actuador se inicia cuando el jugador esta cerca solo es necesario esto...
if(Vector3.Distance(transform.position, Jugador.position) < DistanciaMax) //Cuando esta dentro del rango
O DistanciaMin segun tu logicaY luego utilza....siguiendo lo mismo.
transform.LookAt(Jugador); //"miramos" hacia el objetivo

trasform.Traslate(Vector3.forward * VelocidadEnemigo * Time.deltaTime); //nos movemos
El codigo es muy basico, y funciona en determinados casos, pero para empezar bastara.
Título: Script enemigo BÁSICO
Publicado por: MatiasBoyer en Julio 23, 2015, 01:47:23 AM
[quote author=GSG3D" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15774" data-ipsquote-contentcommentid="100612">Si el actuador se inicia cuando el jugador esta cerca solo es necesario esto...
if(Vector3.Distance(transform.position, Jugador.position) < DistanciaMax) //Cuando esta dentro del rango
O DistanciaMin segun tu logicaY luego utilza....siguiendo lo mismo.
transform.LookAt(Jugador); //"miramos" hacia el objetivo.Traslate(Vector3.forward * VelocidadEnemigo * Time.deltaTime); //nos movemos
El codigo es muy basico, y funciona en determinados casos, pero para empezar bastara.[/quote]Aún así sigo teniendo un problema, que es que estando lejos del cubo (por ahora es un cubo) se mueve muy lentamente y al acercarnos se acelera.

Te dejo un gif que acabo de grabar en mi pc.https://i.imgur.com/rmpo1vb.gif (https://i.imgur.com/rmpo1vb.gif)
Título: Script enemigo BÁSICO
Publicado por: GSG3D en Julio 23, 2015, 04:24:49 AM
Utiliza Debug.Log("Moviendose") dentro del if para saber cuando se esta ejecutando, deberia no tener que pasar eso.
Ademas para utilizar DistaciaMin haz lo siguiente:
var distance = Vector3.Distance(transform.position, Jugador.position);
if((distance > DistanceMin) && (distance < DistanceMax))
{
    Debug.Log(distance);
    Debug.Log("Moviendose");
    transform.LookAt(Jugador);
    transform.Traslate(Vector3.forward * VelocidadaEnemigo * Time.deltaTime);
}
Ademas ve si no tienes un script demas, o algo que lo modifque, tambien podrias verlo desactivando tal script para ver el problema, suerte!
Título: Script enemigo BÁSICO
Publicado por: Antonio en Julio 23, 2015, 11:31:22 AM
¿Puede ser algo del rozamiento del rigidbody? (Parece que se acelera cuando levanta la cabeza ¿no?). Si pones el origen del player a la misma altura que el origen del enemigo, ¿también se acelera?.