Download

Preservando variaveis durante a troca de mapas.

Tenho um mapa onde o jogador faz o Login. Nesse mapa , eu recebo o valor do login e coloco em uma variavel ( Tentei em GameMode,GameState,Save ). Mas quando carrego um novo mapa, os valores em gamemode ou gamestate são resetados. Como posso preservar os valores das variaveis durante a troca de mapa? . Ou alguma outra maneira de passas Valores entre mapas. Sem usar c++.

O modo mais simples é usando uma GameInstance, que é um object que é criado quando seu jogo inicia e so é destruído quando o jogo é terminado, então mesmo quando você troca de level os dados nele continuam existindo.

Só criar uma Blueprint derivada de GameInstance e colocar nela as variáveis que você quer manter entre levels, e você usa ‘Get Game Instance’ para acessar o objeto.

Btw não esquece de configurar em Project Settings->Maps & Modes->Game Instance Class a classe que você criou.

Obrigado pela ajuda. Funcionou, porem não com todo o tipo de variável. Com variaveis derivadas de blueprints ( actor, objects . . . ) a variável ainda é resetada.

Sim, isso acontece porque os objetos tipo actors e outros só existem dentro do level(Com exceção do GameInstance) então quando você troca de level os actors daquele level são destruídos.

Existem varias soluções para isso mas meio que depende do tipo de informação de objeto que você quer manter entre levels.

Por exemplo se você sabe quais objetos você quer manter entre levels e não forem muitos, você pode usar Structs na GameInstance para manter os dados daquele objeto, tipo se você tem um objeto MyObj você cria uma struct MyObjData que contem variáveis com os dados que você quer manter daquele objeto, e quando você for trocar de level, vc copia todos os dados do objeto que você quer manter para a struct dentro do gameinstance e quando inicializar o outro level você recria o MyObj usando as informações do MyObjData.

Outra opção(essa é a que eu uso no meu projeto atual) é usar o sistema de streaming do engine, você mantem todos objetos que você quer que continue existindo entre levels no level persistente e ao invez de trocar de level você usa as funções de streaming para remover o level atual e carregar o novo. Apesar que dependendo do tipo de jogo essa pode ser uma opção não muito boa.

E ao meu ver a opção mais genérica(no sentido que vai funcionar com qualquer tipo e numero de objetos) é salvar todos objetos que você quer para um arquivo quando você for trocar de level e quando abrir o próximo level você carrega e recria os objetos, e se não me engano na versão atual do engine(4.8) é possível fazer com Blueprints(mas não tenho 100% de certeza).

Tem varias opções mais qual é melhor vai depender do tipo de dados e objetos que você tem que manter entre levels e o tipo de jogo que você esta fazendo. :slight_smile:

Entendi. Salvando variaveis basicas como string ja me ajuda bastante e ja tenho como adaptar para meu projeto. Mais uma vez obrigado pela ajuda. :slight_smile: