Noticias

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

Nav mesh

Iniciado por R3N3, Noviembre 30, 2015, 04:59:01 PM

Tema anterior - Siguiente tema
Hola a todos, quisiera aprender a usar componente Navigation de unity, pero por más que me leo la documentacion del programa no me queda claro su uso. Pueden darme alguna direccion con un buen video que me aclare la duda? Gracias

eature=oembed" allowfullscreen="true" frameborder="0" height="270" width="480">
eature=oembed" allowfullscreen="true" frameborder="0" height="270" width="480">En estos videos se explica bastante bien el funcionamiento.

Toma te dejo un script que hice para que puedas ver como se hace.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

[RequireComponent(typeof(NavMeshAgent))]
public class Player_ai : MonoBehaviour
{
   
    Transform Target;
    NavMeshAgent Agent;
    Animator Anim;
    public float Speed = 1.0f;
    public float Rango;
    public float distanciaS = 1.0f;
    public float distanciaP = 2.0f;
    public float sinkSpeed = 2.5f;
    public SphereCollider colisionPuno;
    public SphereCollider colisionPata;

    void Start()
    {
       

        Target = GameObject.FindGameObjectWithTag("Player").transform;
       
        Anim = GetComponent<Animator>();
        Agent = GetComponent<NavMeshAgent>();
        colisionPata.isTrigger = false;
        colisionPuno.isTrigger = false;
       

    }
   
    void Update()
    {




        if (vidaPlayer.vida > 0)
        {

            Agent.SetDestination(Target.position);
           
            StartCoroutine(idle());
        }
        else
        {
            Agent.enabled = false;
           
        }

       


    }
    IEnumerator idle()
    {

        yield return new WaitForSeconds(1f);

        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("idle", 0.0f);
            colisionPata.isTrigger = false;
            colisionPuno.isTrigger = false;
            if (Vector3.Distance(transform.position, Target.position) <= distanciaP)
            {
                Anim.SetFloat("idle", 1.0f);
                colisionPata.isTrigger = false;
                colisionPuno.isTrigger = false;
                StartCoroutine(patada());
                StartCoroutine(punetazo());
            }

        }

        yield return null;
    }
    IEnumerator patada()
    {

        yield return new WaitForSeconds(2f);


        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("patada", 1.0f);
            Anim.SetFloat("idle", 0.0f);
            colisionPata.isTrigger = true;
            if (Vector3.Distance(transform.position, Target.position) >= distanciaP)
            {
                Anim.SetFloat("patada", 0.0f);
                Anim.SetFloat("idle", 0.0f);
                colisionPata.isTrigger = false;

            }

        }

        yield return null;

    }
    IEnumerator punetazo()
    {

        yield return new WaitForSeconds(4f);


        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("patada", 0.0f);
            Anim.SetFloat("punetazo", 1.0f);
            Anim.SetFloat("idle", 0.0f);
            colisionPuno.isTrigger = true;
            if (Vector3.Distance(transform.position, Target.position) >= distanciaP)
            {
                Anim.SetFloat("patada", 0.0f);
                Anim.SetFloat("punetazo", 0.0f);
                Anim.SetFloat("idle", 0.0f);
                colisionPuno.isTrigger = false;

            }

        }

        yield return null;

    }

}
 

Toma te dejo un script que hice para que puedas ver como se hace.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

[RequireComponent(typeof(NavMeshAgent))]
public class Player_ai : MonoBehaviour
{
   
    Transform Target;
    NavMeshAgent Agent;
    Animator Anim;
    public float Speed = 1.0f;
    public float Rango;
    public float distanciaS = 1.0f;
    public float distanciaP = 2.0f;
    public float sinkSpeed = 2.5f;
    public SphereCollider colisionPuno;
    public SphereCollider colisionPata;

    void Start()
    {
       

        Target = GameObject.FindGameObjectWithTag("Player").transform;
       
        Anim = GetComponent<Animator>();
        Agent = GetComponent<NavMeshAgent>();
        colisionPata.isTrigger = false;
        colisionPuno.isTrigger = false;
       

    }
   
    void Update()
    {




        if (vidaPlayer.vida > 0)
        {

            Agent.SetDestination(Target.position);
           
            StartCoroutine(idle());
        }
        else
        {
            Agent.enabled = false;
           
        }

       


    }
    IEnumerator idle()
    {

        yield return new WaitForSeconds(1f);

        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("idle", 0.0f);
            colisionPata.isTrigger = false;
            colisionPuno.isTrigger = false;
            if (Vector3.Distance(transform.position, Target.position) <= distanciaP)
            {
                Anim.SetFloat("idle", 1.0f);
                colisionPata.isTrigger = false;
                colisionPuno.isTrigger = false;
                StartCoroutine(patada());
                StartCoroutine(punetazo());
            }

        }

        yield return null;
    }
    IEnumerator patada()
    {

        yield return new WaitForSeconds(2f);


        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("patada", 1.0f);
            Anim.SetFloat("idle", 0.0f);
            colisionPata.isTrigger = true;
            if (Vector3.Distance(transform.position, Target.position) >= distanciaP)
            {
                Anim.SetFloat("patada", 0.0f);
                Anim.SetFloat("idle", 0.0f);
                colisionPata.isTrigger = false;

            }

        }

        yield return null;

    }
    IEnumerator punetazo()
    {

        yield return new WaitForSeconds(4f);


        if (Vector3.Distance(transform.position, Target.position) >= distanciaS)
        {
            Anim.SetFloat("patada", 0.0f);
            Anim.SetFloat("punetazo", 1.0f);
            Anim.SetFloat("idle", 0.0f);
            colisionPuno.isTrigger = true;
            if (Vector3.Distance(transform.position, Target.position) >= distanciaP)
            {
                Anim.SetFloat("patada", 0.0f);
                Anim.SetFloat("punetazo", 0.0f);
                Anim.SetFloat("idle", 0.0f);
                colisionPuno.isTrigger = false;

            }

        }

        yield return null;

    }

}
 


Etiquetas: