Com tags de jogabilidade, você pode localizar atores marcados com uma tag específica enquanto o jogo está em execução. As tags de jogabilidade permitem que você trabalhe com vários atores sem precisar configurar propriedades e atribuir referências no Unreal Editor para Fortnite (UEFN). Tags de jogabilidade são criadas no código Verse e atribuídas no UEFN.
O uso de tags de jogabilidade pode abrir oportunidades interessantes de jogabilidade, como:
- Alterar a configuração do nível sem ter que adicionar ou modificar referências de dispositivo ao seu dispositivo criado com Verse.
- Encontrar todos os atores com uma tag específica e operá-los com base em seu tipo, como acender luzes ou alternar barreiras.
- Alterar dinamicamente quais atores estão ativos à medida que o jogador avança no jogo.
- Habilitar atores condicionalmente para uma corrida de obstáculos com base em uma opção de dificuldade selecionada pelo jogador.
O que pode ser marcado?
Atualmente, tags de jogabilidade podem ser atribuídas ao seguinte:
As seções a seguir mostram como criar e trabalhar com tags de jogabilidade no seu projeto.
Como criar uma tag de jogabilidade
Siga estas etapas para criar uma nova tag de jogabilidade usando Verse:
- Abra seu arquivo Verse no Visual Studio Code com o Explorador Verse.
- Na parte superior do seu arquivo Verse, adicione o seguinte código para habilitar referências à classe
tag
.using { /Verse.org/Simulation/Tags }
- Crie uma nova classe que herde da classe
tag
. O nome da sua classe determina o nome da tag. Neste exemplo, a classe se chamamytag
, então o nome da tag de jogabilidade é mytag.# Derive da classe `tag` no módulo "Verse.org/Simulation/Tags" para criar uma nova tag de jogabilidade. mytag := class(tag){}
- Seu arquivo Verse deve ficar assim:
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Derive da classe `tag` no módulo "Verse.org/Simulation/Tags" para criar uma nova tag de jogabilidade. mytag := class(tag){}
- Salve seu arquivo Verse e clique em Compilar código Verse na barra de ferramentas do UEFN para compilar o código de forma que você possa usar sua nova tag de jogabilidade.
Tags de jogabilidade são rótulos hierárquicos. Essas tags podem ter qualquer número de níveis hierárquicos, separados pelo caractere _
no nome da classe.
Quando o nome da tag de jogabilidade aparece no editor, os caracteres _
são convertidos em ".".
Por exemplo, uma tag de jogabilidade com três níveis teria o nome de classe family_genus_species
e apareceria no editor como "family.genus.species", com "family" sendo o identificador mais amplo na hierarquia e "species" sendo o mais específico.
Observe que a existência de "family.genus.species" não significa implicitamente que as tags de jogabilidade "family.genus" e "family" também existam. Você deve criar essas tags de jogabilidade em Verse com os nomes de classe family
e family_genus
para criar os níveis hierárquicos.
Como atribuir uma tag de jogabilidade
Siga estas etapas para atribuir uma tag de jogabilidade. Este exemplo usa um dispositivo, mas as etapas são as mesmas para outros atores.
-
No Organizador do UEFN, selecione o dispositivo que você deseja marcar para abrir seu painel Detalhes. Neste exemplo, usaremos um dispositivo de Botão.
-
No painel Detalhes, clique em Add New Component (Adicionar novo componente) e escolha VerseTagMarkup no menu suspenso.
-
Selecione o componente VerseTagMarkup para visualizar suas configurações no painel Detalhes.
-
Em Tags de jogabilidade, edite a propriedade Tags e adicione sua tag de jogabilidade. Neste exemplo, mytag é adicionada ao dispositivo.
Você pode adicionar várias tags ao mesmo ator, para que cada ator possa pertencer a vários grupos ao mesmo tempo. Quando você tiver um ator com várias tags, poderá encontrar esse ator por qualquer tag que ele tenha.
Por exemplo, um ator com as tags mytag1 e mytag2 será encontrado ao chamar GetCreativeObjectsWithTag(mytag1{})
ou GetCreativeObjectsWithTag(mytag2{})
.
Como encontrar atores com uma tag de jogabilidade
Depois de atribuir tags de jogabilidade a atores, você pode encontrá-los por tag de jogabilidade durante um jogo usando a função Verse GetCreativeObjectsWithTag()
. No exemplo a seguir, chamar GetCreativeObjectsWithTag(mytag {})
faz com que TaggedDevices
contenha todos os atores que têm mytag atribuída a eles:
TaggedActors := GetCreativeObjectsWithTag(mytag{})
A chamada da função GetCreativeObjectsWithTag()
retorna uma matriz de todos os objetos que implementam creative_object_interface
. Por exemplo, se você atribuir mytag a um dispositivo de Botão e a um dispositivo de Luz Personalizável no nível, essa chamada de função retornará ambos os dispositivos.
Você pode converter o resultado de GetCreativeObjectsWithTag()
em uma de suas classes de implementação (processo chamado de conversão de tipo) usando a sintaxe NewObjectReference := object_type_to_cast_to[ObjectReference]
, em que object_type_to_cast_to
é o tipo de objeto desejado. Por exemplo, se você quiser ligar ou desligar um dispositivo de Luz Personalizável, deverá converter o resultado em customizable_light_device
antes de chamar a função TurnOff()
ou TurnOn()
.
A conversão de tipo é uma expressão falível, porque ela falhará se o dispositivo não puder ser convertido nesse tipo, como quando for um tipo diferente de dispositivo. Por exemplo, você não pode converter um dispositivo de Botão em uma classe customizable_light_device
, porque um dispositivo de Botão e um dispositivo de Luz Personalizável não são o mesmo tipo de dispositivo.
Com expressões for
, você pode usar expressões falíveis como um filtro e criar novas variáveis para usar no bloco de código for
. Por exemplo, você pode adicionar a conversão de tipo de customizable_light_device
à expressão de iteração em for
. Como o dispositivo será convertido em customizable_light_device
, você poderá usar as funções específicas dessa classe, como TurnOff()
, para apagar a luz.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors, LightDevice := customizable_light_device[TaggedActor]):
LightDevice.TurnOff()
O exemplo a seguir mostra como verificar condicionalmente o tipo do ator e chamar funções diferentes com base no tipo. O exemplo verifica se o ator marcado é um dispositivo Luz Personalizável que pode chamar TurnOff()
para apagar a luz ou se é um dispositivo Barreira que pode chamar Disable()
para apagá-la.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# Se o ator marcado for um dispositivo Luz Personalizável, desligue-o
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# Se o ator marcado for um dispositivo Barreira, desligue-o
BarrierDevice.Disable()
Ao chamar GetCreativeObjectsWithTag()
, a lista resultante não é ordenada por nenhum método que você possa conhecer ou afetar antecipadamente. Nos casos em que você adiciona ou remove atores entre chamadas para GetCreativeObjectsWithTag()
usando a mesma tag, a lista resultante pode estar em uma ordem diferente para cada resultado de chamada.
Se o jogo tiver que lidar com atores em uma ordem específica, você deverá usar uma matriz editável em vez de tags de jogabilidade, já que o resultado de GetCreativeObjectsWithTag()
é uma lista não ordenada de atores.
Como encontrar a posição por tipo com tags de jogabilidade
Aqui está um exemplo de como filtrar os atores retornados de GetCreativeObjectsWithTag()
por tipo e exibir sua posição.
# encontrar todos os atores com "all_tag"
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Exibir a posição de todos os atores "creative_prop" com "all_tag"
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Adereço encontrado com all_tag na posição: {Prop.GetTransform().Translation}")
# Exibir a posição de todos os atores do dispositivo com "all_tag"
for (Device:AllCreativeObjects):
if (Device := creative_device_base[Device]):
Print("Dispositivo do Modo Criativo encontrado com all_tag na posição: {Device.GetTransform().Translation}")
# Exibir a posição de todos os atores de dispositivos criados com Verse com "all_tag"
for (VerseAuthoredDevice : AllCreativeObjects):
if (VerseAuthoredDevice := creative_device[VerseAuthoredDevice]):
Print("Dispositivo do usuário encontrado com all_tag na posição: {VerseAuthoredDevice.GetTransform().Translation}")
Tutoriais que usam tags de jogabilidade
Os tutoriais a seguir mostram como usar tags de jogabilidade em um jogo.