Exemplos de cenários do SDK do Maps para Unity

O SDK do Maps para Unity vem com um conjunto de exemplos de cenas do Unity, e cada uma delas demonstra um recurso fundamental do SDK. Eles são instalados quando você instala o SDK no diretório /GoogleMaps/Examples/.

Para executar um exemplo de cena no Unity

  1. Integre o SDK do Maps para Unity seguindo o procedimento Primeiros passos. Quando terminar, você terá feito o download do SDK e integrado ao Unity.

  2. No painel Project, navegue até a pasta /Assets/GoogleMaps/Examples/. As cenas de exemplo estão organizadas na seguinte estrutura de pastas:

    Pasta Cenário principal Descrição
    01_Primeiros passos HelloWorld Ilustra a maneira mais simples de carregar um mapa.
    02_Conceitos básicos MapsService101 Detalha como usar o Serviço do Maps para se comunicar com o SDK.
    03_Estilização de mapas StylingMaps101 Apresenta um exemplo abrangente de como estilizar elementos do mapa no tempo de execução.
    04_Avançado Várias cenas Reagrupa vários exemplos que ilustram tópicos avançados, como visualização do tempo de edição (estilo), zoom misto, locais de reprodução, localização de caminho e estilo avançado.
  3. Clique duas vezes na cena de exemplo que você quer executar. A cena será exibida no painel Hierarchy.

  4. Antes de executar a cena, adicione a apiKey para permitir que o SDK se comunique com os servidores do Google. A apiKey é um parâmetro do componente MapsService para Unity, geralmente anexado ao objeto de jogo de exemplo ou a um dos filhos dele.

  5. Clique no botão Executar.

Vamos começar

Este exemplo de cena demonstra os aspectos mais rudimentares do SDK do Maps para Unity. Por padrão, ele carrega as coordenadas da Estátua da Liberdade e mostra o GameObject da Estátua da Liberdade e a geometria ao redor nos painéis Scene e Editor.

Se você interromper a cena, poderá inserir um novo conjunto de coordenadas nos campos Latitude e Longitude (dentro do componente Exemplo básico (Script) no Inspetor) e, em seguida, executar a cena novamente, e uma cena mundial diferente será exibida.

O código que permite a comunicação com o SDK do Maps para Unity está localizado na função Start() do script:

private void Start () {
   // Get required Maps Service component on this GameObject.
   MapsService mapsService = GetComponent<MapsService>();

   // Set real-world location to load.
   mapsService.InitFloatingOrigin(LatLng);

   // Register a listener to be notified when the map is loaded.
   mapsService.Events.MapEvents.Loaded.AddListener(OnLoaded);

   // Load map with default options.
   mapsService.LoadMap(ExampleDefaults.DefaultBounds,ExampleDefaults.DefaultGameObjectOptions);
}

Neste exemplo, o mapa é carregado com instruções de limites e estilos padrão. O componente MapsService é o gateway para se comunicar com o SDK do Maps para Unity. O par de latitude e longitude no exemplo inicializa a origem flutuante do mapa. O parâmetro "bounds" define a área carregada em torno dessa origem.

Introdução ao MapsService

Este exemplo de cena demonstra como usar o componente MapsService para interagir com o SDK do Maps para Unity de várias maneiras.

Esse cenário coloca em ação vários componentes especializados que você pode usar nas suas próprias cenas do Unity. Esses componentes são atribuídos ao gameobject MapsExample na hierarquia de cenas. Eles mostram o ciclo de vida do carregamento de mapa. Este exemplo usa uma perspectiva em primeira pessoa.

Componente Descrição
BaseMapLoader Carrega um mapa com o Lat Lng fornecido como a origem e dentro de um raio de MaxDistance. O componente BaseMapLoader demonstra como tratar erros de carregamento encontrados pelo SDK.
DynamicMapsUpdater Carrega ou descarrega dinamicamente mais seções do mapa conforme o usuário (neste caso, a câmera principal) se move pelo mundo. O componente DynamicMapsUpdater mantém a janela de visualização Camera.main sempre carregada, descarregando tudo fora dela.
FloatingLatLngOriginUpdater Move a origem flutuante e atualiza a posição relativa de todos os elementos do mapa carregados quando o usuário (nesse caso, a câmera principal) atinge uma distância FloatingOriginRange da posição inicial.

O componente FloatingLatLngOriginUpdater demonstra como usar o método MapsService.MoveFloatingOrigin para recentralizar o mundo do jogo. Isso se torna necessário devido aos erros de arredondamento de ponto flutuante, que fazem com que os recursos do mapa fiquem cada vez mais perdidos à medida que o jogo se afasta da origem do jogo. Para mais informações, consulte Origem do flutuante.
RoadNamesUpdater Quando o componente RoadNamesUpdater está ativo, o mapa carregado mostra os nomes das vias como rótulos.
BuildingNamesUpdater Quando o componente BuildingNamesUpdater está ativo, o mapa carregado mostra os nomes dos edifícios como rótulos.
ProgressBarUpdater Quando o componente ProgressBarUpdater está ativo, o HUD mostra o progresso do carregamento atual.
SearchByPlaceIdUpdater Quando o componente SearchByPlaceIdUpdater está ativo, ele registra os placeIds carregados e fornece uma maneira de pesquisar um gameobject identificado por um placeId selecionado no mapa carregado.
MapFeaturesController Quando o componente MapFeaturesController está ativo, ele oferece uma maneira de enviar a geometria do mapa carregada em vários buckets predefinidos (diferentes elementos parentais do gameobject). Ele também oferece maneiras de instruir o MapsService sobre as categorias MapFeatures que devem ser carregadas.

Por padrão, este exemplo carrega as coordenadas para o centro de Manhattan, Nova York, EUA. Se você interromper a cena, poderá inserir um novo conjunto de coordenadas nos campos Latitude e Longitude do componente Script de serviço do Dynamic Maps no Inspector. Execute novamente a cena e uma cena diferente será exibida.

Introdução à Estilização de mapas

Este exemplo de cena demonstra como usar o SDK do Maps para Unity para estilizar elementos do mapa à medida que são criados durante o processo de carregamento.

Há três abordagens para estilizar um mapa no tempo de execução:

  1. Forneça uma configuração de estilos (GameObjectOptions) ao componente MapsService ao carregar um mapa.
  2. Use eventos WillCreate para anexar instruções de estilo personalizadas a um GameObject de mapa específico antes de ele ser instanciado pelo SDK.
  3. Aplicar estilo a GameObjects no ambiente de execução depois de criados, seja em um evento origemCreate ou após o recebimento do evento MapLoaded.

O exemplo de Introdução à Estilização de mapas ilustra as duas primeiras abordagens.

O código que processa cada conjunto de parâmetros está disponível nas classes a seguir, localizadas em /Assets/GoogleMaps/Examples/03_MapsStyling/Scripts:

AreaWaterConfigView
ExtrudedStructureConfigView
ModeledStructureConfigView
RegionConfigView
SegmentConfigView

O código que coleta todos os estilos de elementos do mapa e os transmite para a API MapsService fica na classe MapsStylingEditorView.

Introdução ao Pathfinding do Google Maps

Este exemplo de cena demonstra como usar a funcionalidade integrada de descoberta de caminhos no SDK. Esse serviço depende de um algoritmo A* e da reticência das vias do mapa carregado como o gráfico de travessia.

O exemplo mostra dois caracteres na tela. Um é conduzido pelo jogador, e o outro é gerenciado pela inteligência artificial.

Quando ativado, o bot do mal (em vermelho) tenta acompanhar nosso avatar (em verde). Todos os caminhos são atualizados em tempo real.

O exemplo destaca o gráfico de nós (ou waypoints) de reticulados de vias disponíveis no mapa carregado.

Esses nós não têm uma representação visual. As esferas brancas que aparecem no mapa são ilustrativas.

Este exemplo oculta intencionalmente todos os elementos do mapa, exceto trechos de via.

O código que processa o personagem principal está localizado no componente RoadLatticeCharacterController, enquanto o processamento do código do comportamento de pesquisa do agente de IA pode ser encontrado em RoadLatticeAIController.

Tópicos avançados

Os exemplos a seguir demonstram recursos avançados da criação de cenários do Unity.

Editar prévia do horário

A cena de exemplo de visualização do tempo de edição em /Assets/GoogleMaps/Examples/04_Advanced/EditTimePreview mostra uma nova implementação que permite a estilização de objetos de jogos de mapas no editor no momento da edição, em oposição ao estilo de tempo de execução descrito na seção de introdução ao estilo de mapa.

Zooms mistos

A cena de exemplo de zoom misto em /Assets/GoogleMaps/Examples/04_Advanced/MixedZoom ilustra como usar diferentes níveis de zoom durante o carregamento de um mapa, com base no local da câmera principal e na distância até o mapa. Esse recurso oferece uma maneira de lidar com diferentes níveis de detalhes.

Dia e noite

O exemplo de cenário diurno e noturno em /Assets/GoogleMaps/Examples/04_Advanced/Miscellaneous demonstra como criar um ciclo diurno à noite usando o sistema skybox do Unity, a iluminação direcional e os materiais emissivos.

Esse exemplo é quase idêntico ao exemplo das divisões de nove A única diferença é que este exemplo adiciona um SunAndMoonController e um EmissionController para controlar as cores de iluminação e emissão de materiais para simular um ciclo de dia-noite. A lógica subjacente de aplicar materiais a edifícios é a mesma do exemplo das novelas.

Este exemplo também usa os componentes DynamicMapsService, BuildingTexturer e ErrorHandling.

Mini-mapa

O exemplo de cena de minimapa em /Assets/GoogleMaps/Examples/04_Advanced/Miscellaneous demonstra como definir a configuração de renderização de uma câmera para mostrar uma visualização de minimapa do mundo do jogo em um elemento da interface. Esse cenário usa um gameObject.layer e um Camera.cullingMask para controlar o que é mostrado no minimapa. Esse cenário também usa um RenderTexture para se conectar a um componente de interface UI.RawImage para exibição como um minimapa na tela.

Seguidor do local

O exemplo de cena do seguidor de localização em /Assets/GoogleMaps/Examples/04_Advanced/Miscellaneous demonstra como usar as coordenadas de GPS reais do jogador para atualizar a posição dele no mundo do jogo.

Mais exemplos de estilo

Os exemplos de estilo específicos a seguir estão localizados em /Assets/GoogleMaps/Examples/04_Advanced/MoreStyling.

Nove fatias

A cena de exemplo das nove divisões demonstra como texturizar construções usando materiais em nove fatias. Esses materiais dependem de um sombreador BuildingWall personalizado (9 Slices) localizado em /Assets/GoogleMaps/Examples/04_Advanced/MoreStyling/Materials/NineSlicing.

Ele usa o componente BuildingTexturer para aplicar materiais divididos em nove fatias e usa o componente DynamicMapsService para permitir navegação pelo mundo, com o componente MapsService mantendo apenas a parte visualizada do mundo carregada o tempo todo.

Este exemplo também usa o componente ErrorHandling para exibir os erros encontrados pelo componente MapsService ao carregar a geometria do mundo.

Bordas dos edifícios

O exemplo de bordas de edifícios demonstra como adicionar bordas ao redor das bases dos edifícios.

Esse exemplo é quase idêntico ao exemplo das divisões de nove A única diferença é que este exemplo usa a classe Extruder para adicionar bordas modeladas às bases dos edifícios.

Este exemplo também usa os componentes DynamicMapsService, BuildingTexturer e ErrorHandling.

Parapeitos

A cena de exemplo de parapeitos demonstra como adicionar parapetos à borda de cima dos edifícios.

Esse exemplo é quase idêntico ao exemplo das divisões de nove A única diferença é que este exemplo usa um Extruder para adicionar parapeitos modelados ao redor de telhados de edifícios. Ele também usa os componentes DynamicMapsService, BuildingTexturer e ErrorHandling.

Por padrão, este exemplo carrega as coordenadas para Melbourne, Austrália.

Squashing de edifícios

O exemplo de compressão de edifícios demonstra como comprimir construções, ou seja, reduzir a altura delas a zero, quando elas estão próximas do jogador. Este exemplo usa o componente ErrorHandling para exibir todos os erros encontrados pelo componente MapsService ao carregar a geometria.

Substituição do Prefab

O exemplo de substituição do prefab demonstra como usar um prefab definido para substituir edifícios de determinados tipos ou para substituir edifícios suprimidos pelo SDK porque têm uma contagem de vértices que excede a contagem máxima de vértices compatível com o Unity (65.000 vértices por malha).

Quando essa cena começa, ela se concentra na Abadia de Westminster (Londres), que parece substituída por um prefab porque esse modelo específico é muito detalhado para o Unity processar e, portanto, é suprimido.

Este exemplo usa o componente ErrorHandling para exibir todos os erros encontrados pelo componente MapsService ao carregar a geometria.