Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Reedbed en Febrero 06, 2014, 04:04:46 AM

Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: Reedbed en Febrero 06, 2014, 04:04:46 AM
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.
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: en Febrero 06, 2014, 04:58:37 AM
No tienes nada, y quieres que te hagamos el script, dilo en cristiano,,,
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: Reedbed en Febrero 06, 2014, 05:23:32 AM
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, (//%5Byoutube%5Dhttp://www.youtube.com/watch?v=WWwHUeSsJbQ%5B/youtube%5D,)
pero quiero agregarle lo que dije antes.
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: en Febrero 06, 2014, 01:35:48 PM
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!
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: en Febrero 06, 2014, 07:20:01 PM
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.
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: Reedbed en Febrero 06, 2014, 10:38:47 PM
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);
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: en Febrero 06, 2014, 11:17:09 PM
Pon todo ese codigo entre las etiquetas [ code ] y [ /code ] plis, que asi cuesta menos leerlo.
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: Reedbed en Febrero 08, 2014, 07:11:53 AM
Por fin busque un ejemplo que me puede ayudar en en  unity 3d: https://www.assetstore.unity3d.com/#/content/815
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: Jocyf en Febrero 08, 2014, 11:36:26 AM
Porqué no te miras el tutorial de enemigos de mi canal youtube. Quizá te valga...
 
" rel="external nofollow">
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: stracker en Febrero 08, 2014, 09:05:35 PM
El componente "NavMeshAgent" tiene un parámetro que te deja elegir a que distancia quieres que se pare antes de llegar al objetivo, miratelo...
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: kaito en Febrero 09, 2014, 09:59:16 AM
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/
 
Hay varios proyectos con IA sencilla, sin muchas variaciones, del tipo que buscas: seguir una ruta, parar, mirar, atacar, etc...
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: Ness en Octubre 10, 2015, 02:50:53 AM
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.
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: pioj en Octubre 10, 2015, 04:02:04 PM
Esas mayúsculas, por favor... 
Título: IA de un enemigo que se detenga antes de llegar a el
Publicado por: Oak Human Flesh en Octubre 10, 2015, 06:08:22 PM
[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 autoBrakinghttp://docs.unity3d.com/ScriptReference/NavMeshAgent-autoBraking.html (http://docs.unity3d.com/ScriptReference/NavMeshAgent-remainingDistance.html)
Para detenerse antes tal vez sea mejor usar el parámetro stoppingDistance
http://docs.unity3d.com/ScriptReference/NavMeshAgent-stoppingDistance.html