Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: R3N3 en Noviembre 30, 2015, 04:59:01 PM

Título: Nav mesh
Publicado por: R3N3 en Noviembre 30, 2015, 04:59:01 PM
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
Título: Nav mesh
Publicado por: kik195 en Noviembre 30, 2015, 05:06:05 PM
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.
Título: Nav mesh
Publicado por: brok en Noviembre 30, 2015, 07:29:28 PM
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;

    }

}
 
Título: Nav mesh
Publicado por: brok en Noviembre 30, 2015, 07:30:23 PM
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;

    }

}
 
Título: Nav mesh
Publicado por: brok en Noviembre 30, 2015, 07:31:53 PM
Se posteo doble