Escolar Documentos
Profissional Documentos
Cultura Documentos
5D
Adicionando uma Entidade de Player Simples 6 Adicionando uma caixa de plano de fundo 23
Adicionando um objeto RigidBodyEx Player 6 Adicionando uma textura do céu 23
Propriedades e Estratégias Físicas 7 Escalando a textura de fundo 23
Usando um ponto de marcação AI para gerar scripts de gráfico de fluxo 7 Animando a textura do céu 23
Visão geral do gráfico de fluxo 8 Removendo sombras através de shaders 24
Primeiro Mecânico de Jogo: a Ação de Salto 9 Escalando e posicionando a caixa de plano de fundo 24
Respondendo à ação de salto 9 Usando iluminação global 25
Modificando a funcionalidade do SDK do jogo 11 Otimizando Entidades do Designer por meio da Exportação CGF 25
Escondendo o jogador de tiro e o HUD 11 06: Mover os canos 27
Adicionando Death Triggers Para Restringir o Jogador 51 Ocultar informações de exibição na compilação 80
Fazendo o nível recarregar automaticamente após a morte 52 Portando um nível para outro computador ou compilação 80
Minimizando a distorção da lente usando o FOV da câmera 55 Desafios para aprimoramentos adicionais 80
Explorando Câmeras 55 O Design Final 80
Finalização opcional: movimento da câmera 56 Indo além 85
Final opcional: respingo e pia 56
Randomizing Pipe Materials 58
Desativando o efeito de morte do FPS no Game Start 60
10: Adicionando alvos de pontuação animados 62
Modelando as Estrelas 62
Configuração do curso para estudo autônomo 6 No Iniciador, clique em Biblioteca > Meus Ativos . Encontre o Flappy Boid
de ativos. Clique na seta ao lado e escolha Revelar no Explorer .
Se você está planejando trabalhar neste curso independente de qualquer sala de aula Clique duas vezes para abrir a pasta FlappyAssets dentro dela. Selecione
instrução, você supostamente baixou este curso do tudo nesta pasta e copie- os (Ctrl-C).
CRYENGINE marketplace e descompactou todos os ativos do curso, incluindo
7 No Iniciador, clique em Biblioteca > Meus Ativos . Clique na seta
este arquivo PDF. O ZIP irá descompactar uma pasta chamada
ao lado do seu recurso GameSDK e escolha Revelar no Explorer . Você vai
FlappyBoidCourse [version #] contendo o seguinte:
estar em uma pasta chamada gamesdk_5.5 . Abra a pasta GameSDK dentro
• Este livro : FlappyBoid [versão da versão e carta de revisão] .pdf esta. Ctrl-V ( colar ) os ativos Flappy (áudio, materiais, objetos etc.
pastas) para aqui.
• Uma pasta ScreenCaptures com imagens de alta resolução deste
8 Observe a localização desta pasta gamesdk_5.5 .
livro de curso para ajudá-lo a ver como a lógica do jogo é construída
9 No Iniciador, clique em Biblioteca > Meus Projetos . Clique no
• A pasta FlappyFinished , contendo o nível do jogo finalizado , que
Botão de importação . (GameSDK é um projeto completo, não apenas um ativo, então
você pode copiar para sua pasta GameSDK \ levels e fazer referência para ver
ele precisa ser importado como um projeto.) Navegue até o gamesdk_5.5
exatamente como tudo é construído pasta que você já abriu, então para a pasta GameSDK dentro disso.
• Uma pasta FlappyAssets contendo ativos do jogo que precisam ser movidos para Clique em OK para importar seu projeto GameSDK para o Launcher.
sua pasta do projeto CRYENGINE. Antes que você possa fazer isso, você deve
instale o CRYENGINE Launcher, CRYENGINE e o GameSDK Instalando os Ativos e o Nível do Curso
ativo do mercado, como segue:
Por fim, copie o conteúdo da pasta FlappyFinished do curso para o
pasta cryengine_5.5 \ GameSDK \ levels que você já tem aberto.
Instalando o CRYENGINE e o GameSDK
A pasta FlappyFinished contém o jogo final que você irá criar
Este curso requer o CRYENGINE 5.5 com o GameSDK 5.5 . Se você é dentro deste curso, estritamente para fins de referência. Enquanto você pode estudar e
tendo este curso como uma classe ensinada pela Crytek, a equipe pode ter pré-instalado consulte se você tiver perguntas não respondidas, a única maneira de aprender o mecanismo
software e recursos do curso em cada computador do aluno. No entanto, os passos para fazer é realmente construir o jogo passo a passo.
isso no seu computador também é descrito aqui:
Finalmente, clique no projeto GameSDK do Launcher para abri-lo. Uma vez
1. Baixe e instale o CryEngine Lançador livre de aqui por o Editor está aberto, crie um novo nível chamado “FlappyBoid” através de Arquivo >
clicando no botão Download . Note que você precisará criar um New . (Sugerimos manter seus níveis na pasta de níveis.) Aceite o padrão
conta gratuita, se você não tiver um. Se você precisar de ajuda adicional configurações de terreno . A menos que você esteja usando este programa para ensinar uma aula, você pode
Com este passo, consulte o nosso guia de instalação rápida .
pule para o primeiro capítulo do curso.
2. Inicie o Iniciador e entre na sua conta CRYENGINE.
Requisitos de sala de aula para professores
3. No Iniciador, clique em Marketplace > Marketplace . Procurar por
"GameSDK" e adicione o ativo ao seu carrinho.
tiros publicados neste livro de curso, com a vantagem de que os alunos podem ampliar 6. Use o Level Explorer para gerenciar, congelar, ocultar, renomear, vincular e
neles para ajudar a esclarecer gráficos de fluxo complexos. atribuir entidades a camadas
Para os instrutores Crytek, US Inglês ou Alemão teclado , conforme especificado 7. Controle a posição, movimento, escala e rotação de entidades através de
Gráfico de Fluxo
Um projetor HD conectado ao computador do instrutor. (1920x1080)
8. Posicione e modifique com precisão objetos usando ferramentas de alinhamento e alinhamento
Um grande quadro branco (ou placa de giz) com marcadores multi-coloridas e borracha.
9. Adicione, mova e controle câmeras e suas propriedades; controlar o
Luz no branco / placa de giz, mas não na tela de projeção. visão do jogador
1. Certifique-se de avisar os alunos com antecedência para levar fones de ouvido , 11. Detectar e reagir a colisões entre entidades
uma caneta ou lápis e marca- texto para fazer anotações no livro de exercícios do curso, 12. Use e acione efeitos de partículas
e um pen drive para que eles possam levar para casa o jogo finalizado. 13. Script e controle de eventos de áudio e ambiente
2. Siga os passos acima para instalar o CRYENGINE Launcher, 14. Mecânica do jogo de script e pontuação usando o Flow Graph
CRYENGINE, GameSDK e os ativos do curso.
15. Use ativos e funcionalidades do GameSDK gratuito (Software
3. Recomendamos que você tenha alunos configurados cVar sys_asserts = 0 e Kit de desenvolvimento)
log_verbosity -1 ou 0 para reduzir alertas em todos os sistemas e para reduzir o
16. Modifique e desative seletivamente a funcionalidade GameSDK
número de perguntas que eles podem produzir.
4. TESTE e certifique-se de que 5.5 esteja funcionando bem em todos os sistemas. 17. Exporte um jogo finalizado para um executável independente e teste-o
Pré-requisitos
Cada passo importante dentro de um capítulo começa com um cabeçalho neste formato:
Se você não tem experiência com o CRYENGINE, por favor, dedique alguns minutos para
Título do Tópico
leia nosso Designer Quick Start antes de começar este curso. Ele irá apresentar-lhe
Os conceitos e objetivos são explicados primeiro, seguidos pelo passo a passo às noções básicas da interface do Editor, navegação, as ferramentas e criação de um nível -
instruções para alcançá-los. Além disso, cada um dos principais capítulos em tópicos que você precisará entender antes de começar este curso.
este livro foi incluído neste projeto CRYENGINE como um nível separado Caso contrário, este curso pressupõe zero conhecimento prévio do desenvolvimento do jogo ou
que inclui o trabalho finalizado até o final desse capítulo. Por exemplo, o motores de jogo. Você precisará estar confortável navegando pelo Windows
O nível Flappy01 mostrará como seu jogo deve ficar depois de terminar o sistema operacional, File Explorer e usando o mouse. Monitores duplos são
passos no Capítulo I. útil no desenvolvimento de jogos (muitos desenvolvedores usam três monitores)
Dicas sobre o melhor práticas parecem número de ferramentas utilizadas, mas certamente não é necessário.
esta:
Dica Pro :
Fluxogramas podem rapidamente ficar muito
Adicionando uma Entidade de Player Simples a massa padrão de -1 diz ao mecanismo para fazer um objeto “dormir” -
Imóvel pelas forças da física, como a gravidade.
Enquanto estamos finalmente indo para criar uma entidade de jogador semelhante a um pássaro com movimento A geometria padrão para um RigidBodyEx é uma esfera . Dadas as complexidades
asas, vamos começar com uma esfera geométrica simples como o nosso jogador para de animação, isso é útil neste curso introdutório, como podemos nos concentrar
Mantenha as coisas simples. na lógica do jogo por agora, e substitua a esfera por um pássaro animado depois.
CRYENGINE Flappy Boid Course Ver. 5.5D -6- 01: Construindo os Ativos, Visualização e Funcionalidade Básica
Propriedades e Estratégias Físicas começa a reagir às forças da física. Não se esqueça de atribuir uma massa para
qualquer coisa que você queira se comportar de maneira realista; o valor padrão -1 não é massa.
Algumas notas sobre algumas propriedades-chave do tipo de entidade RigidBodyEx:
CRYENGINE Flappy Boid Course Ver. 5.5D -7- 01: Construindo os Ativos, Visualização e Funcionalidade Básica
Existem nós que executam funções matemáticas que afetam o
aparência ou posição ou movimento de entidades, reproduzir sons, fazer chover e
que faz praticamente tudo que o CRYENGINE pode fazer. Uma boa maneira de
entender o que um nó faz para passar o mouse sobre suas entradas e saídas
e leia as dicas de ferramentas que aparecem.
Você pode editar os valores das portas na janela Propriedades ou simplesmente dobrar
clique em uma porta para editar seu valor:
CRYENGINE Flappy Boid Course Ver. 5.5D -8- 01: Construindo os Ativos, Visualização e Funcionalidade Básica
personagem, mas também deve ver uma grande mensagem “Hello, world!” no apenas outra entidade. O jogo não é
tela. atribuir qualquer comportamento padrão ao nosso
esfera, nem pensa nisso como Dica Pro :
Mais algumas dicas rápidas: use a roda de rolagem do mouse para ampliar e
Embora a tecla de barra de espaço no
em um gráfico. Movimente-se com o botão direito do mouse. (O gráfico é virtualmente jogador. Temos que programar o seu
Plataforma PC faz o jogador
infinita) Agora que terminamos de testar, arraste o mouse em torno de ambos os nós para funcionalidade manualmente. saltar para o ar, não há
barra de espaços em plataformas de console; Está
selecione- os e pressione delete para removê-los.
Respondendo ao salto um botão diferente por completo. assim
em vez de ouvir o
Primeiro Mecânico de Jogo: a Ação de Salto Açao chave da barra de espaço especificamente, queremos
para responder à ação "pular"
O controle do jogador neste jogo é muito simples: cada vez que o "salto" ação Estamos prontos para ligar para o nosso motor de física (acionado pelo console específico
é acionado ( barra de espaço em uma plataforma de PC), nosso pássaro precisa pular para cima para realmente realizar o salto! botão ).
contra a força descendente constante da gravidade:
1 Nos nós do Flow Graph
1 Adicione um nó Entrada > ActionMaps > ActionListener ao gráfico. janela, arraste o
2 Adicione um ator : nó LocalPlayer ao gráfico. LocalPlayer é o Física : Nó ActionImpulse no lado direito do seu gráfico.
Entidade de jogador embutida no jogo. Cada entidade tem um único, interno 2 Selecione sua entidade FlappyBoid na Perspectiva Perspectiva.
ID numérica (um inteiro).
3 Clique com o botão direito no seu nó ActionImpulse e escolha Atribuir
3 Vamos dizer ao ActionListener qual entidade ouvir: arraste o ID da entidade Entidade Selecionada para forçar o nó a afetar a entidade da esfera.
porta de saída do nó LocalPlayer para a porta de entrada Escolher Entidade
4 Conecte a saída pressionada do nó ActionListener ao
do nó ActionListener . A entrada "Escolher Entidade" agora está marcada
Ativar entrada do nó ActionImpulse . Isso significa que o "salto"
“<Entidade de Entrada>.”
ação (tecla de barra de espaço na plataforma do PC) agora
4 Clique no seu nó ActionListener para ativá -lo. ação que estamos prestes a atribuir.
5 Na janela Propriedades do Flux Graph , clique na caixa de valor para 5 Selecione o nó ActionImpulse e defina o eixo Z de seu Impulse
o direito de Ação . O botão .. será exibido. Clique nele e escolha parâmetro para 80 assim que a ação de salto vai empurrar o pássaro para cima. Dentro
o jogador > pula ação. Clique OK . termos de quão grande esta força deve ser, é apenas uma questão de
6 Vamos permitir que esta ação de escuta comece quando o jogo começar: experimentação, e também é uma decisão criativa significativa que tem um
clique com o botão direito na tela do Flow Graph e escolha Add Start Node . grande efeito na "sensação" do seu jogo. Quanto menor a força, mais
Como o nó Game: Start é usado com tanta freqüência, este é apenas um atalho muitas vezes o jogador terá que tocar na tecla de salto, e quanto mais controle
para adicioná-lo rapidamente. eles têm. O maior a força, os menos frequentemente as principais necessidades salto para
ser pressionado - mas o mais forte e menos controlado a reação será.
7 Arraste o nó Saída do jogo : Iniciar para a entrada Ativar do
Nó ActionListener . 6 Um aprimoramento opcional para a ilusão de movimento para frente seria
para girar a nossa bola no sentido horário, (embora isso não faria sentido para um
O jogador padrão (o personagem de tiro em primeira pessoa) recebe o "salto"
pássaro). Para fazer isso, adicione um impulso angular de -.3 no eixo Y.
comando. O ID da entidade do jogador é agora o que o nó ActionListener é
escutando. Agora só temos que responder a esse sinal fazendo nosso "pássaro" Vamos nos colocar em uma posição onde podemos ver se o nosso "pássaro" está respondendo
Pule. Note que a nossa entidade de aves NÃO é o jogador padrão; para o motor, é para o salto. No menu principal, escolha Nível > Ir para posição e digite
CRYENGINE Flappy Boid Course Ver. 5.5D -9- 01: Construindo os Ativos, Visualização e Funcionalidade Básica
coordenadas de 515, 500, 34 e uma rotação Z de 90⁰. Você deveria estar sentado em alguma diversão atirando na esfera e fazendo-a rolar para longe se você quiser.
nível dos olhos no terreno com a sombra do jogador à sua frente.
Antes de prosseguirmos, vamos criar uma documentação rápida em nosso
Vamos testar! Salve primeiro e depois Ctrl-G para alternar para o modo de jogo. Fluxograma para facilitar a compreensão de outros desenvolvedores - agora
nos mencionamos enquanto tentamos depurar jogos complexos mais tarde! Completo
Até agora, a configuração de tiro em primeira pessoa ainda está controlando onde o nosso jogador está
documentação é uma prática recomendada essencial ao desenvolver jogos ou qualquer
inicialmente gerada (onde quer que a câmera esteja quando começamos o jogo,
Programas.
mas forçado pela gravidade até o terreno, se já não estiver nele), e a visão que nós
veja, que é sempre da cabeça do jogador, olhando para as mãos (ou Clique com o botão direito do mouse no seu gráfico e adicione uma caixa de comentários chamada “CONFIGURAÇÃO
rd INICIAL”.
Redimensione -o de modo a envolver os nós que criamos até agora.
ligeiramente atrás dele, se você usar F1 para mudar para 3 perspectiva pessoa).
Se você rapidamente usar o botão direito do mouse para olhar para cima , você verá nosso pássaro Clique com o botão direito do mouse e adicione um simples comentário chamado "mover Flappy para cima".
esfera caindo para o terreno. Depois que ele cai no chão, pressione a barra de espaço Posicione-o sobre o nó ActionImpulse .
chave. Você, o jogador, vai pular - mas também o seu "pássaro"! Você pode ter
Através dessas anotações simples, começamos a criar uma auto-documentação
CRYENGINE Flappy Boid Course Ver. 5.5D - 10 - 01: Construindo os Ativos, Visualização e Funcionalidade Básica
jogos! 525 X, 500 Y, 32 Z. Nosso jogo será construído a 100m no ar (68m
acima do terreno), então nunca vamos ver este jogador.
Como sempre, consulte a captura de tela em seus materiais Flappy ou imprima aqui para
veja como deve ficar o seu Gráfico de Fluxo. Você pode achar mais fácil Por que 32 no eixo Z? 32m é a altura padrão do terreno, então fica
entender olhando para uma foto do que lendo as etapas escritas. (O um pouco acima do oceano a 16m (permitindo-lhe esculpir vales acima do
O gráfico de fluxo de configuração inicial concluído para este capítulo é impresso no final do linha d'água, por exemplo). Se colocarmos nosso jogador no ar com nossos outros
capítulo.) entidades, a primeira coisa que vai acontecer no início do jogo é que a gravidade vai enviá-lo
caindo no chão, onde ele vai "morrer", agitando a câmera no
Modificando a funcionalidade do SDK do jogo processo. Colocá-lo a 32m garante que aguarda em silêncio!
2. Apenas para manter as coisas claras, renomeie seu objeto Spawn Point
Você deve ter notado que o CRYENGINE
"SpawnPoint_Player"
O iniciador solicita que você escolha um modelo .
Dica Pro : Nós vamos usar o nosso SpawnPoint_Player como um ponto de referência no espaço 3D onde nós
Entre eles estão os jogos de tiro em primeira pessoa (ou seja,
Existem várias maneiras de adicionar
GameSDK), scroller lateral, rolando bola, terceiro pode forçar o atirador na primeira pessoa a aparecer no início do jogo, com segurança fora de vista:
nós para o Fluxograma: a partir do
pessoa, isométrica, etc. Janela de nós; clicando com o botão direito e 3. Verifique se o seu SpawnPoint_Player está selecionado e, em seguida , clique com o botão direito em
escolhendo Adicionar ; e pressionando o botão
A única diferença entre esses modelos é a área do gráfico da sua ferramenta Flow Graph e escolha Adicionar selecionados
Tecla Q e digitando o nome do nó.
Entidade . Um nó denominado entity: SpawnPoint é exibido. Isso ilustra um
a funcionalidade fornecida com o modelo O último caminho é mais rápido, mas você
já deve saber o que você está importante conceito de Fluxograma: você pode adicionar entidades como nós diretamente
que controla a posição padrão e
procurando, tornando-se um perito para um gráfico! As entradas e saídas dos nós da entidade se sobrepõem a outras
perspectiva do jogador. O motor em si
ferramenta. Nós do Flux Graph, mas às vezes essa é a escolha certa.
continua o mesmo.
4. Vamos forçar o jogador a desovar (comece a sua existência) no
Nosso jogo foi criado usando o CRYENGINE
SpawnPoint_Player toda vez que o jogo começa : arraste a partir do
Game SDK , que contém ativos e funcionalidades do CRYSIS 2, um primeiro
Saída do Jogo: Comece nó para o spawn de entrada de Spawn
jogo de tiro em pessoa . Enquanto nós precisamos de alguns jogos do SDK
Nó de ponto.
funcionalidade, nós realmente precisamos eliminar o atirador de primeira pessoa HUD
5. Vamos começar a ouvir a tecla de salto (ouvida pelo jogador) assim que
(heads-up display, como computação gráfica sobre munição e saúde
como o jogador gerou: arraste a saída Spawn do SpawnPoint
sobreposta dentro de um capacete) e câmera em nosso jogo.
nó para a entrada Ativar do nó ActionListener .
Nós vamos fazer isso através da criação de um ponto de desova onde podemos esconder o padrão
Antes de testarmos o que construímos, torne a sua posição na câmera algo diferente
jogador, porque vamos controlar a visão do jogador com uma câmera que
do que onde está o ponto de desova.
é dissociado da entidade do jogador. Um ponto de desova é simplesmente um lugar onde
você pode inicialmente posicionar seu player quando um nível é carregado. No caso de querermos usar isso como nosso ponto de partida de teste novamente, vamos salvar este
localização para que possamos voltar facilmente: no menu , escolha Exibir>
Escondendo o jogador de tiro e o HUD Localização> Lembrar Localização> Lembrar Localização 1 . Note que estes
locais salvos existem apenas dentro do Editor , não dentro do jogo
1. Na ferramenta Criar objeto , escolha Entidades herdadas > Outros e meio Ambiente. Para voltar aqui no futuro, pressione Ctrl-F1 . Você pode salvar
clique duas vezes em SpawnPoint . Coloque seu ponto de origem man-in-a-box em locais para todas as 12 teclas de função.
CRYENGINE Flappy Boid Course Ver. 5.5D - 11 - 01: Construindo os Ativos, Visualização e Funcionalidade Básica
Salve e teste. Você notará que ainda vemos as mãos e a arma do FPS 1. Na ferramenta Criar objeto , clique em Misc > Câmera .
jogador, mas aviso onde são : o jogador começa exatamente onde nós colocamos a nossa 2. Clique no Perspective Viewport para adicionar sua nova câmera. Posicione
Spawn Point! É isso que nossa lógica do Fluxograma realizou. Nós temos em 482, 523 , 100 .
controlou com sucesso a posição do jogador no jogo.
3. Defina sua rotação Z para 180, de forma que esteja apontada para FlappyBoid.
Note que com o template GameSDK, você também pode pressionar F1 para alternar
4. Renomeie o objeto da câmera “ FlappyCam ”.
entre a perspectiva da primeira e da terceira pessoa.
Se você está curioso sobre o que esta câmera está vendo, você pode clicar no
Observe também que quando você ESC sai do modo de jogo, todas as suas entidades são Botão da câmera no canto superior esquerdo da janela de visualização e clique em
exatamente onde você os deixou. na Entidade da Câmera> FlappyCam . Você agora vê o que sua FlappyCam vê!
Tenha em mente que você ainda controla o tamanho e a forma da sua viewport, que
Impedindo o jogador de tiro de andar afeta o seu campo de visão, enquanto a janela do jogador será finalmente
fixo. Assim, esta não é uma visão exata. Experimente F11 - visualização em tela cheia.
1. Em seguida, vamos parar o jogador não utilizado de andar por aí. Adicione uma entrada
> ActionMaps> ActionFilter node para seu fluxograma. Você poderia usar as viewports 2D para ajustar a posição da câmera enquanto
vendo o resultado, mas por enquanto vamos voltar para a câmera padrão por
2 Clique para certificar-se de que o nó ActionFilter esteja selecionado.
clicando em Câmera> Padrão .
3 Na janela Propriedades do Flux Graph , você verá o nó selecionado
Entradas na parte superior e abaixo dela, Filtro destacado em azul. Clique em
Definindo uma câmera padrão
o botão .. à direita do botão azul Filter.
4 Na lista de ActionFilters que aparecem, escolha no_move e Precisamos dizer ao jogo para definir
Clique OK. FlappyCam como a visão do jogador quando
o jogo lança:
5 Conecte a porta de saída do Spawn da entidade : nó SpawnPoint ao
Ative a porta de entrada do modo ActionMaps. 1 No Fluxograma, adicione uma câmera
Vamos testar para ver o que isso conseguiu. Vamos também ativar o Fluxograma > Visualizar o nó na tela.
depuração para que possamos ver o que o Flow Graph está fazendo: escolha Depurar> 2 Na janela de perspectiva,
Ative a Depuração (ou clique no ícone do bug). Salve e pressione Ctrl-G para entrar clique no seu FlappyCam para
modo de jogo. Você notará que, embora você, enquanto o jogador ainda pode olhar ao redor, selecione -o.
o jogador não pode se mover. (WASD não move mais o player.) No Flow 3 Clique com o botão direito no seu
Nós do gráfico, você verá as ações sendo executadas em amarelo . Câmera : Exibir gráfico de fluxo
Agora só precisamos criar uma câmera apontada para o nosso "pássaro" para substituir o nó e escolha Atribuir
Entidade Selecionada para atribuir o
perspectiva de tiro em primeira pessoa não utilizada.
FlappyCam para este nó.
CRYENGINE Flappy Boid Course Ver. 5.5D - 12 - 01: Construindo os Ativos, Visualização e Funcionalidade Básica
A câmera agora está ativada como a visão do jogador no início do jogo. Entendendo os tipos de dados do gráfico de fluxo
Vamos testar! Ctrl-S para salvar e Ctrl-G para entrar no modo de jogo.
Você deve ter notado que as entradas e saídas dos nós do Flux Graph têm um
Voila, vemos imediatamente a visão do FlappyCam do seu player variedade de cores . Essas cores indicam o tipo de dados , da seguinte maneira:
O terreno!
Verde qualquer tipo de dados
Em seguida, vamos remover as miras que ainda estão atrasadas do FPS
Vermelho inteiro
funcionalidade. As miras fazem parte do HUD (Heads Up Display). Está
a visibilidade é controlada por meio de uma variável do console (normalmente chamada de cVar). Azul Booleano (verdadeiro / falso ou 0/1)
2 Na janela Propriedades do Flux Graph , defina o C Var (Console Um dos aspectos do Flow Graph que facilita o uso de um
Variável) para hud_hide e o valor para 1 (verdadeiro).
ambos os sistemas. Ao lado desse botão na barra de ferramentas, você também tem botões para consideração. Um exemplo comum é o tipo Vec3 (amarelo), que na verdade
através do jogo um quadro de cada vez, e para parar a física e AI consiste em três números de ponto flutuante: X, Y e Z, que coletivamente
simulação. Uma vantagem dessas ferramentas é que você ainda pode ver entidades que descreve a posição 3D. Se você precisar extrair um desses valores, precisará
são invisíveis no modo de reprodução - muito útil para depuração. use um nó FromVec3 , que divide os dados do Vec3 em três valores separados,
como mostrado aqui. Nós vamos fazer exatamente isso mais tarde no curso.
CRYENGINE Flappy Boid Course Ver. 5.5D - 13 - 01: Construindo os Ativos, Visualização e Funcionalidade Básica
CRYENGINE Flappy Boid Course Ver. 5.5D - 14 - 01: Construindo os Ativos, Visualização e Funcionalidade Básica
CRYENGINE Flappy Boid Course Ver. 5.5D - 15 - 01: Construindo os Ativos, Visualização e Funcionalidade Básica
02: Configurando a lógica inicial quando absolutamente necessário. Ping na CPU com centenas de
solicitações complexas para respostas instantâneas arriscam
o computador e criar um desempenho lento. Dentro
Fazendo a câmera seguir o player
hora do computador, há uma grande diferença entre o NOW e
Já que estamos planejando apenas permitir que nosso pássaro pule e caia (não 1/100 de segundo a partir de agora!
mover nos eixos X ou Y), presumivelmente poderíamos apenas definir nossa câmera inicial Lembre-se, nós queremos que o FlappyCam siga o FlappyBoid em um número suficiente
posição para ver o pássaro e tubos suficientes que o jogador pode evitá-los, e distância para poder vê- lo (bem como o primeiro par de tubo que se aproxima
ser feito com isso. No entanto, há um problema em potencial: e se o jogador pular
obstáculos). Enquanto nós poderíamos alimentar o Pos (posição) do FlappyBoid diretamente
tão alto ou desce tão baixo que eles vão para fora de vista de nossa câmera? para o movimento de FlappyCam : nó MoveEntityTo , que posicionará o
Uma abordagem opcional é forçar nossa câmera a seguir nosso player enquanto ele se move câmera exatamente onde o pássaro em si é - e não seremos capazes de ver o pássaro!
para cima e para baixo. Até certo ponto, isso é uma questão de preferência pessoal, Em vez disso, precisamos compensar a posição da câmera a partir da posição da ave:
embora cada abordagem introduza suas próprias complexidades. 6. Adicione uma Vec3 : SubVec3 nó. Este nó simplesmente nos permite passar o
Por agora, vamos fazer a câmera siga o jogador simplesmente compensar o entrada posicional de A compensada pelos valores que colocamos em B.
Posição da câmara FlappyCam em relação à posição actual do 7. Defina os valores B do nó SubVec3 (o deslocamento) como 10, -20,0. Isso vai
Entidade FlappyBoid: coloque a câmera um pouco para trás e para a direita do pássaro para que haja
espaço para ver os obstáculos de tubulação que iremos adicionar mais tarde.
1 Abaixo da seção INITIAL SETUP do seu Flow Graph, vamos adicionar um
Entidade : EntityPos (posição) nó. Atribuir a entidade FlappyBoid para 8. Arraste a saída Pos do nó EntityPos para a entrada A do
este nó. Isto irá consultar posição 3D atual do FlappyBoid cada Nó SubVec3 . Arraste o nó Out of the SubVec3 para o destino
quadro do jogo. e Iniciar entradas do nó MoveEntityTo.
2 Adicione um nó Movimento : MoveEntityTo . Isso nos permite aproveitar Vamos testar ! Ctrl-S, Ctrl-G. Você pode sentir que a câmera segue o pássaro também
controle sobre a posição de uma entidade e movê-lo para lá de um determinado fielmente, que a câmera sacode muito rapidamente. Tente ajustar o valor (resposta
período de tempo ou a uma velocidade fixa . Observe que o MoveEntityTo é somente tempo) do MoveEntityTo para 0,5 segundos. Teste e você pode sentir que o
apropriado para entidades que não estão sendo afetadas pela física - ou seja, o movimento da câmera é mais natural e suave.
que não têm massa (-1). Caso contrário, as forças da física vão "lutar"
Coloque uma caixa de comentários em torno desta seção do seu Flux Graph e chame-a
com a força bruta do MoveEntityTo.
algo como Camera Follows Player .
3 Atribua a entidade FlappyCam ao nó Movement : MoveEntityTo .
5 Altere o parâmetro Value Type para time e defina seu Value para 0,01 . o céu - nós vamos estar escondendo o terreno, então haverá
Isso efetivamente fará com que a câmera se reposicione tão rapidamente nenhum ponto visual de referência para indicar que alguma coisa está se movendo
em relação ao jogador que parecerá ser instantâneo. exceto as bordas da visão da câmera.
CRYENGINE Flappy Boid Course Ver. 5.5D - 16 - 02: Configurando a lógica inicial
O único problema é que agora temos uma esfera simples sem textura , então
mesmo que a esfera esteja girando, não poderemos ver ! Vamos adicionar um
textura da superfície para tornar a fiação visível.
CRYENGINE Flappy Boid Course Ver. 5.5D - 17 - 02: Configurando a lógica inicial
03: Adicionando os Obstáculos da Tubulação transformações aplicadas a ele - como você viu quando praticamos a adição de pedregulhos
para o nosso terreno (parte deles foi colocado "underground")
Considerações sobre design de jogos Vamos dar uma olhada na parte do tubo que está se escondendo sob a superfície do
terreno.
Nosso pássaro está voando e voando, mas isso não será muito um jogo até que
1 Primeiro, certifique-se de que as colisões entre a câmera e o terreno estão desativadas (clique no botão
ave alguns obstáculos para navegar. Esquivá-los resultará em pontos ; colidindo
Menu da câmera no canto superior esquerdo da janela de exibição Perspective
com eles significa morte instantânea !
desmarque- o).
Outro aspecto a considerar é que este é um tipo de jogo de “rolagem infinita” - como
2 Clique e arraste o botão do meio do mouse para baixo até voar abaixo
Enquanto o jogador vive, continua a marcar incessantemente pontos; Não há fim O terreno. Você pode querer diminuir o zoom para ver toda a extensão do tubo
para este jogo. No entanto, como a maioria dos jogos, nós no oceano.
quero que os desafios se intensifiquem. Então, mais tarde, nós vamos
3 Neste ponto, podemos também esconder o terreno , já que este é um "aéreo"
adicionar aceleração à velocidade dos tubos como
Dica Pro : jogo que não requer um plano de terra. Clique no display azul
a pontuação do jogador aumenta.
Se um objeto alguma vez desaparecer botão no canto superior direito da janela de exibição Perspective , role para
vista, uma maneira fácil de encontrar é Tipos de renderização e desmarque o terreno .
Adicionando os Tubos selecione seu Viewport Perspectivo
e pressione a tecla G para mover o 4 Se você inclinar sua câmera e olhar para baixo, você verá agora o oceano que
Usaremos outra entidade do Corpo Rígido para o câmera para ele. (Ou Nível > Ir para estava escondido em seu terreno. Vamos nos livrar disso: no terreno
tubos. Nós não temos necessidade de deformar a forma de Seleção no menu.) Editor , clique em Editar > Remover Oceano no menu. (Você também pode
os canos, corpos tão rígidos vão funcionar bem. escolha deixá-lo lá se você gosta da aparência.)
1. Use a ferramenta Criar objeto e 5 Use a ferramenta Propriedades para renomear seu pipe pipe1_bottom .
Clique duas vezes Entidades do Legacy > Física > RigidBodyEx . 6 Vamos mover nosso cachimbo para o ar onde precisamos: definir sua posição para
2. Clique no seu nível para adicionar sua entidade RigidBodyEx. Ele aparecerá como um 485, 500, 96 .
esfera no terreno. Nós temos a forma da nossa entidade de pipe, mas ainda precisamos de uma textura de superfície :
3. Vamos substituir a esfera padrão por uma entidade de pipe que já 7. Com o pipe ainda selecionado, clique no ícone da pasta ao lado de Propriedades
modelado para você. Na janela Propriedades > Propriedades da Lua , clique em > Geral > Material e selecione uma textura que você gosta. Nós usamos
o ícone da pasta à direita da propriedade Model . Navegue até GameSDK> material> genérico> concreto> roof_tar_paper_01
GameSDK > objetos > adereços > flappy_boid e clique em um cano que você nas nossas capturas de tela.
como dos vários fornecidos.
Você perceberá que é muito difícil avaliar como sua textura
Você verá o que parece um anel grosso no terreno. Na verdade, este é o parece por causa da iluminação padrão : o sol está diretamente em cima . Nós podemos
“Labio” de um cano grande, mas tudo exceto o labelo está oculto sob o controlar que usando o Editor de Ambiente:
terreno.
É importante entender que quando você adiciona entidades ao seu nível, Ajustando a iluminação usando o editor de ambiente
modelador pré-definiu o pivô - o ponto central para a entidade e qualquer
No menu principal, escolha Ferramentas > Editor de Ambiente .
CRYENGINE Flappy Boid Course Ver. 5.5D - 18 - 03: Adicionando os Obstáculos da Tubulação
Expanda essa paleta de ferramentas para ver a linha do tempo. Você notou que por 2. Gire 180º de modo que a cabeça fique voltada para o tubo inferior. Certifique-se de encaixar
Por padrão, um novo jogo começa no meio - dia no equador do planeta Terra. que para ângulo é ativado e definido para 90 ⁰ . Clique e arraste o arco branco ou vermelho
significa que o sol está diretamente acima da cabeça - normalmente não é ideal a partir de uma iluminação para girar 180º. Mova -o para 485, 500, 104. Isso deixa uma vertical de 8m
ponto de vista. Existem três fatores principais que afetarão nossa iluminação: intervalo entre o tubo para o seu jogador para navegar.
1. Hora do dia , representada pela linha do tempo no canto superior direito 3. Renomeie seu pipe1_top top pipe .
(atualmente 12:00) 4. Verifique se o seu tubo superior está exatamente em 485, 500, 104 . Você pode usar o snap
2. direção do Sol (canto inferior esquerdo) para gridar ou editar as Propriedades> Transformar para posicionar o tubo no
posição exata.
3. Latitude , representados pelo Norte Pole..Equator..South Pole deslizante
inferior esquerda
Adicionando um Trigger de Pontuação
Primeiro, tente arrastar o cursor da hora do dia . Enquanto você verá algumas mudanças,
quando estamos no equador, o sol viaja no seu caminho mais alto Agora que temos nosso primeiro conjunto de obstáculos de tubulação, precisamos detectar quando o
o céu - diretamente acima do meio-dia. jogador colide com eles - ou quando passa limpa através do intervalo entre
os tubos, e deve ser premiado com um ponto.
Restaure a hora do dia exatamente ao meio-dia , digitando 12h na caixa Atual .
Vamos lidar primeiro com a pontuação: como podemos detectar quando a ave passa
Vamos ajustar nossa latitude (posição norte-sul em relação ao equador) para obter
a lacuna entre um par de tubos? Não há nada lá para sentir uma colisão, por
o sol viajando através de um caminho mais baixo no céu . Ajuste o norte
exemplo. (Lembre-se também que os canos e, portanto, as lacunas entre eles
Pole..Equator..Slide do polo sul até que a luz esteja vindo da frente direita
esteja sempre em movimento!)
a cerca de um ângulo de 45 graus. (Lembre-se, nossa esfera acabará se tornando um
pássaro de frente para a direita, então provavelmente queremos ver Para conseguir isso, usaremos uma entidade chamada de Gatilho de Proximidade - um
cara.) caixa invisível que pode detectar quando outra entidade cruza seus limites
Nós usamos uma direção do sol de 240⁰ e uma latitude de 165⁰ Não precisa ter a mesma forma dos canos; ele simplesmente precisa ser tão amplo quanto
às 12:00 no nosso exemplo. o diâmetro dos tubos no eixo Y ( perpendicular à direção do
jogo) e pelo menos tão alto quanto o fosso para que o pássaro é certo para tocá-lo como é
Adicionando o tubo superior atravessa a lacuna.
A imagem aqui mostra esses gatilhos de proximidade: 1x5x10m - uma forma fina como
Vamos adicionar outro tubo acima deste com as duas cabeças voltadas uma para a outra.
larga como o diâmetro dos tubos. O pássaro vai colidir com o tubo antes dele
A lacuna entre os tubos superior e inferior será a lacuna através da qual o
colide com o gatilho de pontuação, para que possamos estender com segurança o comprimento do nosso
jogador deve navegar sem colidir . Assim, quanto menor a lacuna, mais difícil
pontuação desencadeia a 10m para se sobrepor com os tubos um pouco.
o jogo. Vamos tentar 8m:
A sobreposição não deve ser um problema, pois o jogador colidiria com o
1. Certifique-se de que o pipe1_ bottom esteja selecionado . Queremos arrastar uma cópia do
fora do tubo antes de acertar o gatilho de pontuação dentro dele. Mesmo se passa
para cima. Pressione Ctrl-D para duplicar . Sua cópia aparecerá e você
pode arrastá-lo para cima oito metros (Z = 104). DICA : para posicionamento preciso, através da pontuação disparar em um ângulo vertical e, em seguida, rozes a parte superior ou inferior
verifique se a paleta Propriedades > Transformar está visível e observe de um dos canos, não há problema em marcar antes da morte. Vamos
as coordenadas XYZ conforme você arrasta a duplicata. Em alguns casos, pode crie-os:
será mais fácil usar a ferramenta Mover depois de ter feito a duplicação.
CRYENGINE Flappy Boid Course Ver. 5.5D - 19 - 03: Adicionando os Obstáculos da Tubulação
1 Usando a ferramenta Criar objeto , arraste as entidades herdadas > Triggers > 8. Copie e cole o nome da sua entidade FlappyBoid no
ProximityTrigger em qualquer lugar na janela de exibição Perspective. Propriedades do acionador de proximidade > Propriedades de Lua > Somente selecionadas
2 Vamos alinhar o Gatilho de Proximidade exatamente com a posição do nosso Entidade caixa por isso só irá responder a colisões com o nosso pássaro.
4 Pressione P ou clique no botão Snap To Pivot top right in your pipe1Score_trigger até 4m, então é exatamente centralizado na lacuna de 8m
Perspectiva de perspectiva. entre os tubos superior e inferior. (Grid de encaixe é o botão
diretamente à direita do botão Exibir no canto superior direito do
5 Você notará que o topo da janela de exibição Perspective diz "Pick Object".
a janela de exibição Perspective. Clique e segure para definir o valor.)
Clique no tubo inferior. O gatilho de proximidade está perfeitamente alinhado
e centrado sobre a cabeça do tubo. 11. No Level Explorer , arraste o pipe1Score_trigger para pipe1_
fundo para ligá- lo. Pipe1_bottom agora é o objeto pai; movendo o
Se você tiver dificuldade em selecionar o gatilho de proximidade, use o Level Explorer para
tubo também irá mover o gatilho.
congelar pipe1_bottom para que você não pode selecionar -lo: selecione a entidade pipe1_bottom e
Criamos os gatilhos de pontuação. Vamos adicionar a lógica de pontuação do Fluxograma em um
Clique na coluna Congelada mais à direita ao lado da entidade pipe1_bottom. Está
capítulo subseqüente.
o identificador escurecerá e você poderá selecionar facilmente o gatilho de proximidade.
6. Alterar as propriedades do acionador de proximidade > Propriedades de Lua> Dim DESAFIO : Considere como melhor detectar colisões
X / Y / Z para 1, 5, 8 . Certifique-se de não editar o Transform> Scale entre os canos e o pássaro. Devemos usar proximidade
propriedades por acidente! Aqueles não têm efeito sobre as dimensões de um gatilhos?
proximidade, já que não são entidades físicas.
7. Porque o nosso jogo é baseado no jogo de tiro em primeira pessoa Game SDK Existe uma maneira de evitar a adição e codificação de oito "morte"
framework, mas não estamos realmente usando a entidade de jogador, precisamos gatilhos de proximidade que coincidam com as dimensões de cada
sentido quando outras entidades que não o jogador padrão não utilizado colidem com tubo? Temos que usar gatilhos de proximidade? Nós
esse gatilho de proximidade. No painel Propriedades > Propriedades de Lua , precisa programar cada tubo para detectar uma colisão?
Desmarque Somente Player .
Você tem algum tempo para considerar a melhor abordagem; bem
abordar isso em um capítulo posterior.
CRYENGINE Flappy Boid Course Ver. 5.5D - 20 - 03: Adicionando os Obstáculos da Tubulação
CRYENGINE Flappy Boid Course Ver. 5.5D - 21 - 03: Adicionando os Obstáculos da Tubulação
04: Adicionando o texto "Game Over" Vinculação vs. Agrupamento
6 Vamos mudar a caixa copiada para a letra “G:” clique no ícone da pasta
à direita da propriedade Model em Propriedades > Propriedades de Lua
ferramenta. Selecione o "G" do GameSDK > objetos > adereços > misc >
3dtext . Dica Pro :
Quaisquer transformações aplicadas a um
7 O "G" está lá, mas a transformação distorceu sua forma. Repor tudo
posição inicial da entidade são
três valores em Propriedades > Transformar > Ajustar para 2 em todos os eixos.
lembrado em suas propriedades (não
8 Atribua seu “G” uma Missa de 200 . os passos dados, mas o resultado final
9 Duplique seu "G" e mova-o para a direita. Use Grid Snapping para do movimento / rotação / escala).
ajudar você.
11. Repita este processo até ter seu texto “GAME OVER” olhando
Boa. Ajuste a largura da caixa abaixo do texto, se necessário. Usar
sua viewport 2D frontal ou esquerda para ajudá-lo a alinhar as coisas.
12. É sempre uma boa prática nomear bem suas entidades e uma grande ajuda
com depuração . Nomeie suas cartas gameOverText_G etc.
CRYENGINE Flappy Boid Course Ver. 5.5D - 22 - 04: Adicionando o texto "Game Over"
05: Adicionando um fundo de céu em movimento 2. Na ferramenta Legado do Material Editor, clique no botão Add New Item .
3. Nomeie seu material flappyBG e salve -o na sua pasta Materiais .
Desde que sabemos que nossos tubos vão se mover da direita para a esquerda enquanto o nosso pássaro 4. À esquerda Selecione seu material flappyBG .
só se move para cima e para baixo, a ilusão de que o pássaro está se movendo horizontalmente
5. Desça até Advanced > Texture Maps > Diffuse . Clique em …
seria muito reforçada por um fundo . Você não precisa mergulhar profundamente
botão e navegue até GameSDK > materiais e selecione o
em teorias de Einstein da relatividade do movimento para ver que, se o fundo
arquivo cloudtiling_diff.dds . Note que esta é uma textura que nós preparamos
está se movendo, vai sentir como o pássaro está se movendo na direção oposta. que telhas (repete) sem problemas.
Para fazer isso, criaremos uma caixa simples usando nosso whiteboxing (prototipagem 6. Clique no botão superior esquerdo no Material Editor para atribuir essa textura
modelagem) Designer ferramenta e textura- lo com uma imagem de um céu azul com para o nosso Designer Box. Se você ampliar, você verá muitas nuvens lado a lado
nuvens e faça a textura da nuvem se mover da direita para a esquerda. Enquanto a câmera através de sua caixa, mas eles são muito pequenos.
não enxerga além do limite do nosso "céu", a ilusão funcionará. NOTA : é
útil manter o Terreno visível durante esta seção. Escalando a textura de fundo
Adicionando uma caixa de plano de fundo Vamos escalar a textura da nuvem sem dimensionar a caixa:
3. Dica : você pode manter pressionada a tecla Alt e arrastar o botão do meio do mouse para
Animando a textura do céu
órbita em torno de uma entidade selecionada.
4. Você vai perceber que quando você está usando a ferramenta Designer, há um 4. Agora vamos animar a textura da nuvem através da caixa: no mesmo
Texto do designer na parte superior da sua viewport. Quando terminar de criar Mapas de Textura > seção Difusa da ferramenta Legacy do Material Editor ,
sua caixa, ESC ou clique no X para sair da ferramenta Designer. Clique no triângulo à esquerda do Oscilador para abrir seus parâmetros.
5. Nomeie sua caixa de fundo como algo como bg_box . TypeU move uma textura horizontalmente ; vamos mudar seu valor para Constant
Movendo .
6. Defina a posição da sua caixa de fundo cerca de 10 metros atrás do seu
5. Precisamos mudar a velocidade RateU para algo diferente de zero para ver
tubos e centrado em X e Z.
movimento; vamos tentar 1 . (Note que PhaseU é para piscar uma textura e
fora, que não vamos usar.)
Adicionando uma textura do céu
6. Nós também precisamos mudar a Amplitude para algo maior que 0; vamos
1. Vamos adicionar nossa textura do céu: primeiro, certifique-se de que a Caixa do Designer esteja tente 1 novamente.
selecionado . No menu principal, clique em Ferramentas > Material Editor Legacy
se ainda não estiver visível.
CRYENGINE Flappy Boid Course Ver. 5.5D - 23 - 05: Adicionando um fundo de céu em movimento
7. Enquanto esta velocidade provavelmente precisará ser ajustada a olho uma vez que estamos em
modo de jogo, visto a partir de FlappyCam, você provavelmente já pode
veja que é bem rápido. Tente reduzir RateU para 0,3 e AmplitudeU para 0,2 .
Você pode ter notado algo que arruína a ilusão do nosso "céu" -
sombras dos canos na nossa caixa “sky”!
Dedique alguns minutos para experimentar a iluminação. As chances são que você
ainda tem sombras no seu "céu". Podemos ajudar isso movendo sua
caixa de céu de fundo mais longe dos tubos e torná-lo maior por isso ainda
preenche a visualização FlappyCam. Enquanto o Editor de Ambiente pode fornecer muitos
efeitos fotorrealistas dramáticos, incluindo nuvens volumétricas e nevoeiro, não vamos
precisa de mais alguma coisa com isso neste jogo, então vamos fechá- lo agora.
Ainda teremos problemas de sombra em nossa caixa de fundo, não importa como
ângulo do sol. No final, a melhor solução é dizer a nossa caixa de fundo para não
Renderizar sombras modificando seu shader :
CRYENGINE Flappy Boid Course Ver. 5.5D - 24 - 05: Adicionando um fundo de céu em movimento
DICA : Enquanto FlappyCam está se movendo para cima e para baixo com Aqui está uma visão do layout do jogo para lhe dar uma noção das posições da entidade,
o pássaro, a caixa de fundo realmente precisa ser visto de um ângulo frontal esquerdo.
maior que a vista estática atual. Nós não podemos afinar o seu
tamanho até que nós sabemos o quão longe o pássaro pode se mover! Otimizando Entidades do Designer por meio da Exportação CGF
A ferramenta Designer foi projetada para uma prototipagem rápida e fácil do seu nível
Usando iluminação global
desenhos, não entregando um jogo acabado. A geometria que gera não é
Se você olhar para a frente e para trás da sua caixa, você pode notar que o eficiente, portanto, é caro para o computador renderizar.
a textura da nuvem em movimento parece desaparecer . A textura é aplicada em todos os lados Portanto, é uma boa prática converter as entidades do Designer em arquivos de malha padrão
então não é uma questão de rotação. (.CGF, .OBJ, etc.) e reimportá-los, substituindo os originais, para otimizar
Então, qual poderia ser o problema? design do jogo antes de enviar. Aqui estão os passos:
A resposta é que o sol não é inclinado para iluminar os dois lados do seu 1. Primeiro, salve seu nível.
caixa de fundo! Existem algumas soluções para isso. 2. Selecione o objeto da caixa de fundo da bgBox.
A solução simples é ativar a iluminação global . Você notará que há um 3. Na paleta de ferramentas do Designer , clique na paleta Transformar e, em
muito contraste na iluminação atual. Iluminação global processa refletida Botão Exportar. Role para baixo até ver o arquivo. Botão CGF e clique em
luz através de ray tracing. Você pode ativar esse recurso nas suas Configurações de Nível : isto. Salve seu arquivo como algo como FlappyBackgroundBox.cgf no
Menu principal > Ferramentas > Editor de Nível > Configurações de Nível > Iluminação total Pasta GameSDK.
V2 . Clique em Active para habilitar o GI (Global Illumination), e você 4. Exclua sua antiga entidade Designer de caixa de segundo plano.
imediatamente ver menor contraste.
5. Use a ferramenta Criar objeto para adicionar um pincel e selecione o
Embora exista um custo de desempenho para usar a Iluminação Global, ela tem um grande FlappyBackgroundBox.cgf como o tipo de pincel. Coloque, posicione e
impacto na aparência do seu jogo. Outro aspecto sobre o qual CRYENGINE transformar como desejado.
fornece controle preciso é a natureza da luz do sol em seus níveis.
CRYENGINE Flappy Boid Course Ver. 5.5D - 25 - 05: Adicionando um fundo de céu em movimento
CRYENGINE Flappy Boid Course Ver. 5.5D - 26 - 05: Adicionando um fundo de céu em movimento
06: Mover os canos Na lista de gráficos do Flux Graph em Entidades , você verá um pipeMovement
pasta e um novo gráfico chamado pipe1_bottom . Clique nele para abri-lo.
Em vez de mover o nosso jogador para a direita, o que cria inúmeros problemas DICA : Se a ferramenta Fluxograma já estava aberta quando você fez isso, você não
- ficar sem espaço de jogo jogável, precisando constantemente reposicionar veja a mudança. Feche e reabra a ferramenta Flow Graph para forçar a árvore do gráfico
canos para novos locais - vamos mover nossos canos para a esquerda, enquanto o para atualizar .
o jogador só se move para cima e para baixo . 4. Adicione um nó Movement: MoveEntityTo ao seu novo Flow Graph.
Além disso, desde a nossa câmera estreita restringe vista do jogador (de um terço 5. Atribua seu grupo pipe1_bottom a este movimento: MoveEntityTo
perspectiva de pessoa), podemos controlar quantos tubos o jogador vê em qualquer nó simplesmente clicando com o botão direito do mouse no nó MoveEntityTo e
dado momento - apenas o suficiente para se posicionar para evitar o próximo casal escolhendo Atribuir entidade de gráfico .
de tubos que se aproximam.
Você pode achar estranho que o nó Movement: MoveEntityTo agora diga
Vamos explorar essa visão restrita para esperar até que cada tubo esteja fora do “<Entidade do gráfico>” como a entidade atribuída, em vez do nome da entidade
quadro da câmera à esquerda para enviá-lo instantaneamente de volta a um ponto inicial pré-definido (pipe1_bottom). Lembre-se que este gráfico de fluxo está diretamente ligado ao
fora da câmera no lado direito. Dessa forma, conseguimos uma série aparentemente interminável pipe1_bottom conjunto de entidades vinculadas. "Entidade do gráfico" refere-se à entidade pai
de tubos sem realmente fazer mais de quatro conjuntos - jogo que só contendo o Fluxograma - isto é, a própria entidade pipe1_bottom.
termina quando o jogador morre. A vantagem disso é que, como o nome da entidade não é embutido no código
nó, podemos reutilizar esses mesmos nós nos outros tubos sem fazer qualquer
Movendo o primeiro tubo alterar. É sempre uma boa prática de desenvolvimento evitar enterrar codificados
nomes e números no que acabará por se tornar um grande design de jogos.
Primeiro, vamos pegar nosso primeiro conjunto de tubos indo da direita para a esquerda. Precisamos definir o começo
A codificação torna seu design inflexível e difícil de depurar.
e posições finais, e detectar quando um tubo atingiu o ponto final. Desde o
tubos devem presumivelmente começar a se mover no momento em que o jogo começa, nós vamos Note que precisamos que nosso ai_end esteja exatamente na mesma posição vertical que o
Acione o movimento inicial com um nó Game Start. entidade-mãe - o tubo inferior - caso contrário, os tubos se deslocarão verticalmente
sua posição inicial Z.
Antes de começarmos a mover os canos, vamos dar a eles um começo e um fim fixos
coordena usando Pontos de Tag AI: 6. Defina o Value Type do pipe1Reset_trigger como velocidade e o valor
para 5. Este número determina diretamente o quão rápido seu tubo se move, assim
1. Precisamos escolher uma posição final logo após o lado esquerdo do
quão difícil é o seu jogo.
FlappyCam view (ou seja, apenas fora de vista). Use sua ferramenta Criar Objeto
para adicionar um objeto AI Tag Point . 7. Verifique se o Coord Sys do nó MoveEntityTo está definido como World .
2. Nome ele ai_end , e definir a sua posição de 515 , 500 , 96 . 8. Precisamos informar ao Flow Graph onde mover o pipe: selecione seu ai_end
Tag Point no Editor. Clique com o botão direito no Flux Graph e escolha Adicionar
Vamos anexar o Fluxograma do movimento do tubo separadamente para cada tubo. Vamos
Entidade Selecionada . Arraste a saída Pos do nó ai_end para o
comece com o tubo # 1:
Destino entrada do MoveEntityTo nó.
3. Clique com o botão direito do mouse no grupo pipe1_bottom e escolha Criar Fluxo
Gráfico . Clique em Novo … e nomeie sua pasta como PipeMovement . Dentro
3. No Editor, clique com o botão direito do mouse em pipe2_bottom e escolha Criar Fluxo estas são a causa?
Gráfico . Se você abrir Ferramentas > Editor de Níveis > Configurações de Nível e vá até o Vento
4. Clique na pasta PipeMovement existente e clique em OK. Ingresso parâmetro, você notará que é definido como 1 por padrão. Há um leve vento
Gráfico, você verá que pipe2_bottom foi adicionado como outro Fluxo soprando ao longo do eixo X, empurrando nosso pássaro firmemente para a esquerda!
Gráfico na pasta pipeMovement. Clique para abri-lo.
Vamos mudar isso para 0 . Como o movimento horizontal do nosso pássaro é apenas um visual
5. Cole os nós do Fluxograma nas Entidades > pipeMovement > ilusão; nós realmente queremos que seja estático no eixo X, caso contrário, o todo
gráfico pipe2_bottom . sistema de movimento que construímos para os nossos tubos, incluindo o início e o fim da IA
Agora você vê a beleza dos nós reutilizáveis: não precisamos dizer a esses nós para pontos teriam que se mover também para acompanhar o efeito do vento -
especificamente move pipe2 porque eles movem a entidade gráfica para a qual eles são complexidade que não precisamos!
em anexo.
Criando uma Câmera de Depuração
Siga o mesmo procedimento para os outros tubos e, em seguida, teste . Todos os quatro pares de tubos
deve mover-se da direita para a esquerda, uniformemente espaçadas, redefinindo-se para o ai_start Em casos como este, quando você está testando e tentando entender o que
posição e passando pelo jogador. acontecendo, é útil ver fora de uma visão restrita como a apresentada por
nossa FlappyCam. Por exemplo, seria útil voltar atrás e ver todos os
Considerações ambientais tubos para garantir que eles estão se movendo conforme o esperado. Para fazer isso, vamos criar um
câmera adicional:
Se você testar seu jogo por um tempo, pular para manter seu pássaro no ar e
visualizá-lo através de FlappyCam, você acabará por perceber que seu pássaro drifts 1. Navegue até uma exibição que você goste de usar o Editor. Uma das vistas
para a esquerda e, finalmente, acaba fora da tela! que pode ser útil é paralelo aos tubos (perpendicular à sua
O quê está causando isto? Nosso impulso de salto só age no eixo Z , não no X. movimento), assim você pode ver que os tubos são uniformemente espaçados , pois
mover.
Um dos princípios fundamentais do CRYENGINE é que ele reconstrói um
2. Clique no menu Câmera na janela de exibição Perspective e escolha
ambiente do mundo real de todas as formas possíveis. Isso inclui:
Criar câmera a partir da visão atual .
• luz do sol 3. Use o Level Explorer para renomear sua câmera debugCamera1.
exibido na tela. Entradas do Nó Selecionado > Valor do Token para o token do jogo intScore .
Toda vez que o jogador cruza esse gatilho de proximidade, queremos incrementar 4 Mapeie o Valor de Saída do seu nó GameTokenGet para a entrada In2 de
a pontuação do jogador . Isso significa que precisamos modificar o valor do nosso jogo de pontuação sua lógica : qualquer nó. Isto significa que iniciar o jogo irá desencadear
token adicionando um ponto por colisão do acionador de pontuação: o GameTokenGet para recuperar a pontuação inicial (que é zero) e
exibi-lo com o nó DisplayMessage e, a partir daí, a qualquer momento
1. Arraste um nó Missão > GameTokenModify para o seu Flux Graph para
pontuação Token jogo é modificado , ele vai passar a pontuação através da lógica
à direita do nó pipeScore_trigger.
portão também.
2. Selecione seu pipe1Score_trigger no Editor, depois clique com o botão direito em seu
Gráfico de fluxo adicionar escolha Adicionar entidade selecionada .
Adicionando Texto "Pontuação" 3 Arraste o nó Saída do jogo: Iniciar para as entradas Ativar de cada
de seus nós de disparo de proximidade.
Vamos esclarecer para o jogador o que esse número significa adicionando a palavra
4 Clique com o botão direito na alça no meio do conector entre o
"Pontuação" na frente dele. Adicionando pedaços de texto juntos em uma string é chamado
Nós pipeScore_trigger e GameTokenModify e escolha
concatenação: Lógica: qualquer .
1. Arraste um nó String > Concat para o seu Flow Graph. 5 Mapeie as saídas Enter de cada um dos seus nós pipe # Score_trigger para o
1. Clique no seu nó String : Concat e defina a propriedade String1 para Entradas In2 a In5 da sua lógica: qualquer nó.
"Ponto: " 6 Reorganize seus nós conforme necessário, para que seu Flux Graph seja fácil
2. Mapeie a saída Out da sua Logic: Qualquer nó para a entrada Set do seu seguir . Não se esqueça de estender sua caixa de comentários SCORING para
Nó Concat . cercar todos os nós relacionados à pontuação.
Acompanhamento de "morte" usando um token de jogo 5 Arraste o nó Saída do seu jogo : Iniciar para a entrada Obter do seu
Entidade: nó EntityInfo . Isso consulta o EntityID do seu FlappyBoid
Vamos querer que várias coisas aconteçam quando o jogador colidir com um cano. entidade no início do jogo.
Todos eles podem reagir indiretamente a essas colisões (ao invés de uma série confusa
6 Agora a parte importante! Adicione um nó Physics: CollisionListener ao
conexões de fluxo de gráfico em seções diferentes) simplesmente “escutando”
à direita de seus outros nós.
o valor de um token de jogo verdadeiro / falso que é falso até que uma colisão de pipe o defina como
verdade: 7 Arraste a saída de ID do seu nó EntityInfo para a entrada Add Listener
do seu nó Physics: CollisionListener . Este é o nó que detecta
1. Abra a ferramenta DataBase no menu Ferramentas . quaisquer colisões entre entidades fisicamente O ID da entidade é único,
2. Clique na guia Tokens do Jogo . número criado automaticamente usado internamente pela CRYENGINE para rastrear
cada entidade ( não a propriedade de nome que você atribui).
3. Em Tarefas do Token do Jogo , clique em Adicionar Novo Item . Ligue para o seu jogo
Token booIsDead . Note que o tipo de variável padrão é booleano com 8 Embora a física crie uma reação natural entre o “pássaro” e
um valor padrão de falso . Embora isso seja exatamente o que queremos, o tubo (desde que ambos estejam fisicamente), podemos melhorar isso com um
irá inicializar manualmente seu valor no início do jogo - uma prática sábia. impulso físico adicional : adicione um nó Physics : ActionImpulse .
Este método introduz alguns possíveis conflitos , já que outros nós também são Nós definimos o FlappyCam para seguir o jogador enquanto ele pula e cai - mas ele vai
tentando mover FlappyCam (para seguir o jogador). Nós precisaríamos parar isso também siga o jogador até o terreno quando o jogador "morrer".
movimento para que não entre em conflito com o movimento FlappyCam.
Em vez disso, vamos congelar a câmera e deixar o player sair da parte inferior
Um método simples é simplesmente criar uma câmera adicional posicionada para ver o jogo sobre a morte, como indicado pelo nosso booIsDead Jogo token ser verdadeira :
o texto GameOver e habilitar essa câmera quando um jogador morre - ou seja, simplesmente
1. Na seção MOVIMENTO DA CÂMERA do seu FG_Main Flow
alternar câmeras. Em nosso design, escondemos o texto Game Over por trás do FlappyCam,
Graph, arraste um nó Mission : GameToken para o seu gráfico.
e o jogo sobre a câmera por trás do jogo sobre o texto. Ou seja, quando o jogo
termina, nós apenas pular para uma visão de mais longe no eixo Y - longe o suficiente para 2. Clique no botão .. ao lado do parâmetro Token e escolha seu
ver que o jogo acabou o texto que estava lá o tempo todo! Token do jogo de booIsDead .
Enquanto booIsDead = false , queremos continuar passando a posição de deslocamento 7. Arraste a saída Equal do seu nó GameToken para a entrada Open
do nó Logic : Gate . Isto significa que quando booIsDead é igual a falso, o
para a entrada Iniciar do nó MoveEntityTo que já configuramos no FlappyCam.
Mas assim que booIsDead = true, precisamos acionar a entrada Stop do porta lógica abre, passando a posição para a câmera se mover.
Nó MoveEntityTo - trazendo o movimento da câmera que já estava 8. Mapeie a saída Out do seu nó Logic : Gate para a entrada A do seu
em andamento para uma parada. Nó SubVec3 .
No entanto, o nó EntityPos continuará a alimentar a posição do Flappy para Por fim, não podemos esquecer de definir o valor inicial de booIsDead para false no jogo
o nó MoveEntityTo, fazendo com que o movimento da câmera comece novamente! Não somente começar:
temos que parar o movimento da câmera em andamento, temos que 9. Abra o seu FG_Main Flow Graph e encontre o seu nó Game: Start .
impedir que o novo movimento comece interrompendo os dados de posição
10. Adicione um nó Missão: GameTokenSet.
fluindo para a câmera:
11. Arraste o nó Saída do seu jogo: Iniciar para a entrada do acionador de
4. Arraste um nó Logic: Gate para o seu gráfico. seu nó GameTokenSet .
5. Remova o conector antigo entre o nó EntityPos e o nó EntityPos. 12. Definir o token de sua missão : GameTokenSet nó para booIsDead
SubVec3 Uma entrada. e o valor para falso.
você quer copiar lá. Você também pode classificar os elementos no Level Explorer 5. Em uma seção em branco do seu FG_Main Flow Graph, adicione uma câmera : View
clicando em qualquer nome de coluna. No entanto, observe que os elementos são agrupados por nó. Atribua sua entidade GameOverCamera a ela.
tipo de entidade ao classificar pelo nome.) 6. Adicione um nó Missão : GameToken . Defina o token para booIsDead e
Nota : o tubo inferior mais à direita deve estar em 440, 500, 96 . Compare para verdadeiro . Isso significa que estamos perguntando se é verdade
que booIsDead = true - ou seja, o jogador está morto?
Configurando um jogo sobre a câmera 7. Arraste a saída Equal do seu nó Mission : GameToken para o
Ativar entrada de sua câmera : Exibir nó para ativar sua nova câmera
1. Posicione seu jogo sobre o grupo de texto atrás de FlappyCam. Nós usamos 472, na morte do jogador.
555, 100 .
Salve e teste . Quando você estiver feliz, torne os nós limpos e adicione um “JOGO
2. Navegue na sua vista em perspectiva para obter a visão desejada do jogo SOBRE ” caixa de comentários ao redor deles. Você também pode querer experimentar
texto com o jogo por trás dele. adicionando um atraso antes de mudar para o jogo através da câmera para fazer o
transição menos dissonante.
Escondendo terreno A segunda abordagem é esconder o terreno, onde quer que esteja - mas mantenha-se
lembre-se que, embora possa ser invisível, os objetos ainda reagirão normalmente,
Você já deve ter notado que esconder o terreno do editor por como o seu pássaro quando ele cai, o que pode ser confuso para os usuários:
clicar no botão Exibir não o oculta permanentemente no jogo se você
saia e reinicie o CRYENGINE. 1. Abra o seu FG_Main Flow Graph e encontre o seu nó Game : Start .
Estamos usando um número de ponto flutuante que permite valores à direita do 10. Por último, defina a propriedade Value dos seus quatro nós GameTokenSet para
casa decimal. Se usamos um inteiro, o menor aumento possível na velocidade a gama desejada de movimento de tubo vertical. Dados os fatores em jogo
seria 1, o que acabaria acelerando a velocidade do jogo tão rapidamente que - o espaçamento horizontal dos nossos tubos, a velocidade das aves, a força do
rapidamente se tornaria injogável. gravidade, e a força de salto para cima - sugerimos valores de 3, 6, 8 e
10 . (Como sempre, esta distância está em metros.) Qualquer um maior que ± 10m
Mais tarde, adicionaremos uma interface de usuário completa que solicitará que os jogadores escolham um dos
estes quatro níveis de dificuldade quando o nível é carregado.
Vamos nos livrar da velocidade codificada e conduzir nossos movimentos de tubo com o
token de jogo de velocidade de cano que nós já criamos e inicializamos:
horizontalmente na alça circular 4. Na seção Pontuação do seu gráfico de fluxo do FG_Main , adicione um
no meio do conector. este Missão : nó GameTokenModify .
ajudará a evitar linhas de
5. Definir o GameTokenModify do nó token para intScore eo Valor
sobreposição.
para 1 .
7. Defina a operação para adicionar e o valor para 0,2. Note que o maior
Movimento : nó MoveEntityTo . O antigo valor que nós codificamos
esse número, quanto mais rápido os canos aceleram à medida que o jogador ganha, e
na entrada Valor será ignorado em favor do sinal enviado pelo
quanto mais difícil o jogo. Teste e ajuste conforme desejado. Mais tarde, você
Nó GameToken. Note que desde MoveEntityTo está usando velocidade (como
poderia modificar isso com base na dificuldade selecionada pelo usuário.
oposta ao tempo), sempre que este Token de Jogo muda - ou seja, cada
tempo que o jogador marca - a velocidade do movimento do cano já Salve e teste !
• Nós vamos embaralhar ambas as posições de início e fim Z para fazer a tubulação o nó Math: Random para definir nosso intervalo de randomização.
movimento mais interessante. 6 Arraste a saída Pos do nó ai_end para a entrada Vec3 do
Nó FromVec3 . FromVec3 simplesmente separa um tridimensional
• Nós vamos apenas mover os tubos em uma linha reta no eixo X a partir de ai_start
coordena (Vec3) em valores X, Y e Z.
para ai_end por enquanto, adicionando oscilação (múltiplos movimentos ao longo do Z
eixo durante cada passagem) será mais complexo. Adicionando muitos recursos 7 Arraste as saídas X e Y do nó FromVec3 para o X e Y
simultaneamente complica bastante a depuração! entradas do nó ToVec3 . Nós não precisamos modificar essas coordenadas,
apenas para passá- los para o nó de movimento como está.
• Por enquanto, vamos mover cada par de tubos juntos e não variar o intervalo
8 Arraste a saída Z do nó FromVec3 para a entrada A do
entre eles.
Matemática : adicionar nó. Esta é a posição Z não modificada de ai_end.
• Para se certificar de que cada par de tubos viaja do início ao fim no 9 Agora precisamos adicionar o deslocamento aleatório à posição Z existente de ai_end:
exatamente o mesmo período de tempo, vamos multiplicar a distância real pelo arraste a porta Out do nó Math : Random para a entrada B do
distância em linha reta para derivar um fator que vamos multiplicar vezes o
velocidade atual do tubo. Isso garante que todo tubo atravesse o
1. Vamos pegar a atual posição atual do tubo para que possamos medir o
distance to ai_end: adiciona um nó Entity : GetPos . Clique com o botão direito nele e
Escolha Assign Graph Entity . (Note que devemos usar a corrente
posição do tubo, não a posição de ai_start, já que cada par de
tubos começam em diferentes posições no início do jogo.)
A saída Comprimento nos dará a distância real que esse tubo deve percorrer. Agora Etiquete este nó para calcular a diferença entre a linha real e a reta
distância."
vamos calcular qual seria a distância se o tubo viajasse em linha reta
ao longo do eixo X. Para fazer isso, dividiremos as coordenadas Vec3 em X separado 10. Agora, vamos multiplicar esse fator pela velocidade do tubo atual: adicionar um
Y e Z valores, e apenas medir a distância de X a X: Math : Mul (multiplique) nó. Arraste o nó Out of the Math : Div para
a entrada B e a Saída do nó GameToken de fltPipeSpeed para
6. Adicione duas Vec3 : FromVec3 nós. Arraste a saída Vec3 do
a entrada A.
ToVec3 nó da entrada Vec3 do seu primeiro nó FromVec3 . Ajudar
você acompanha o que esses nós estão fazendo, adicione um comentário acima 11. Vamos alimentar a velocidade ajustada ao movimento entidade: arrastar o Out of
este primeiro nó do FromVec3 que diz "obtenha a posição do ponto final". a matemática : Mul nó para tanto o valor e os Iniciar entradas do
Nó MoveEntityTo .
7. Arraste a saída Pos do nó GetPos da entidade do gráfico para o Vec3
entrada do outro nó FromVec3 .
Randomizing Z of Pipe Start Point
8. Agora vamos fazer a diferença na posição X entre o tubo e seu
posição final pretendida: adicione um nó Math : Sub (subtrair). Arraste o X Nós randomizamos com sucesso o Z do ponto final e ajustamos a velocidade
saídas de seus dois nós FromVec3 para as entradas A e B do para a distância real. Agora vamos randomizar o ponto inicial Z :
Matemática: subnó, respectivamente. Etiquete este nó “calcule a linha reta
1. Primeiro, vamos mais uma vez obter o intervalo de randomização Z salvo no jogo
distância."
start: adicione um nó Missão : GameTokenGet e defina seu token para o
3 Podemos economizar algum tempo copiando e colando os mesmos quatro nós Saída Z do nó FromVec3 para a entrada A do nó Math : Add .
que randomizado ai_end's Z. No entanto, queremos colar apenas os nós, 8. Arraste o nó Out of the Math : Random para a entrada B do
não os links, senão teremos espaguete! Arraste seu mouse Matemática : adicionar nó.
em torno do Vec3 : FromVec3 , Math : Random , Math : Adicionar e
9. Arraste o nó Out of the Math : Add para a entrada Z do ToVec3
Vec3 : ToVec3 nós, Ctrl - C para copiá-los, clique com o botão direito do mouse à esquerda nó. Isto combina os X e Y existentes com o Z aleatório em
o nó BeamEntity e escolha Editar > Colar sem Links . (Ou uma coordenada Vec3.
Ctrl-Shift-V )
10. Finalmente, arraste o Vec3 saída do ToVec3 nó para tanto o
4 Arraste o valor de saída do nó GameTokenGet para a entrada máxima de
Entradas Position e Beam do nó BeamEntity .
o nó Math : Random . Arraste o nó Out of the Math : Mul para o
Entrada mínima do nó Math : Random . Salve e teste ! Brinque com isso por vários ciclos até ficar satisfeito
os pontos inicial e final são randomizados para o primeiro conjunto de tubos. Este é um bom
5 Exclua o conector antigo da saída Pos do ai_start para o BeamEntity
hora de esconder os outros três conjuntos de tubos para garantir que seu gráfico esteja livre de bugs
Entrada de feixe. Em seguida, arraste a saída Pos da entidade ai_start para o
antes de copiá-lo para os outros tubos.
Vec3 entrada do FromVec3 nó. Mais uma vez, isso separa o ai_start
posição em X, Y e Z. Depois de corrigir os bugs, copie todo este fluxo de movimento do Fluxograma para
os outros três canais na pasta pipeMovement , certificando-se de
exclua completamente os nós antigos primeiro!
Muito perto, e o jogador pode não ser capaz de desviar de canos que se movem para o booIsDead e o valor para true .
limites extremos de suas restrições verticais sem morrer sem aparente 11. Adicione uma caixa de comentários em torno desses nós interconectados e nomeie -o
razão e tornar-se frustrado. Longe demais, e Flappy pode passar por cima ou por baixo do "Protect Game Boundaries" ou o que você achar descritivo.
tubos. Salve e teste!
Colocamos os nossos 11 metros acima e 11 metros Uma melhoria sugerida para você trabalhar de forma independente seria fazer
Dica Pro :
abaixo de Flappy e, claro, a 500 X, 500 Y. À medida que seus gráficos de fluxo aumentam, estes limites do jogo visíveis , então o jogador sente que eles foram razoavelmente
3 Lembre-se que o nosso FlappyBoid não é você pode precisar conectar dois avisou sobre os limites dentro dos quais eles podem pular ou cair.
nós que estão distantes no
o "jogador", tanto quanto GameSDK é
em causa. Desmarque o único jogador
gráfico. Se você diminuir muito o zoom (para Fazendo o nível recarregar automaticamente após a morte
ser capaz de ver aqueles díspares
caixa em Propriedades > Lua
nós), você não poderá clicar Depois de exportar seu jogo como um aplicativo independente, quando
Propriedades para ambos os gatilhos de proximidade.
nas portas com precisão, a fim de jogador morre, eles terão que reiniciar o jogo manualmente. Como isso poderia ser
4 Nós não queremos colisões com os canos conecte-os. A solução é bastante irritante para os próprios jogadores que queremos ficar viciados em jogar
para desencadear esses gatilhos, então precisamos
zoom em uma porta, clique na porta nosso jogo mais e mais, vamos fazer o nível recarregar automaticamente após a morte:
ser específico : Cole “FlappyBoid” ou o seu
e comece a arrastar um conector
nome exato da entidade do jogador no com o botão esquerdo do mouse, 1. Vá para a seção Game Over do seu FG_Main Flow Graph.
Propriedades> Propriedades de Lua> Apenas 2. Adicione um nó Missão : LoadNextLevel .
enquanto segura a esquerda
Caixa Entidade Selecionada . botão, use a roda de rolagem e 3. Defina o valor Next Level do seu nó Mission : LoadNextLevel para o
5 Adicione as duas entidades a uma área vazia de botão direito do mouse para navegar nome real do seu nível. Certifique-se de copiá-lo e colá-lo
seu gráfico de fluxo do FG_Main . (Selecione veja o nó de destino, então
o File Explorer ou digite-o exatamente certo! Isso força o nível a recarregar
ambos, clique com o botão direito no seu Fluxograma complete a conexão. depois da morte do jogador.
e escolha Adicionar entidade selecionada .)
4. Arraste a saída Equal do seu nó Mission : GameToken para o
6 Precisamos sentir se o jogador colide com ou Entrada do acionador do seu nó Mission : LoadNextLevel .
da nossa morte desencadeia. Adicionar uma lógica: qualquer nó ao seu fluxograma e
mapa do Enter saída da proximidade aciona a In1 - In2 Nós forçamos o nosso único nível de jogo a recarregar assim que o jogador morre, mas
entradas de sua lógica: qualquer nó. há um problema com isso: isso acontecerá imediatamente e o jogador
Nunca tenha a chance de ver o seu texto "game over"!
Quando o jogador colide com um dos nossos gatilhos de "morte", queremos definir
nossa variável booIsDead para true :
2 Mude o seu FOV atual na janela de visualização do FlappyCam para 30º . Apenas este
afeta a visão do Editor, não o jogo. Você verá que o FlappyCam
agora vê muito pouco de suas entidades.
DESAFIO : Se você salvar e testar, você pode estar em uma Explorando Câmeras
surpresa grosseira. Por que as coisas parecem do jeito que são? Por quê
você está vendo tão pouco? Tente solucionar o problema Apenas mudando a posição da sua câmera pode ter um tremendo efeito sobre o
antes de olhar em frente para a resposta. aparência do seu jogo. Você pode querer sair do "side scroller"
olhe este jogo e experimente criar câmeras adicionais. Para
Você descobriu o problema? Embora você tenha movido o FlappyCam exemplo, tentando criar um que "segue" Flappy de perto por trás, como em
posição no editor, seu código do Fluxograma reposiciona dinamicamente para esta vista usando um deslocamento de -14X, -15Y e um FOV de 25⁰.
siga FlappyBoid! Você tem que ajustar o deslocamento da posição da câmera em
Fluxograma para corresponder à sua posição modificada no editor:
Aqui está uma forma mais dramática de terminar quando o jogador morre: mude para um fim
vista do oceano, deixe o texto do jogo vir espirrar na água,
flutuar nas ondas por um momento e depois afundar a câmera sob as ondas
enquanto inclina-se para ver o texto “game over” quando este desaparece. Primeiro, certifique-se
seu oceano é visível nas configurações de exibição .
10. Vamos habilitar nossa nova câmera quando o jogador morrer: adicione um 17. No nó RotateEntityToEx , defina o valor X do destino como 45 ⁰ ,
Câmera: Visualizar nó; atribuir DiveCam a ele; e arrastar o Equal o Tipo de Valor para o Tempo e o Valor para 6 segundos. Isso fará com que o
saída do nó booIsDead Mission: GameToken para o Enable câmera inclinar-se para a 45 ⁰ ângulo como ele está afundando. Dependendo da distância
entrada da sua câmera: Visualizar nó. entre a câmera e o jogo sobre o texto, você pode querer ajustar
o tempo do movimento descendente e rotação. A ideia é
11. Tal como acontece com os tubos e FlappyCam, vamos afundar a câmera usando
mantenha a câmera olhando para o jogo enquanto ele afunda.
Entidade : MoveEntityTo. Adicione esse nó agora e atribua sua DiveCam
para isso. 18. Arraste o nó Out of the Time: Delay para as entradas Start do
Nós MoveEntityTo e RotateEntityToEx .
12. Vamos recuperar e compensar a posição original da câmera: adicione um
Entidade: nó GetPos e atribui o DiveCam a ele. Arraste os booIsDead Em seguida, vamos fazer nosso jogo cair e mergulhar no oceano:
Saída igual do Token do jogo à entrada Get do nó GetPos . 19. Para fazer nossas entidades de texto do jogo caírem, nós apenas temos que desabilitar o
Note-se que desde que só precisamos consultar a posição do DiveCam uma vez em
Descansando propriedade para habilitar gravidade: adicionar uma Entidade: PropertySet entidade
o jogo, estamos usando um nó GetPos disparado manualmente em vez de um e atribua o GameOverBox a ele. Clique na caixa de valor ao lado de
Nó EntityPos que está sempre escutando (e, portanto, exigindo computador Propriedade , em seguida, no botão .. e escolha a Física > bResting
Recursos).
propriedade. Defina o valor como falso .
13. Vamos adicionar o deslocamento Z para a câmera: adicione um nó Vec3: SubVec3 . 20. Agora só precisamos acionar esse nó quando o jogador morrer: arraste para
Arraste a saída Pos do nó GetPos da DiveCam para a entrada A do conecte a saída Equal do token de jogo booIsDead ao Set
Nó SubVec3 . Defina o valor Z do SubVec de B em 15 .
entrada do nó PropertySet .
14. Como precisamos dar tempo para que nossas entidades de Game Over caiam no
oceano, vamos adicionar um atraso para dar a câmera a chance de testemunhar isso
Gerar entrada do nó Math: Random. Defina seu Min para 0 e seu e nome na entrada Material do Material : EntityMaterialChange
Máximo a 7 . Por que 0 a 7? Adicione um nó Logic : DeMultiplexer e você nó. Como o nosso DeMultiplexer tem oito saídas, podemos escolher entre oito
veja que tem oito saídas, de 0 a 7. materiais.
4 Arraste a saída Out Rounded do nó Math : Random (Out Podemos fazer isso de duas maneiras: poderíamos ter 16 Material : EntityMaterialChange
Arredondado produz apenas números inteiros ) para a entrada Index do nós (um para o topo e um para o tubo inferior) predefinidos com 8 diferentes
Lógica : nó DeMultiplexador . Definir o modo do materiais e acioná-los diretamente das saídas Port do DeMultiplexer,
Lógica : nó DeMultiplexer para IndexOnly para garantir que apenas o índice ou podemos passar o material apropriado como uma string para uma lógica: qualquer nó com
7 Você precisará escrever cuidadosamente o caminho exato e o nome do material Usaremos exatamente a mesma técnica de Fluxograma para randomizar a escolha de
a propriedade In dos nós SetString. Para evitar erros de digitação, recomendamos efeitos de partículas no próximo capítulo, quando adicionamos estrelas onde a nossa pontuação
alterar temporariamente a propriedade do material de um dos seus tubos, e gatilhos de proximidade são.
em seguida, basta copiar e colar da propriedade do material para o
Na propriedade SetString In: selecione qualquer canal no editor e clique no Desativando o efeito de morte do FPS no Game Start
botão de pasta ao lado da propriedade Geral> Materiais. Isso também dá
você tem a chance de ver uma prévia de como cada material ficará e Você deve ter notado que a primeira vez que você muda para o modo de jogo,
escolha seus oito favoritos. Recomendamos explorar o tijolo , a tela fica vermelha e depois fica com uma cor normal. Este efeito é a "morte"
pastas de concreto , metal e madeira dentro do GameSDK > Materiais efeito também usado quando o jogador morre, mas não faz muito sentido em nossa
> Pasta genérica . Evite materiais translúcidos como vidro. Atribuir um jogos. Podemos facilmente desativá-lo abrindo a pasta Material FX no Flow
material diferente para cada um dos seus oito nós SetString. Graph, clique com o botão direito sobre o player_death gráfico e escolha Desativar .
Como sempre, isso é muito mais fácil de ver do que ler, então consulte a captura de tela de
o Fluxograma concluído, salve e teste em apenas um par de tubos. Uma vez
você está confiante de que está funcionando perfeitamente, copie e cole toda esta seção
CRYENGINE Flappy Boid Course Ver. 5.5D - 62 - 10: Adicionando alvos de pontuação animados
as cinco faces laterais do seu pentágono para selecioná- lo. (Você verá um roxo
caixa no meio do polígono que ficará laranja quando selecionado.)
gira exatamente 90⁰ (ou -90⁰). Você provavelmente achará que também precisará para qualquer tipo de entidade de que gostamos:
para girá-lo ligeiramente em torno de seu próprio centro. 1. Com a estrela acabada selecionada, clique na ferramenta Designer >
Avançado > botão Exportar . Nas opções de exportação , clique no botão. CGF
Criando um Material de Vidro para as Estrelas botão. Salve seu arquivo como star.cgf no
Pasta GameSDK \ objects \ props \ flappy_boid .
1. Vamos dar um material à estrela: com a estrela selecionada, clique no
2. Agora você pode excluir o objeto de designer, ocultá-lo ou simplesmente deixá-lo
navegue ao lado de Material na janela Propriedades > Geral .
Selecione GameSDK > materiais / genéricos / glass / glass_frosted . em algum lugar fora da vista.
3. Use a ferramenta Criar objeto para adicionar uma entidade herdada > física >
NOTA: Se a sua câmera estiver posicionada de modo que sua caixa de fundo da nuvem
BasicEntity ao seu nível. Como de costume, o modelo padrão é uma esfera.
atrás da estrela, ela desaparecerá. Vamos discutir como endereçar este shader
Arraste -o para o terreno.
questão mais abaixo; por enquanto, reposicione sua câmera para o fundo da nuvem
caixa não é visível atrás da estrela.) 4. Selecione o BasicEntity e desça na Propriedades janela para
Lua Properties > Model e clique no botão procurar ao lado
2. Vamos tornar o material mais colorido : no Material Editor Legacy, primitive_sphere.cgf. Selecione seu
clique no botão Obter propriedades da seleção . O glass_frosted Malha GameSDK \ objects \ props \ flappy_boid \ star.cgf .
o material é selecionado e suas propriedades exibidas.
CRYENGINE Flappy Boid Course Ver. 5.5D - 63 - 10: Adicionando alvos de pontuação animados
5. Nomeie sua primeira estrela como "ScoreStar1". 5. Defina sua velocidade no eixo Z para 2 . Você pode querer experimentar com o
velocidade, dependendo de quão rápido o seu movimento do tubo está definido. Se você realmente
Considerando problemas de Shader quer tornar seu jogo dinâmico, você pode criar um Token de jogo para
a velocidade da nuvem e incrementá-lo com a pontuação como você fez com o
Precisamos posicionar nossa estrela entre o primeiro conjunto de tubos, mas se você movê-lo movimento da tubulação.
então você está olhando com a textura da caixa de fundo / nuvem atrás dele, a estrela
6. Como o propósito do movimento do céu é simplesmente criar a ilusão de que
ficará invisível! (Gire a câmera para olhar para ela sem a caixa atrás nosso personagem Flappy está se movendo para a direita, vamos fazê-lo parar quando
para verificar se ainda está lá. o jogador morre : adicione um nó Missão : GameToken à esquerda do seu
Por que isso está acontecendo? Nó RotateEntity .
3. Vamos fazer girar então parece que Flappy está se movendo para a direita: make rotação em Z). Escale como quiser, é fácil de ver, mas não
certeza que o SkyDome está selecionado. Na seção Configuração inicial do seu preenche a lacuna entre os canos.
CRYENGINE Flappy Boid Course Ver. 5.5D - 64 - 10: Adicionando alvos de pontuação animados
2 Arraste seu ScoreStar1 para o Pipe1_bottom para vinculá- lo ao pipe 6. Vamos manter a estrela girando constantemente: adicione um
montagem. Desta forma, a estrela vai se mover com o nosso tubo existente Movimento : nó RotateEntity . Clique com o botão direito e atribua o gráfico
movimento gráfico de fluxo. entidade (ou seja, a própria estrela).
3 Vamos adicionar nossa mecânica de jogo : primeiro, clique com o botão direito na estrela e 7. Defina a velocidade em Y para 50 . Seu eixo pode ser diferente dependendo
escolha Criar gráfico de fluxo . Desde que vamos usar o existente a rotação do seu modelo. Observe que esse nó não possui um acionador de entrada; isto
gatilhos de pontuação, poderíamos estender a seção de pontuação do nosso Fluxograma, começará no início do jogo automaticamente.
mas seria confuso organizar, e nós não teríamos o
Nós escondemos a estrela no contato; agora vamos fazê-lo reaparecer quando o tubo
vantagem de usar a estrela como a entidade gráfica . Escolha o seu existente
a montagem é enviada de volta para a posição inicial para ser reciclada:
Pasta FG_Main .
1. Abra o seu Fluxograma de Fluxo de Movimentação para pipe1_bottom .
4 Clique com o botão direito do mouse no novo Flow Graph e escolha Add Graph Default
Entidade . Você notará que o nó da entidade possui uma entrada Ocultar . Vamos fazer 2. Selecione sua entidade ScoreStar1 se você ainda não tiver feito isso.
a estrela desaparece quando o jogador entra em contato: selecione o 3. Todo o caminho no lado direito ao lado do seu nó BeamEntity, à direita
scoreTrigger1 (ou o que você chamou de gatilho de proximidade clique e escolha Adicionar entidade selecionada .
entre o primeiro conjunto de tubos). Clique com o botão direito no seu gráfico e escolha
4. Arraste a saída Done do nó BeamEntity para a entrada UnHide do
Adicionar entidade selecionada .
o nó ScoreStar1 .
5 Arraste a saída Enter do nó ProximityTrigger para o Hide
5. Salve e teste . Não duplique a estrela para os outros tubos ainda, como nós vamos
entrada do GraphEntity da estrela .
adicionar um efeito de explosão e nós Fluxograma adicionais primeiro que
você vai querer copiar.
CRYENGINE Flappy Boid Course Ver. 5.5D - 65 - 10: Adicionando alvos de pontuação animados
CRYENGINE Flappy Boid Course Ver. 5.5D - 66 - 10: Adicionando alvos de pontuação animados
Adicionando efeitos de partículas 10. Nomeie seu efeito como ScoreEffect1 . Arraste -o para pipe1_bottom para vinculá-lo.
Salve e teste sua primeira estrela de pontuação. Quando estiver confiante, duplique o
Efeitos de partículas usam texturas translúcidas 2D para fornecer efeitos como faíscas, fogo,
estrela e partícula efeito mais três vezes e posicioná-los entre o outro
fumaça, etc. Uma grande biblioteca deles já é fornecida no GameSDK. Vamos
tubos. Certifique-se de renomeá- los corretamente, para copiar os nós do Flux Graph e para
adicione um efeito toda vez que o jogador colide com os gatilhos de pontuação:
modificar as atribuições da entidade corretamente. Não esqueça o nó adicionado no
1 Abra a ferramenta DataBase View ( Tools > DataBase View ) e clique em Gráfico do PipeMovement. Nós também adicionamos uma diferença de 30⁰ na rotação no Z
na guia Partículas . eixo entre cada uma das quatro estrelas para que eles não estão todos na mesma posição no
2 Clique na lista suspensa na guia Partículas que diz "Nível" mesmo tempo.
e selecione " explosões " . Uma árvore de pastas listando todos os efeitos de explosão Quando você testar esses efeitos no modo de jogo, você descobrirá que alguns
aparece à esquerda abaixo da barra de ferramentas. eles não funcionam como estão porque incluem uma onda de choque que empurra Flappy
3 Clique no sinal de mais ao lado da pasta do monitor e arraste o longe - ou seja, eles geram vento. Você pode mudar isso editando a partícula
efeito a_linger_elec no ScoreTrigger1 para colocá-lo no nível. efeito na exibição de banco de dados .
Posicione-o exatamente entre o primeiro par de tubos em 485, 500, 100.
4 Nomeie seu efeito de partícula como ScoreEffect1 . Dentro Eliminando forças físicas de efeitos de partículas
o Propriedades > Propriedades Lua , desmarque
1. Primeiro, selecione seu efeito de partículas na janela de exibição de perspectiva.
a propriedade Active para que o efeito não
fogo toda vez que você abrir este nível no Dica Pro : 2. Na ferramenta DataBase View > Particle , expanda o efeito de partículas
Editor. Toda vez que você quiser ver como pasta pai e procure por um componente geralmente chamado de vento . Dentro
efeito de partículas no seu nível parece GameSDK, os designers geralmente mantinham qualquer efeito de vento (shockwave)
5 Então você pode facilmente selecionar o efeito de partículas,
enquanto no Editor, clique com o botão direito nele um componente separado para facilitar a localização - caso contrário você
use o Level Explorer para congelar
e clique em Eventos > Spawn . para verificar todos os componentes.
ScoreStar1 e ScoreTrigger1.
Você também pode testar diferentes partículas 3. Percorra a longa lista de parâmetros para o Advanced
6 Com a entidade ScoreEffect1 selecionada , efeitos arrastando -os do
seção, e encontrar onde Force Generation está definido como Wind . Defina para
clique com o botão direito em seu gráfico de fluxo ScoreStar1 Banco de dados > Janela de partículas para
Nenhum .
e escolha Adicionar entidade selecionada . uma entidade ParticleEffect no
cena. 4. Salve suas alterações clicando no botão Salvar em partículas modificadas.
7 Para se certificar de que o efeito de partículas
Botão de bibliotecas .
não aparece até a primeira colisão, vamos
desativá- lo no início do jogo: adicionar um jogo: Iniciar
nó.
Randomização de efeitos de partículas
8 Arraste o nó Saída do jogo: Iniciar para a entrada Desativar do Assim como a aleatorização dos materiais do tubo aumentou a ilusão de tubos sem fim,
Nó da entidade ParticleEffect . vamos usar a mesma técnica para escolher aleatoriamente a partir de uma seleção de adequado
9 Nós desativamos o efeito de partículas, então precisamos ativá- lo para efeitos de partícula:
disparar (spawn) o efeito: arraste a saída Enter do 1. Abra o fluxograma do pipe_movement do pipe1_bottom e encontre o
Nó da entidade ProximityTrigger às entradas Enable e Spawn do Entidade : nó BeamEntity que envia seus pipes de volta para ai_start. Por quê
Nó ParticleEffect .
colocar a randomização de partículas aqui? Porque vamos atribuir um
CRYENGINE Flappy Boid Course Ver. 5.5D - 67 - 10: Adicionando alvos de pontuação animados
efeito de partícula aleatória no mesmo momento em que atribuímos um material de tubo: mudando temporariamente a propriedade de Efeito de Partícula de um dos seus ParticleEffect
quando cada conjunto de tubos é enviado de volta ao ponto ai_start . entidades, e simplesmente copiando e colando a partir da Lua Properties >
2 Queremos atribuir um efeito de partícula de uma lista aleatória no momento Particle Effect propriedade nas setString do Em propriedade:
o jogo começa e toda vez que um par de canos é resetado para ai_start: adicione um 7. Use a ferramenta DataBase Tool> Partículas para arrastar várias explosões
Lógica : Qualquer nó (para lidar com as duas entradas) à direita do seu no seu ParticleEntity selecionado para atribuir e visualizá-los. Não faça
Nó BeamEntity. Arraste a saída Done do nó BeamEntity para esqueça que você deve desativar o Advanced > Force Generation
a entrada In1 da lógica : qualquer nó. Arraste a saída do propriedade, ou então o efeito irá afastar o seu jogador Flappy.
Jogo : Inicie o nó que você já adicionou para o material do tubo
8. Ao encontrar cada efeito de partícula que deseja usar, copie o nome dele
randomização para a entrada In2 do nó Logic : Any .
da propriedade Lua Properties > Particle Effect em cada um dos
3 Adicione um nó Math : Random . Arraste o Out of the Logic : qualquer nó para oito propriedades In de SetString , usando um efeito diferente em cada
o Gerar entrada do nó Math : Random . Defina seu Min para 0 e seu seus oito nós SetString .
Máximo a 7 .
9. Para rotear essas oito strings diferentes para o nó Entidade: PropertSet ,
4 Adicione um nó Logic : DeMultiplexer . Arraste a saída Out Rounded de Adicione uma Lógica : Qualquer nó à direita de seus nós SetString. Arraste o
o nó Math : Random para a entrada Index do Fora de cada um dos seus nós SetString para uma entrada diferente do seu
Lógica : nó DeMultiplexador . Definir o modo do Lógica : qualquer nó.
Lógica : nó DeMultiplexer para IndexOnly para garantir que apenas o índice
10. Finalmente, arraste o Out of your Logic : Qualquer nó para o Set e Value
disparador de entrada é usado.
entradas do nó Entidade: PropertSet .
5 Precisamos definir a propriedade Lua Properties > Particle Effect de cada
Salve e teste . Quando tiver certeza de que sua lógica está correta, copie e cole o
Entidade ParticleEffect: adicione um nó Entity: PropertySet . Selecione o
nós para os outros fluxogramas de fluxo de tubos, tomando o cuidado de atribuir
entidade scoreEffect1 ParticleEffect no seu nível, clique com o botão direito do
suas quatro entidades ParticleEffect para os nós Entity: PropertySet.
nó e escolha Atribuir Entidade Selecionada . Definir a propriedade deste nó
Parâmetro para Propriedades: ParticleEffect . (Use o botão .. para navegar Note que você pode facilmente experimentar diferentes efeitos selecionando um
para a propriedade correta.) entidade ParticleEffect existente e arrastando um novo efeito do banco de dados
6 Adicione oito nós String : SetString . Mapear a entrada Set de cada um deles janela para uma entidade de efeito no seu nível. Tenha cuidado para não acidentalmente
para uma saída de porta diferente do nó DeMultiplexer . criar entidades de efeito adicionais, arrastando em algum lugar diferente de um
efeito existente .
Você precisará escrever cuidadosamente o nome exato do caminho e do efeito no campo
propriedade dos nós SetString. Para evitar erros de digitação, recomendamos novamente
CRYENGINE Flappy Boid Course Ver. 5.5D - 68 - 10: Adicionando alvos de pontuação animados
CRYENGINE Flappy Boid Course Ver. 5.5D - 69 - 10: Adicionando alvos de pontuação animados
11: Adicionando Áudio Depois de criar seus sons, você precisará colocá-los no
pasta projectFolder \ audio \ sdlmixer \ assets . CRYENGINE irá automaticamente
crie arquivos .cryasset para cada arquivo .OGG que os exponha ao mecanismo.
Nosso jogo está faltando um componente importante: som ! Design de som e música
para jogos de vídeo é em si uma vasta especialização e uma arte, além de ser
Ativando a Depuração de Áudio
altamente técnico, mas adicionar sons básicos ao seu jogo é bastante simples - e
faz uma enorme diferença na experiência de jogo. Existe um depurador separado apenas para entidades de áudio e eventos que
Enquanto o áudio é tratado pelo que é conhecido como middleware, o CRYENGINE não é extremamente útil quando você está projetando o áudio em seu jogo. Use o
amarrado a um middleware específico. A camada de tradução de áudio (ATL) Ferramenta de console para digitar o seguinte:
comunica entre eventos do jogo, entidades, arquivos de som, gatilhos e s_DrawAudioDebug?
parâmetros dentro do seu jogo, abstraindo e traduzindo-os à sua escolha
de middleware de áudio. Você verá todos os parâmetros para o depurador de áudio exibido, da seguinte maneira:
Um middleware de áudio muito simples e gratuito chamado SDL Mixer é fornecido com Uso: s_DrawAudioDebug [0ab ...] (sinalizadores podem ser combinados)
0: Nenhuma informação de depuração de áudio na tela.
CRYENGINE, embora você também possa usar o fMod mais completo e
a: desenhe esferas em torno de objetos de áudio ativos.
Middleware Wwise . A maior funcionalidade dessas ferramentas vem com b: Mostra rótulos de texto para objetos de áudio ativos.
taxas de licenciamento e obrigações significativas antes que você possa distribuir um jogo c: mostra os nomes dos gatilhos para objetos de áudio ativos.
comercialmente, dependendo de quantos sons você usa. d: mostra os estados atuais dos objetos de áudio ativos.
e: Mostrar valores de parâmetro para objetos de áudio ativos.
A ferramenta Audio Controls Editor é a sua interface para configurar bibliotecas de áudio de
f: mostra as quantidades de ambiente para objetos de áudio ativos.
sons que podem ser disparados de várias maneiras. Adicionar áudio traz consigo um g: mostra a distância do listener para objetos de áudio ativos.
todo um novo conjunto de questões de design que você aprenderá a planejar cuidadosamente, incluindo h: Mostrar rótulos de raio de oclusão.
tempo, a ordem dos eventos, misturando vários sons, proximidade e aparente i: Desenhe raios de oclusão.
localização e muito mais. j: Mostrar arquivos autônomos do objeto.
m: oculta informações da memória do sistema de áudio.
Já que o Wwise é complexo o suficiente para merecer um curso inteiro em si, este n: Aplicar filtro também às informações de depuração do objeto inativo.
introdução ao áudio incidirá sobre o significativamente menos complexo SDL Mixer u: Listar arquivos autônomos.
middleware. É altamente recomendável que você reserve alguns minutos para ler v: Listar Eventos Ativos.
através da nossa documentação sobre o uso do mixer SDL. w: Listar objetos de áudio ativos.
x: mostra as informações de depuração do FileCache Manager.
Vamos habilitar algumas informações úteis usando o seguinte comando do console:
Design de som
s_DrawAudioDebug abdfgmv
O SDL Mixer só reproduz arquivos .WAV ou .OGG com uma taxa de amostragem de 48kHz e
um tamanho de amostra de 16 bits. No entanto, você precisará usar o formato .OGG compactado Você verá imediatamente as informações de áudio sendo sobrepostas no
para manter seu tamanho de compilação dentro da razão. Recomendamos que você projete e salve Perspectiva de perspectiva. Lembre-se, para desativar isso depois de terminar a depuração,
seus sons em um formato não compactado de alta qualidade como .WAV ou .AIFF, tipo s_DrawAudioDebug 0
exportar cópias no formato .OGG comprimido usando o nível de qualidade seis (60%) para
qualidade de balanceamento e tamanho do arquivo.
vem de uma direção específica . Enquanto o vento pode soar como está por toda parte 5 No lado esquerdo da ACE, clique no botão Adicionar e, em seguida, na biblioteca .
nós, os sons de ondas neste jogo definitivamente vêm de baixo , dada a nossa Nomeie sua nova biblioteca FlappyAudio .
posição da câmera 100M no ar. 6 Clique com o botão direito na sua biblioteca FlappyAudio e escolha Adicionar > Trigger .
Isso significa que quanto mais próximo "nós" - ou seja, a nossa câmera - chegar à superfície de Nomeie seu primeiro oceano de gatilho .
o oceano, quanto mais alto o som do oceano deveria estar. Como Flappy Cam sobe 7 Arraste o arquivo de áudio ocean.ogg da coluna Dados do Middleware
e para baixo para seguir o pássaro, o volume do oceano deve variar ligeiramente. Além disso, no painel Conexões . Clique no ocean.ogg em Conexões se
quando a nossa câmera pula para o jogo por cima do texto e salta para o oceano, não está selecionado. Abaixo o arquivo são parâmetros para o seu áudio
nossa câmera está muito perto da superfície do oceano, então o ambiente do oceano desencadear. Defina a ação para iniciar, de modo que o disparo comece a
deve ser alto. Então teremos a diversão de adicionar áudio para o splash e som.
nos dê uma sensação de que a câmera está afundando abaixo da superfície! 8 Defina o volume para -14db e desative Ativar Panning para que o som
está ao nosso redor. Defina a distância mínima para 0 e a distância máxima para
Criando uma biblioteca de áudio 200 e habilite o Infinite Loop para que o som se repita. (Isso é típico
para ambientes como vento e ondas, ao contrário de sons únicos
Antes que possamos adicionar sons ao nível, temos que escolher nosso áudio
como um tiro.)
middleware e criar uma biblioteca de som.
9 Teste seu novo gatilho clicando com o botão direito no gatilho do oceano verde em
Na ferramenta Console, definimos o cVar s_AudioImplName seguido pelo painel Controles do Sistema de Áudio e escolhendo Executar Acionador . Você
biblioteca de middleware que queremos carregar. O padrão é o SDL Mixer : deve ouvir o som do oceano.
1. Na ferramenta Console, digite s_AudioImplName 10. Vamos garantir que o som do oceano pare quando o jogo acabar:
CryAudioImplSDLMixer . Tecnicamente, isso não é necessário, uma vez que clique com o botão direito do mouse na biblioteca FlappyAudio e escolha Adicionar > Trigger .
O SDLMixer é o middleware padrão, mas será importante Nomeie seu gatilho stop_game (você pode chamá-lo como quiser).
Conheço este cVar mais tarde, quando você quer mudar para um dos outros 11. Arraste o som ocean.ogg para o painel Conexões para o seu
ferramentas de middleware ( CryAudioImplFmod ou CryAudioImplWwise ).
acionador stop_game . Defina a ação para este som para parar . Você também
2. No menu, clique em Ferramentas > Editor de controles de áudio . Maximize isso deseja adicionar ações de parada para quaisquer outros sons que possam estar sendo reproduzidos
janela da ferramenta. quando o jogo termina neste nível.
3. Sua pasta de recursos de áudio padrão é 12. Por último, clique no botão Salvar no canto superior esquerdo do
projectFolder \ audio \ sdlmixer \ assets . Recomenda-se manter este Controls Editor para salvar as alterações na biblioteca de áudio.
configuração padrão. Nós fornecemos arquivos de áudio para o projeto FlappyBoid
na pasta \ FlappyBoidCourse [version #] \ FlappyAssets , que
1 Na janela de exibição Perspective , navegue até onde seu texto "game over"
está localizado. Use sua ferramenta Criar Objeto para adicionar um objeto AreaBox apenas
acima da superfície da água. Esta caixa inteira será efetivamente uma
alto-falante que emana o som do oceano, então precisamos dele para cercar o nosso
Câmera DiveCam. Faça seu tamanho 30x30x1M e posicione uma borda apenas
passado o jogo sobre o texto. Posicionamos nosso jogo na caixa de texto
483, 562, 23 , nossa AreaBox em 483, 551, 16,5 , e nossa DiveCam em 483,
552, 18 . Nomeie sua AreaBox ab_GameOverOceanBox .
2 Vamos adicionar um som : use a ferramenta CreateObject para adicionar um áudio >
Entidade AudioAreaAmbience . Não faz diferença onde você
posicionar essas entidades . Eles não emitem realmente o som; eles são
usado apenas para conectar um som a uma entidade de área. Como sempre, organização
é primordial e, como com outros tipos de entidade, recomendamos a nomeação
suas entidades de áudio usando abreviações que indicam seus tipos de objeto.
Nomeie sua entidade AudioAreaAmbience
aaa_GameOverOceanAmbience .
3 Vamos conectar nossa entidade AudioAreaAmbience à entidade AreaBox para
realmente ouvir o som: selecione a entidade AreaBox e clique no
Escolha o botão na paleta Propriedades > Área . Clique no
Objeto aaa_GameOverOceanAmbience para vincular as entidades. UMA
linha de conexão aparece. Você pode posicionar o AudioAreaAmbience
ícone em qualquer lugar que você gosta. Sugerimos colocá-lo bastante perto do
AreaBox.
A forma dos seus modelos e as texturas que você aplicou a eles ajudarão 2. Arraste o arquivo pipeCollisionWithSquawk.ogg para as Conexões
determinar quais sons parecem apropriados, embora você não precise se limitar janela.
4. Clique no botão Salvar no canto superior esquerdo da ACL e clique com o botão direito do mouse no nó Audio : Trigger e escolha Assign Selected
volte para a sua janela de exibição Perspective . Entidade . Isso significa essencialmente que o som virá de
onde quer que “nós” estamos - isto é, a câmera.
Ao contrário do som ambiente do oceano, queremos disparar este som quando o Flappy
Salve e antes de testar, prepare sua mão para pressionar a tecla Esc. Você deve
colide com um tubo. Vamos precisar do Flow Graph para isso, e podemos construir o
ouvir o som quando Flappy colide, mas você também vai ouvir alguns
ouvinte de colisão de física que já configuramos:
coisas estranhas: o som será acionado mais de uma vez - provavelmente muitos
5. Encontre a seção Collisions Pipe do seu FG_Main Flow Graph. Adicionar vezes de forma irrealista.
um nó Audio : Trigger .
6. Arraste a saída IdA do nó Physics : CollisionListener para o Prevenindo vários sons de colisão
Reproduzir a entrada do nó Audio : Trigger para reproduzir o som quando o Flappy
colide com alguma coisa. O que está acontecendo? Flappy continua batendo nas coisas enquanto cai - os canos,
o terreno invisível, etc! Uma versão sofisticada deste evento pode incluir uma
7. Verifique se o seu nó Audio: Trigger está selecionado e , em seguida, no Flow
som de colisão inicial seguido por sons de raspagem no contato subsequente com
Na janela Graph Properties , clique na caixa ao lado do Play Trigger
o cano. Vamos nos certificar de que o nosso som de colisão só aconteça pela primeira vez
propriedade, em seguida, no ícone da pasta para navegar. Selecione o pipe_collision
contando colisões com uma variável:
gatilho que você já criou e clique em OK .
8. Por fim, precisamos informar à ACL onde colocar o áudio no espaço 3D. 1. No menu Flux Graph , escolha Ferramentas > Editar tokens do gráfico .
Como desativamos a atenuação para esse som específico, ele não fará Os tokens do gráfico são variáveis como os tokens do jogo, mas são locais
diferença. Tecnicamente, o som deve vir de onde quer que Flappy (visível) para apenas um gráfico. (FG_Main no nosso caso.)
é, desde que o som é gerado colidindo com algo. Dentro 2. Crie um novo token chamado IntCollisions do tipo Integer .
termos de um ambiente sonoro realista, que seria o correto
3. Vamos inicializar nosso contador de colisão no início do jogo: no Initial
5. De volta à seção Colisões de Tubulações do seu Gráfico de Fluxo, adicione estas Flappy colide com algo - morte instantânea.
nós da esquerda para a direita: Missão : GameTokenModify , 9. arrastar o IdA saída da Física : CollisionListener nó para o Em
Missão : GameTokenGet , Math : InRange e Logic : Gate . entrada do nó Lógica : Gate . Arraste o Out of the Logic : Gate para o
6. Vamos incrementar nosso contador em cada colisão: arraste a saída IdA de Reproduzir entrada do nó Áudio : Trigger . Agora nós temos uma colisão
o nó Physics : CollisionListener para a entrada Trigger do pronto para acionar o nosso som de colisão, mas só queremos abrir o
intCollisions , a operação para adicionar , o tipo para Int e o valor 10. Arraste a saída True do nó Math : InRange para a entrada Open
para 1 . da saída Logic : Gate e False do nó Math : InRange para
7. Para verificar o valor do contador em cada colisão, arraste o valor de saída de a entrada Close da Logic : Gate .
Dica Pro :
A ferramenta Localizar no Fluxograma é
muito útil quando você precisa encontrar
um nó , entidade , porta ou
mesmo um valor específico - especialmente
como seus gráficos ficam complexos. Somente
Se você testar cuidadosamente, você notará que o jogador ainda pode "pular" depois Nós lhe demos dois sons para a sequência do jogo: uma queda e
colidindo com um cano. Vamos consertar isso: salpicos de som quando o texto Game Over cai na água e o som
de submergir debaixo d'água para quando a câmera afunda. Vamos adicioná-los:
1. Na seção de configuração inicial do seu Flow Graph, encontre o GameToken
nó que verifica o valor de booIsDead e alimenta o Disable 1. No Audio Controls Editor , clique com o botão direito no FlappyAudio
entrada do nó ActionListener (que fornece a ação de salto). biblioteca e adicione um novo gatilho chamado GameOverFallAndSplash .
2. Selecione o nó GameToken e altere sua propriedade Token para 2. Arraste o som fall_and_splash.ogg para o painel Conexões do
intCollisions e a propriedade Comparar para 1 . Agora, logo que o o ACL. Selecione o som no painel Conexões e defina seu
primeira colisão de tubulação ocorre, a ação de salto é desativada. propriedades da seguinte forma: Action = Start , Volume = -6db , Enable
Consulte a captura de tela do Fluxograma concluído com cuidado antes de salvar Panorâmica e Ativação de Atenuação desativada .
3. Adicione outro gatilho chamado afundando . Arraste o som sinking.ogg para dentro
7. Vamos atrasar este som inicial brevemente para dar ao som pipe_collision um
chance de ser ouvido : clique com o botão direito na alça circular no
conector entre os nós Logic : Gate e Audio : Trigger e
escolha Hora : Atraso . Defina a propriedade Delay para 0,2 segundos. 3 Arraste o nó Out of the Time : Delay para a entrada Enable do
Nó CameraView para dar ao jogador a chance de assistir Flappy cair
Salve e teste . Você deve ouvir cair e depois espirrar sons. Mas tem
antes de saltar para o Game Over.
um problema: o timing do som não corresponde ao visual do game-over
4 Adicione um nó Audio: Trigger . Arraste o nó Out of the Time : Delay
texto batendo na água. Há muitas maneiras de lidar com isso: podemos usar
(aquele que alimenta os nós MoveEntityTo e RotateEntity que
sons de queda e salpicos separados, use um gatilho de proximidade subaquática para
controlar sua câmera de mergulho) para a entrada Play do Audio : Trigger
sentido quando o jogo termina o texto, a fim de parar o som cair e começar
nó.
o som do splash, etc.
5 Defina o gatilho do Play do Audio: Trigger node para o seu trigger de afundamento,
Como fornecemos um som combinado de queda / splash de duração específica , vamos
e atribua a câmera da diveCam como a entidade.
basta atrasar o interruptor para o jogo através da câmera para dar ao jogador um momento
Salve e teste. Ajuste o atraso conforme necessário para que o som e o som
para assistir Flappy cair e atrasar a queda da caixa para dar um som
chance de ser ouvido, como se a caixa estivesse caindo de uma grande altura: estão sincronizados.
1. Primeiro, arraste a saída Out do nó Logic : Gate para o Trigger Adicionando um som de "Flap"
entrada do nó Missão : GameTokenSet que define booIsDead para
verdade . Isso garante que isso só aconteça na primeira colisão. Toda vez que o jogador pressiona a tecla de pulo, nosso Flappy se esforça para se mover
2. Na seção Game Over do seu Flux Graph, insira um Time: Delay para cima. Vamos adicionar um som humorístico simples e ativá-lo em cada salto:
nó entre o nó GameToken que verifica booIsDead e o 1. No Audio Controls Editor , clique com o botão direito no FlappyAudio
Entidade: nó PropertySet que desativa a propriedade bResting do biblioteca e adicione um novo gatilho chamado squawk_low .
GameOverBox. Tente um atraso de 1,3 segundos. Você pode precisar ajustar
2. Arraste o arquivo de áudio squawk_low.ogg para a janela Conexões .
esta.
Defina as propriedades do acionador da seguinte forma: Ação : Iniciar ; Volume : 0db ;
Ative Panning / Enable Attenuation : desativado . Salve seu som
Áudio : nó de disparo . Defina seu Play Trigger para o gatilho squawk_low Agora que você decidiu quais efeitos de partículas você deseja usar, vamos adicionar
você acabou de criar. sons para cada um deles. Neste exemplo, vamos percorrer o processo de
4. Arraste a saída pressionada de sua entrada: ActionMaps: ActionListener adicionando um som ao monitor > efeito a_lingering_elec :
nó para a entrada Play do nó Audio : Trigger .
1. No Audio Controls Editor , clique com o botão direito no seu FlappyAudio
Salve e teste. Cada vez que o Flappy salta, ele deve gritar. biblioteca e crie um novo gatilho . Nomeie algo como
“ PfxMonitorLingeringElec ” (onde “pfx” = efeitos de partículas).
Adicionando sons de pontuação 2. Arraste o arquivo de áudio star_electrical.ogg para a janela Conexões .
Defina suas propriedades da seguinte forma: Action = Start , Volume = -3db , Enable
Nossas estrelas explodindo clamam por efeitos sonoros! Existem duas maneiras de abordar
Panning / Enable Attenuation = desativado . Salve a biblioteca de áudio.
isso: podemos atribuir acionadores de áudio diretamente para as partículas usando o DataBase
> Partículas ferramenta (você vai notar uma seção de áudio com um gatilho Iniciar), por isso, quando um 3. Na ferramenta Database View > Particles , clique no efeito que você deseja
efeito de partícula é gerado, seu som é reproduzido. Ou podemos simplesmente usar o mesmo modifique ( monitor > a_lingering_elec neste caso) e então clique em
Proximity Trigger para reproduzir um som através de um nó Audio: Trigger no Flow o botão Add New Item na barra de ferramentas Particles. Nomeie o áudio .
Gráfico. Seu novo componente aparece como um item recuado sob o
efeito a_lingering_elec.
No entanto, você já deve ter percebido como os mesmos quatro efeitos de partículas
4. Clique no seu novo componente de áudio e role para baixo na partícula
repetir na mesma ordem - tornando óbvio que existem apenas quatro
propriedades para a seção de áudio . Clique na pasta ao lado do Start
tubos que são reutilizados indefinidamente. Adicionando efeitos sonoros para cada um desses
Propriedade Trigger e escolha o seu FlappyAudio>
partículas que também se repetem na mesma ordem 1-2-3-4 só vão fazer isso
Acionador pfxMonitorLingeringElec. Clique no botão Save Modified
mais óbvio.
Botão Bibliotecas na barra de ferramentas Partículas.
Vamos melhorar o nosso design de jogo, atribuindo aleatoriamente uma das muitas partículas Como sempre, salve e teste .
efeitos para cada tubo toda vez que ele volta para ai_start, assim como fizemos com o
materiais de tubulação.
Uma vez que você testou e depurou e está confiante em seu design de jogos, é
Portando um nível para outro computador ou compilação
hora de colocar o seu jogo nas mãos de alguns QAs sérios (garantia de qualidade)
jogadores que podem fazer o seu melhor para ajudá-lo, tentando quebrá-lo - para encontrar o seu Se você construiu este jogo em uma sala de aula ou se encontra em uma posição de
falhas, e para lhe dar feedback sobre se é divertido ou poderia usar algum querendo trazer o seu nível para outro computador, há alguns passos que você precisa
melhorias. seguir. Também é um bom momento para considerar a estrutura de pastas de um
Instalação do CRYENGINE e como a pasta GameSDK está configurada.
Ocultar informações de exibição na compilação
GameSDK: todos os componentes GameSDK que você baixou do
Veja como você obtém seu jogo em um aplicativo de PC autônomo: Mercado CRYENGINE
3 Saia do CRYENGINE. Nós deliberadamente deixamos o nosso jogo imperfeito na esperança de que você seja inspirado
para aprender mais aprimorando-o e aprimorando-o. Aqui estão alguns sugeridos
4 Vá para a pasta do projeto, clique com o botão direito do mouse no arquivo .cryproject
aprimoramentos que deixaremos para você projetar usando as habilidades que você aprendeu:
(GameSDK.cryproject neste curso) e escolha Iniciar jogo .
5 Teste seu jogo. Tente variar os parâmetros gráficos. Jogue contanto que • Conecte a velocidade de oscilação horizontal da textura da nuvem (ou
você pode. taxa de rotação da entidade SkyDome) para a velocidade do tubo horizontal para
Aumente a ilusão de que a ave está se movendo em velocidade crescente.
6 Se você encontrar problemas e precisar fazer alterações no Editor, certifique-se
você começar a voltar ao passo um . • Crie níveis adicionais com complexidades crescentes para o tubo
7 Quando estiver 100% confiante, crie o aplicativo independente movimento. Tente variar a geometria dos tubos em cada nível ou
clicando com o botão direito no arquivo .cryproject e escolhendo Package Build . mesmo aleatoriamente dentro de um nível. (Você encontrará geometria de tubo adicional
Isso pode levar algum tempo, por isso certifique-se de que a linha de comando lhe diz que é na mesma pasta onde você encontrou o pipe básico.)
terminou antes dos testes finais. • Em vez de mover os tubos da direita para a esquerda em linha reta, descubra
8 Finalmente, podemos definir variáveis do console em nosso arquivo .cryproject; um que como fazer os tubos subir e descer várias vezes (ou seja,
nós definitivamente vamos querer definir depois que terminarmos a depuração, mas oscilar verticalmente) ao atravessar a tela. ( Dica : olhe para o seno
antes de enviar o jogo é para esconder as informações de exibição: abra o seu ondas.)
arquivo gamesdk.cryproject no Bloco de Notas ou em qualquer editor de texto simples.
9 Encontre a seção “console_variables”. Adicione a seguinte linha abaixo: O Design Final
{“Name”: “r_displayinfo”, “value”: “0”}, Aqui estão algumas capturas de tela do nosso jogo final de vários ângulos.
10. Para testar o aplicativo real, abra a pasta _package
(GameSDK_package neste curso)> bin > win_x64 e clique duas vezes
GameLauncher . exe . Jogue seu jogo!
CRYENGINE Flappy Boid Course Ver. 5.5D - 80 - 12: Exportando um jogo para uma construção independente
CRYENGINE Flappy Boid Course Ver. 5.5D - 81 - 12: Exportando um jogo para uma construção independente
CRYENGINE Flappy Boid Course Ver. 5.5D - 82 - 12: Exportando um jogo para uma construção independente
CRYENGINE Flappy Boid Course Ver. 5.5D - 83 - 12: Exportando um jogo para uma construção independente
CRYENGINE Flappy Boid Course Ver. 5.5D - 84 - 12: Exportando um jogo para uma construção independente
Indo além
A melhor coisa que você pode fazer neste momento é aplicar o que aprendeu
construindo seus próprios jogos. Você também pode tentar estender a funcionalidade de
seu jogo boid flappy. Enquanto você provavelmente tem muitas idéias para
melhorias, aqui estão algumas sugestões para as quais publicaremos passo a passo
passo instruções em futuras edições deste tutorial:
Substitua a pontuação da mensagem de depuração por uma interface de usuário do Flash polida
Adicione recursos como jogar novamente, um número finito de pontos para acumular
terminar o nível, etc.
Por fim, sempre agradecemos o feedback. Se você tiver sugestões, veja erros de digitação ou
erros em qualquer parte deste tutorial, entre em contato conosco!
CRYENGINE Flappy Boid Course Ver. 5.5D - 85 - 12: Exportando um jogo para uma construção independente