‫Olá e bem-vindo de volta.
‫Neste vídeo, vamos falar sobre como podemos acelerar nosso tanque.
‫Gostaríamos de controlar exatamente o quão rápido nosso tanque está se movendo.
‫E agora estamos apenas passando neste vetor de localização delta para adicionar ato, um deslocamento local, e não temos
‫controle sobre a rapidez com que o tanque está se movendo.
‫Na verdade, está se movendo muito devagar.
‫Então vamos fazer uma variável de velocidade que podemos usar para controlar essa velocidade.
‫E também vamos levar em conta a taxa de quadros do nosso jogo, pois nosso jogo está mudando a taxa de quadros de um
‫quadro para outro.
‫Na verdade, não estamos obtendo movimentos consistentes.
‫Então, para levar em conta essa taxa de quadros, vamos falar sobre algo chamado Delta Time.
‫Então, estamos aqui no editor e se eu apertar o play e começar a mover o tanque, não é
‫algo que você possa notar necessariamente.
‫Mas nosso tanque não está se movendo em uma taxa consistente de quadro a quadro.
‫E a razão é porque nossa taxa de quadros muda e aqui no canto superior esquerdo da janela de visualização há um
‫pequeno menu suspenso.
‫Se eu clicar nele, há uma caixa de seleção ao lado para mostrar que DPS PES significa quadros por segundo.
‫Se eu verificar isso, no canto superior direito vejo meus quadros por segundo.
‫E logo abaixo disso, quantos milissegundos se passaram desde o último quadro?
‫E esses valores mudam de quadro para quadro.
‫Se eu apertar o play, você pode ter perdido, mas a taxa de quadros caiu e depois voltou
‫porque durante esse estágio inicial do jogo, muitas coisas estavam acontecendo.
‫Todos os atores estavam chamando suas funções iniciais de jogo e há alguns bastidores configurados para o
‫mundo.
‫Agora, se eu começar a jogar, os 120 aplicativos que estou recebendo estão mudando de quadro para quadro, mesmo que
‫ele fique em torno de 120.
‫Portanto, a razão pela qual isso causa um movimento inconsistente é porque, à medida que a taxa de quadros diminui, essas atualizações de
‫ticks estão sendo chamadas com menos frequência.
‫E se estamos movendo esse tanque na mesma quantidade a cada quadro, estamos contando com essa taxa de
‫quadros para permanecer consistente, para obter esse movimento consistente.
‫E quando o jogo fica mais complicado, as variações da taxa de quadros ficam cada vez piores.
‫Portanto, precisamos ter certeza de que estamos nos ajustando usando algo chamado Delta Time.
‫Então, o que é esse misterioso tempo do Delta?
‫Bem, digamos que temos esta linha do tempo aqui começando em 0 segundos e aumentando conforme o tempo passa.
‫Agora, à medida que o tempo passa, isso significa que a função tick está sendo chamada.
‫Mas observe que a função tick não é muito consistente.
‫Às vezes é chamado muito rapidamente e às vezes é chamado com menos frequência.
‫Isso ocorre porque seu computador deve fazer cálculos quadro a quadro e, às vezes, esses cálculos
‫consomem mais recursos do seu computador, e isso pode diminuir nossa taxa de quadros.
‫Agora, essa variável de tempo delta que temos na função tick é a quantidade de tempo que passou
‫desde o último quadro.
‫Então aqui pode ser 0. 1 segundo.
‫Realmente depende do uso da CPU e como isso varia.
‫Portanto, à medida que o uso da CPU varia, seu tempo delta também varia.
‫E isso significa que quando temos mais quadros por segundo, temos mais chamadas de função.
‫Agora, se estivermos chamando add actor local offset com mais frequência, veremos nosso lago se movendo mais rápido e
‫não terá uma taxa de movimento consistente.
‫Então a solução é dimensionar o movimento pelo tempo Delta.
‫Portanto, se o tempo Delta for 0. 1 e queremos mover nosso lago em, digamos,
‫dez centímetros por segundo, escalando esse movimento em 0. 1 segundo nos dá a quantidade exata de movimento que precisamos para um tempo de atualização de
‫quadro de 0. 1 segundo.
‫Agora considere esta parte aqui onde temos um tempo delta menor, o que significa que o TIC está sendo chamado com
‫mais frequência.
‫Digamos que o tempo delta aqui seja 0. 0 1 segundos.
‫Então TIC está sendo chamado dez vezes mais vezes aqui.
‫Bem, poderíamos simplesmente dimensionar nosso movimento em 0. 01 para este quadro em particular, e dessa forma vamos mover
‫nossa lagoa dez centímetros por segundo vezes, 0. 0 1 segundos.
‫Portanto, estamos movendo a lagoa um pouco, já que o TIC está sendo chamado com muito mais frequência.
‫Isso garante que nossa lagoa se mova de maneira consistente, independentemente das mudanças na taxa de
‫quadros.
‫Então, de volta aqui no código do VSE, vamos pensar em como gostamos de cuidar desse problema.
‫Temos nosso vetor de localização delta e estamos definindo seu x igual ao valor, mas sabemos que gostaríamos de dimensionar
‫o valor pelo tempo Delta.
‫Então, vou fazer um pequeno comentário aqui e dizer que X é igual a valor vezes, tempo delta, o que significa que gostaríamos de dimensionar
‫o valor pelo tempo Delta.
‫Agora, uma vez que fizermos isso, vamos tornar o valor muito pequeno porque o tempo Delta em si é um valor
‫muito pequeno, especialmente se sua taxa de quadros for muito alta.
‫Então, também precisaremos dimensionar isso por algo.
‫Caso contrário, uma espécie de variável de velocidade, e podemos decidir qual deve ser esse valor para controlar a
‫velocidade dos tanques.
‫Então, temos um pouco de pseudocódigo aqui para nos guiar e agora só precisamos implementar isso criando um
‫valor para velocidade e descobrindo como podemos obter esse valor de tempo delta.
‫Então, vamos falar sobre como podemos acessar o tempo Delta a partir da função de movimento.
‫Agora, o Unreal Engine tem várias maneiras de obter o tempo Delta.
‫De fato, se você observar a função tick que temos como base no Delta, o tempo é um parâmetro de entrada flutuante.
‫Então, se estamos trabalhando na função tick, já temos acesso ao tempo Delta, mas no DHCP do tanque,
‫nossa função move não tem esse parâmetro de entrada, mas a unreal engine tem seus jeitos.
‫Uma maneira é acessar uma função chamada get world delta seconds, que existe em uma classe chamada U
‫gameplay statics.
‫Como o nome sugere, a estática do jogo tem muitas funções estáticas que auxiliam na programação do jogo.
‫Obter segundos do Delta Mundial retorna o tempo delta.
‫Agora ele tem um parâmetro de entrada.
‫Aqui é preciso um objeto de contexto mundial.
‫Você verá muito isso no Unreal Engine.
‫Muitas funções estáticas exigirão um objeto de contexto mundial.
‫O mundo é um objeto do tipo você mundo.
‫É o objeto de nível superior do nosso jogo.
‫Ele representa nosso mapa que contém todos os objetos associados em nosso jogo.
‫Agora, funções estáticas, como obter segundos delta mundiais, não têm ideia de em que mundo estamos.
‫Precisamos dizer a essa função em qual mundo estamos para que ela possa acessar esse mundo e obter esse valor de
‫tempo delta.
‫Agora, para dizer em que mundo estamos, podemos passar um ponteiro para um objeto que existe nesse
‫mundo.
‫Enquanto estamos trabalhando na aula de tanques, podemos passar a palavra-chave this.
‫Esta é uma palavra chave que podemos usar dentro de qualquer classe em C++.
‫O que esta palavra-chave é, é um ponteiro para a instância de qualquer objeto específico em que estamos trabalhando.
‫Então, se estamos trabalhando na classe de tanques, este é um ponteiro para o tanque em que estamos.
‫Portanto, funções que exigem um objeto de contexto de mundo geralmente podem receber isso como parâmetro de entrada porque o tanque
‫em que estamos trabalhando existe no mundo correto.
‫Portanto, obter segundos do delta mundial saberá em qual mundo está e poderá nos recuperar o delta apropriado.
‫Tempo para esse mundo.
‫Então, se estamos chamando get world delta seconds de dentro da classe --, vamos passar isso como
‫o objeto de contexto mundial.
‫Agora você tem todas as ferramentas necessárias para controlar a velocidade dos tanques.
‫Então o que você vai fazer é criar uma variável de velocidade, torná-la um float e colocá-la em
‫uma seção privada na classe tank.
‫Agora exponha isso aos blueprints para que possamos ajustá-lo à medida que estamos desenvolvendo, o que significa
‫que você dará a ele uma propriedade você e usará os especificadores de propriedade apropriados que correspondem ao nível
‫de exposição que você deseja.
‫Agora, na função MOV, temos aquele pedaço de pseudocódigo que colocamos como comentário.
‫Então use isso como um guia.
‫Você vai pegar a localização delta, o vetor F e a escala.
‫É X por hora delta.
‫Acabamos de ver como podemos acessar o tempo delta usando a estática de jogabilidade do U.
‫E você também vai escalar X pela variável de velocidade.
‫Agora, como estamos usando uma função na estática do jogo, você precisará incluir o arquivo de cabeçalho para
‫a estática do jogo.
‫Agora, mostrei várias vezes como encontro a inclusão de uma classe específica usando a documentação do
‫mecanismo irreal.
‫Então, vou desafiá-lo a procurar suas estatísticas de jogo na documentação do Unreal Engine e encontrar
‫esse arquivo de cabeçalho.
‫E se você não conseguir encontrá-lo, basta encontrar o link nos recursos deste vídeo, que fornecerá a
‫documentação para suas estatísticas de jogo, mas tente encontrá-lo por conta própria.
‫Primeiro pause o vídeo e controle a velocidade do tanque agora.
‫OK.
‫Então eu tenho meu pseudo código para me guiar e preciso dimensionar o valor pelo tempo delta e pela velocidade.
‫Então, primeiro vou criar minha variável de velocidade.
‫Agora de volta ao tanque h.
‫Aqui é onde posso colocar a variável de velocidade.
‫No entanto, se você se lembrar de um exercício prático em uma aula anterior, adicionei um flutuador chamado Speed
‫à classe Base Pond.
‫Agora eu não preciso da variável de velocidade aqui na lagoa base.
‫Isso foi apenas prática, então eu realmente não preciso disso aqui.
‫Na verdade, não preciso desses outros 30 dois que criei para demonstrar que você é especificador de propriedade.
‫Então, vou destacar todos eles e excluí-los da classe base pond.
‫Eu não os quero mais.
‫Então eles se foram.
‫Agora, você também deve se lembrar que eu fiz referência a essa variável de velocidade no projeto do tanque da lagoa.
‫Então eu vou abrir o tanque da lagoa da BP.
‫E aqui no gráfico de eventos, há aquela variável de velocidade que mencionei.
‫Já que não preciso mais disso, vou em frente e excluir esses nós e compilar e salvar meu
‫tanque de lagoa BP.
‫OK.
‫Depois de limpar tudo isso, vou voltar ao tanque para adicionar minha variável de velocidade.
‫E isso vai estar na seção privada aqui.
‫Vou adicioná-lo logo acima da função move e será um float chamado speed.
‫Agora vou dar um valor inicial aqui.
‫Acho que vou tentar 200 F e ver como isso funciona.
‫Mas como gostaria de poder editar isso no editor enquanto estou desenvolvendo, ele obterá uma nova macro
‫de propriedade e gostaria de poder editar isso nas instâncias e no padrão.
‫Então eu vou fazer isso editar em qualquer lugar.
‫Agora, você não tem que fazer isso, mas estou dando uma categoria.
‫Vou criar uma nova categoria chamada movimento.
‫Agora, expô-lo ao gráfico de eventos é opcional.
‫Vou adiar isso porque não acho que precisarei acessá-lo no gráfico de eventos.
‫Se eu precisar.
‫No futuro, posso expô-lo com blueprint, leitura, gravação ou blueprint somente leitura e usar essa meta
‫permitir acesso privado especificar.
‫Mas por enquanto não vou.
‫Então eu tenho uma variável de velocidade e aqui no tanque DHCP, vou pegar o valor e escalá-lo por velocidade.
‫Agora, a última coisa a fazer é dimensionar o valor pelo tempo delta, o que significa que preciso de suas estatísticas de jogo.
‫Então aqui está a documentação do Unreal Engine.
‫Eu vou em frente e procurar por suas estáticas de jogabilidade e aqui estão suas estáticas de jogabilidade.
‫Então eu só preciso rolar para baixo até a linha de inclusão e copiar isso e voltar no tanque CP.
‫Eu posso colar.
‫Agora que tenho acesso a novas estatísticas de jogabilidade, posso obter o tempo Delta, então vou multiplicar por você.
‫As estáticas da jogabilidade obtêm segundos delta mundiais e, como vimos, isso precisa de um objeto de contexto mundial.
‫Você pode até ver com o pop-up que está pedindo um objeto de contexto mundial.
‫Então eu vou passar nisso.
‫Então, agora que estou configurando os locais Delta X para valores de tempos, velocidade, tempos, tempo delta, vou
‫compilar isso.
‫Portanto, temos uma compilação bem-sucedida.
‫Então, de volta aqui no editor, eu posso entrar no BP Pond Tank e lá está a minha velocidade.
‫E se eu selecionar a instância do tanque no mundo, posso pesquisar no painel de detalhes por movimento e lá está
‫a velocidade e posso configurá-la para qualquer valor que eu quiser.
‫Se eu aumentar isso e apertar o play, então estou me movendo um pouco mais rápido.
‫Portanto, esta é a vantagem de expor a variável a blueprints.
‫Posso experimentar e encontrar uma boa velocidade que funcione para mim.
‫Tudo bem, então isso está ótimo.
‫Vou seguir em frente e parar de mostrar o FPSO agora.
‫E agora temos nossa variável de velocidade e podemos alterá-la.
‫E essa mudança se refletirá no movimento do meu peão.
‫Então, agora estamos controlando a velocidade de movimento do nosso tanque e temos uma boa variável de velocidade
‫que expomos aos projetos e podemos definir isso enquanto desenvolvemos um experimento com seu valor.
‫Também aprendemos sobre o horário Delta e por que é importante dimensionar nosso movimento pelo horário Delta.
‫Portanto, é independente da taxa de quadros, pois as mudanças na taxa de quadros ainda obterão um movimento suave e consistente com
‫nosso tanque.
‫Então, olhando para o nosso plano de seção, estamos quase terminando nosso primeiro ponto.
‫Criamos um tanque e ele pode se mover por todo o mundo.
‫Nosso segundo ponto é lidar com a entrada com o movimento do teclado WASD e a entrada do mouse também.
‫Acabamos com a parte W e SW, mas ainda precisamos ser capazes de usar as teclas A e D e
‫vamos usá-las para girar o tanque.
‫Então, estamos fazendo um bom progresso nos próximos vídeos.
‫Vamos trabalhar para terminar nossa habilidade de mover o tanque.
‫Vejo você em breve.