NPC seguir jogador na Unity 3D

Gunnar CorreaGunnar Correa14/12/2020 às 21:12:35 - 649 acessos

NPC seguir jogador na Unity 3D

Utilizando poucas linhas de código e o componente NavMesh podemos fazer com que um GameObject siga outro.


Em diversos jogos como The Witcher 3: Wild Hunt, Resident Evil Revelations 2, entre muitos outros jogos, acontece de nossos parceiros ou NPCs, seguirem nossos passos, literalmente, e para isso, é necessário um algoritmo que determine o melhor caminho e a distância que eles deve ficar do player.

Vamos entender um pouco como esse processo funciona sem se aprofundar, e mais adiante, você confere a nossa videoaula, ensinando passo a passo de como fazer um objeto seguir o player em um cenário cheio de obstáculos.

Uma malha de navegação, ou NavMesh, é uma estrutura de dados abstrata usada em aplicativos de inteligência artificial para ajudar os agentes a encontrar caminhos em espaços complicados. Fonte https://en.wikipedia.org/wiki/Navigation_mesh

Recomendo fortemente que você leia a documentação oficial da Unity em https://docs.unity3d.com/Manual/nav-BuildingNavMesh.html.

Agora explicando como o processo funciona, basicamente o algoritmo de Inteligência Artificial mapeia todo o cenário na qual a navegação é estática, ou seja, os objetos não vão sair do lugar. O mapeamento utiliza uma série de informações, como o tamanho e largura dos objetos que passarão posteriormente pelo caminho, isso é necessário para computador se o caminho calculado pode ou não ser utilizado.

Após a determinação de todos os fatores, o script de NavMesh pega as vértices da malha e vai fazendo mapeamentos, determinando áreas livres e possivelmente trafegáveis.

NavMesh seguir player na Unity 3D

 

NPCFollow.cs

using UnityEngine;
using UnityEngine.AI;

[RequireComponent(typeof(NavMeshAgent))]
public class NPCFollow : MonoBehaviour
{
    public float distanciaMinima = 2;
    public Transform alvo;

    private NavMeshAgent navMeshAgent;

    void Start()
    {
        navMeshAgent = GetComponent<NavMeshAgent>();
        navMeshAgent.stoppingDistance = distanciaMinima;
    }

    void Update()
    {
        navMeshAgent.SetDestination(alvo.position);
    }
}

PlayerMove.cs

using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    public float velocity = 10;
    
    void Update()
    {
        Vector3 dir = new Vector3(
            Input.GetAxis("Horizontal"),
            0,
            Input.GetAxis("Vertical")
        ) * velocity;


        transform.Translate(dir * Time.deltaTime, Space.World);
    }
}

Bem, por hoje é isso, até a próxima.


unity navmesh navmeshagent unity unity programacao npc seguir player unity unity npc unity navmesh tutorial tutorial npc unity unity navmeshagent

Compartilhe nas redes sociais



Gunnar Correa

Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.


Fórum

Ficou com alguma dúvida? utilize nosso fórum de perguntas e respostas, lá nossa comunidade poderá te ajudar.

https://forum.satellasoft.com