Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

IA de un enemigo que se detenga antes de llegar a el

Iniciado por Reedbed, Febrero 06, 2014, 04:04:46 AM

Tema anterior - Siguiente tema
Febrero 06, 2014, 04:04:46 AM Ultima modificación: Febrero 06, 2014, 04:33:27 AM por Reedbed
Hola, tengo el codigo de un enemigo para seguir al jugador y quisiera agregarle que se detenga  antes de llegar a el jugador y luego apenas se mueva el jugador  siga siguiendo al jugador les escribo el script:
 
using UnityEngine;
using System.Collections;
 
public class seguir : MonoBehavior {
 
public transform m_Jugador;
 
void Star () {
}
 
void Update () {
GetComponent<NavMeshAgendt>().destination=m_Jugador.position;
}
}
 
De antemano gracias.

No tienes nada, y quieres que te hagamos el script, dilo en cristiano,,,

Febrero 06, 2014, 05:23:32 AM #2 Ultima modificación: Febrero 06, 2014, 05:24:09 AM por Reedbed
Lo que pasa es un scrip que busque en un video y si me funciono les paso el link:
http://www.youtube.com/watch?v=WWwHUeSsJbQ,
pero quiero agregarle lo que dije antes.

Establece una distancia minima. Y dentro de la funcion que uses para ***guir, pon la condicion :
 
if((posicionPlayer - posicionBicho) > distanciaMinima)
{
    persiguePlayer
}
else
{
    mirarPlayer
}
 

 
Yo haria algo asi. Lo va persiguiendo, y cuando llega a esa distancia minima, solo le sigue "con la mirada" (LookAt).
 
 
Espero q te sirva de algo!

creado a ciegas, sin probar, reparaciones pueden ser necesarias:

class asereje: Mono... {
GameObject target;
float minimaDistancia=3f;
float velocidad=20f;

void Update(){
   if (target!=null && Vector3.distance(target.transform.positio,this.transform.position)>minimaDistancia){
      this.transform.position = Vector3.Lerp(transform.position,target.transform.position,velocidad*Time.time);
   }
}
}

PD: te recomiendo que mejores tu lógica.

Febrero 06, 2014, 10:38:47 PM #5 Ultima modificación: Febrero 07, 2014, 03:10:08 AM por Reedbed
ya lo intente pero no sucede nada les paso el codigo que busque y estoy usando como se lo agrego:

#pragma strict
    #pragma implicit
    #pragma downcast
    var player : Transform;
    var hitRadius : float = 6.15;
    var detectRadius : float = 20.0;
    var health = 1;
    var damageGiven = 1;
    var enablePickUp = false;
    var pickUpObj : Transform;
    var enableEffects = false;
    var effect : Transform;
    private var myTransform : Transform;
    private var move = false;
    private var move2 = false;
    var distanciaminima : float  = 10.0;
   
    function Awake(){
        myTransform = transform;
    }
   
    function Start(){
        player = GameObject.FindWithTag("Player").transform;
    }
   
    function FixedUpdate(){
        if(health <= 0){
            Destroy(gameObject);
            if(enablePickUp)
            {
                Instantiate(pickUpObj,transform.position,transform.rotation);
            }
            if(enableEffects)
            {
                Instantiate(effect,transform.position,transform.rotation);
            }
        }
    }
   
    function Update(){
        //Attacking the enemy by hitRadius and left mouse click
        if(Vector3.Distance(player.position, transform.position) < hitRadius && Input.GetMouseButtonDown(0)){
            Damage();
        }
        if(Vector3.Distance(player.position, transform.position) < hitRadius){
            move = false;
            Attack();
        }
        if(Vector3.Distance(player.position, transform.position) > hitRadius){
            move = true;
        }
        if(Vector3.Distance(player.position, transform.position) < detectRadius){
            move2 = true;
            Move();
        }
     
    }
   
    function Damage(){
        health -= damageGiven;
    }
   
    function Move(){
        if(move && move2){
         if (Vector3.Distance(player.position, transform.position)< distanciaminima)
          {
          Vector3.Lerp(player.position, transform.position,Time.time);
            }
            else
            {
            animation.CrossFade("walk");
            GetComponent(NavMeshAgent).enabled = true;
            GetComponent(NavMeshAgent).destination = player.position;
            }
        }
    }
   
    function OnDrawGizmosSelected(){  
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, hitRadius);  
   
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, detectRadius);
    }
   
    function Attack(){
        transform.LookAt(player);
        transform.rotation.x = 0;
        transform.rotation.z = 0;
        print(" I GOT HIT!");
    }
   
    @script RequireComponent(NavModifier);

Pon todo ese codigo entre las etiquetas [ code ] y [ /code ] plis, que asi cuesta menos leerlo.


Porqué no te miras el tutorial de enemigos de mi canal youtube. Quizá te valga...
 
" rel="external nofollow">

El componente "NavMeshAgent" tiene un parámetro que te deja elegir a que distancia quieres que se pare antes de llegar al objetivo, miratelo...

Febrero 09, 2014, 09:59:16 AM #10 Ultima modificación: Febrero 09, 2014, 10:01:46 AM por kaito
Si lo vamos a hacer nosotros, ¿y por qué no pasas el enlace de descarga del proyecto?
 
Si quieres mirar por tu cuenta, tengo un sitio donde voy colocando el código de Unity: http://creacionvideojuegos.foroactivo.com/" rel="external nofollow">http://creacionvideojuegos.foroactivo.com/
 
Hay varios proyectos con IA sencilla, sin muchas variaciones, del tipo que buscas: seguir una ruta, parar, mirar, atacar, etc...

Octubre 10, 2015, 02:50:53 AM #11 Ultima modificación: Octubre 10, 2015, 02:52:37 AM por nestorjaviersolera
SEÑOR NAVMESH TIENE UN INDICADOR DE RANGO DE DISTANCIA PARA CUANDO LLEGA AL OBJETIVO, DEBERÍAS MIRARLO, HAY QUE ESCRIBIRLE UNAS POCAS LINEAS DE CÓDIGO.


[quote author=nestorjaviersolera" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="10087" data-ipsquote-contentcommentid="117477">SEÑOR NAVMESH TIENE UN INDICADOR DE RANGO DE DISTANCIA PARA CUANDO LLEGA AL OBJETIVO, DEBERÍAS MIRARLO, HAY QUE ESCRIBIRLE UNAS POCAS LINEAS DE CÓDIGO.[/quote]Tranquilo si te leemos,  supongo de que hablas fuertemente del parámetro remainingDistance?
También yo utilizaría el autoBraking
http://docs.unity3d.com/ScriptReference/NavMeshAgent-autoBraking.html
Para detenerse antes tal vez sea mejor usar el parámetro stoppingDistancehttp://docs.unity3d.com/ScriptReference/NavMeshAgent-stoppingDistance.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/NavMeshAgent-stoppingDistance.html

Bye Bye



Etiquetas: