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;
}
}
Se posteo doble