Outra busca de um sonho. Mãos do aluno RTS + eyetracker

Oi

Hoje vou falar sobre outro desenvolvimento doméstico fanático, sobre até que ponto o interesse e a perseverança podem trazer e o que eles quebram. Em geral, tudo é bastante padrão para essas histórias.

Abaixo, você verá: um histórico detalhado da criação do RTS com suas próprias mãos (conceito, código, interface, equilíbrio, mapa, modelos) e um experimento para vincular um rastreador de TI a ele como uma ferramenta de entrada.




Bem, vamos começar.

No quintal de 2014.
Eu sou um estudante do Departamento de Design de Informação da Polytech (agora "Engineering Graphics and Design").

Com o diploma de bacharel, desenvolvi um jogo para um kinekt sobre um duelo de dois pujas, onde você tinha que se esquivar dos ataques do inimigo e jogá-lo nele (FAÇA AQUI !!!).

No trabalho do mestre, decidi dar um passo adiante. Naquela época, uma novidade técnica apareceu no laboratório do departamento - um rastreador de TI. A escolha caiu imediatamente sobre ele. Não havia dúvida de que o trabalho seria um jogo, tudo o que restava era escolher o assunto. Depois de pensar um pouco, percebi que quero honrar a estratégia com a qual cresci e que me abriu o maravilhoso mundo da programação - Warcraft3.

A tese de mestrado, no entanto, não é apenas o desenvolvimento de um produto. Em maior medida, deve representar algum tipo de pesquisa. A questão de como integrar o rastreamento de TI a uma estratégia revelou a caixa de Pandora.

Aqui muitos anos de experiência em jogos entraram em jogo. A maioria dos jogos tenta limpar a tela dos controles, dando o principal espaço ao conteúdo. Nas estratégias, a interface ocupa um espaço enorme. Para entender o que é uma unidade específica, você precisa localizá-la na tela, selecione-a, veja a “barra de status” e encontre o parâmetro necessário lá. Quando uma necessidade semelhante surge durante a batalha de grandes exércitos, essa sequência de ações geralmente cria dificuldades.



Surgiu a pergunta: como já encontramos a unidade em campo, por que precisamos selecioná-la mais tarde para ler as informações? Por que não conseguir apenas olhando para ele? Após a demonstração, a questão foi transformada no nome sábio “Funcionalidade da área operacional da visão humana na interação humano-computador”, que, em essência, significava comparar a eficácia do mouse e dos olhos ao resolver o problema de encontrar um objeto de uma multidão e ler informações dele.

Summa technologiae


Há um tópico Existe um conceito. Dependia da escolha da tecnologia. Após uma análise de mercado, a escolha caiu entre Unity, UnrealSDK, libGDX, entre as quais o Unity + C # foi escolhido. Tendo dominado a interface, o ciclo de vida dos objetos no palco e as possibilidades de interagir com eles, comecei a desenvolver.



Graças ao maior milagre do nosso tempo - a Internet -, encontrei uma série impressionante de tutoriais que possibilitaram construir a base do mecanismo para o futuro jogo. Depois de passar por toda uma série de tutores por algumas noites sem dormir, eu tinha uma estratégia em minhas mãos. Tinha trabalhadores capazes de construir prédios; colheitadeiras capazes de extrair recursos e edifícios capazes de produzir unidades.

Essa base foi suficiente para o experimento. É verdade que faltava um componente importante - conectar a funcionalidade do rastreador de TI ao próprio jogo.



O sistema de rastreamento de TI é um monte de dois computadores, um dos quais exibe os incentivos destinados ao usuário (vamos chamá-lo de demonstrador) e o segundo coleta e analisa informações provenientes do rastreador de TI (vamos chamá-lo de registrador). Havia um software saindo da caixa com o rastreador de TI, o que tornava possível sincronizar duas máquinas, calibrar o registro do olhar do testado (todos têm seus próprios parâmetros oculares e o próprio olhar) e, em seguida, executar uma série de estímulos estáticos para visualizá-lo. Na minha tarefa, o registro da visão deveria ser integrado a um programa estranho.

Para fazer isso, tive que estudar o protocolo de interação entre o Demonstrador e o Registrador. A transmissão de dados foi realizada através da rede local usando pacotes UDP com comandos, o que significa que eu precisava escrever meu próprio cliente de calibração emulando a operação do aplicativo padrão.

Levei alguns dias para descobrir um cliente. Primeiro como um aplicativo de terceiros. Ele permitiu que você passasse pela calibração e depois controlasse o retângulo na tela com um olhar. Mais precisamente, o retângulo foi desenhado no ponto de fixação do olhar. Parece que não a ciência do foguete, mas a capacidade de usar o olho não como um meio de obter informações, mas como uma ferramenta de saída, influência sobre o mundo exterior, delícias e choques.

Quando tudo estava pronto, era hora de experimentar.



Há uma cena limitada a uma tela. Nele, após o lançamento, unidades (tanques, lol) são geradas e começam a se mover aleatoriamente.



Cada unidade tem uma certa quantidade de saúde. Todas as unidades têm saúde máxima, exceto uma que tem metade do nível de HP. Quando uma unidade é destacada, vemos uma moldura em torno dela com um indicador de saúde. Quem tem saúde completa - o indicador está verde e cheio. Na unidade de feridos, ele está vermelho e meio cheio. O objetivo é encontrar um tanque ferido entre os demais e mantê-lo isolado por um segundo. O principal parâmetro medido é o tempo necessário para concluir esta tarefa. O experimento consistiu em 5 níveis, diferindo no número de unidades no palco - 5, 10, 15, 20, 25. A hipótese era que resolver esse problema com a ajuda de um rastreador de TI exigiria menos tempo.

Foi realizado um experimento, com dados coletados. Chegou a hora de processar estatísticas. Usei as ferramentas usuais - PHP e JavaScript, calculei o critério Fisher e constatei que a diferença entre usar um cursor e usar um itracker é estatisticamente significativa. Obviamente, a velocidade de execução da tarefa foi usada como uma variável dependente. Então eu visualizei o resultado usando D3.js.

Em geral, geralmente para resolver esses problemas, está envolvida a linguagem R ou o programa SPSS. Mas eu, por natureza, adoro economizar energia e recursos mentais. Eu considerei perder tempo aprendendo essas ferramentas adicionais um investimento ineficiente.



A imagem resultante excedeu minhas expectativas. Aconteceu que os sujeitos que usavam o rastreador de TI resolveram o problema duas vezes e até 15 objetos três vezes mais rápido que os sujeitos com o mouse.

A pesquisa e o supervisor formalizaram o artigo e este foi publicado na revista Perception.

Uau! Sucesso, fama, etc.

Aqui, gostaria de mencionar separadamente meu supervisor. Graças a ele, escrevi meus dois diplomas e, em geral, fui para a programação e a interação humano-computador. Pavel Orlov ( 1 e 2 ), agora leciona no Imperial College London, mas, em geral, estuda pessoas com a ajuda de um rastreador de TI e cria todo tipo de piadas legais.

Em princípio, é possível parar nesta fase, mas a alma do artista gritou que, como trabalho de graduação de mestrado, algo mais poderia ser mostrado do que um simples projeto preso em um tutorial.

Aprendendo a andar


Para um jogo ser um jogo, ele deve ter um conceito, idéia, enredo, lógica. Os eventos não devem ocorrer em um plano gramado interminável, mas em um mapa específico, no qual, além de prédios e recursos, elementos de relevo e algum tipo de vegetação devem estar presentes ... As unidades obviamente devem poder não apenas se mover, mas a interação do jogador com o mundo deve ocorrer por meio de uma interface ponderada.



Cego por oportunidades e perspectivas, comecei a escrever código. Antes de tudo, dei às unidades a oportunidade de atacar. Bem, desde que eles atacam, é claro, que precisarão de proteção, então minhas unidades estão cobertas de armaduras. Os edifícios estavam em perigo de destruição, então as unidades tiveram que aprender a repará-los. E por que não adicionar ao mesmo tempo a capacidade de vender esses mesmos edifícios? E se você parecer um pouco mais promissor, é possível armar os próprios edifícios para que eles possam atirar de volta contra os inimigos?

Essa idéia se tornou a pedra angular que determinou o desenvolvimento adicional e o refator completo do meu projeto. Nesse ponto, eu tinha uma classe WorldObject da qual Unit e Building herdavam, cada um com a funcionalidade correspondente. As unidades podem se mover, atacar, obter recursos, construir edifícios. Os edifícios podiam ficar de pé e produzir unidades, mas não podiam se mover e atacar. Havia um desejo de construir um prédio de segurança - uma torre ou uma torre. A torre deve ser inerentemente um edifício, mas possuir a capacidade de ataque inerente às unidades. Quebrou todos os meus planos. Era necessário remover de alguma forma a funcionalidade de ataque da classe Unit ...

Mas é possível olhar para o problema de forma mais ampla. Existem outros links intermediários entre as costas e as unidades? Existem outras situações de uso dos recursos de uma classe para outra?

Para analisar os vôos, decidi estudar: que outras inconsistências desse tipo estão presentes no jogo tomado como referência - Warcraft3. E você sabe o que? Eles os transformaram em uma galáxia inteira. Existem prédios que podem atacar, como Guarda Torre ou Orc Burrow. Há quem também possa mudar, por exemplo, Ancient of War. Existem unidades que não podem atacar, como Wisp ou todos os tipos de ovelhas e porcos neutros correndo pelo mapa (bichos). Reflexões continuaram na minha cabeça sobre a natureza da diferença entre prédios e unidades, e percebi que não existem tais diferenças. Estes são apenas os significados impostos ao programa pelos jogadores para sua própria conveniência. Existem apenas unidades e suas habilidades - mover, atacar, produzir unidades, construir edifícios, obter recursos e assim por diante.



A solução óbvia para a situação foi a criação de interfaces que as unidades podem implementar. Os seguintes itens foram criados: MoveAbility, RotateAbility, AttackAbility, DefenseAbility, HpRegenAbility, DefenseAbility, ProduceAbility, BuildAbility, RepairAbility, SellSelfAbility. A unidade permaneceu essencialmente apenas um contêiner com nome, imagem e modelo. Todas as outras habilidades estão ligadas a ele no topo.

Admirável mundo novo


Agora cabe ao conceito.

Deixe-me lembrá-lo de que o caso ocorreu em 2014. Houve um tipo de estagnação no gênero de estratégia, e isso influenciou a escolha do gênero do jogo em si. Também naqueles anos, houve um claro aumento na popularidade do cenário steampunk. Eu era uma grande fã do mundo, vestida de cobre e latão, envolta em vapor, correndo para o futuro mecânico deles. Mas me pareceu entediante fazer um jogo apenas com um chute de steampunk e eu estava procurando o desenvolvimento de uma idéia. Eu queria adicionar um confronto ao jogo. E o que pode ser maximamente contrário a uma civilização industrial tecnogênica? Claro, mágica e união com a natureza! Sim, é claro, você diz Arcano, mas caramba, com o tempo a beleza de um cenário desses não se perde. Além disso, você verá que o projeto não se transformou em um clone, dormido por um aluno de joelhos, mas em algo completamente diferente. Talvez no completo oposto ideológico de Arcano.

Quem habitará este mundo? Na minha opinião, os jogos de fantasia modernos (e isso é, em última análise, fantasia) agora se deparam com uma crise de arquétipos. Obviamente, isso se deve à negação universal, tudo se torna mais acessível e, para isso, mais compreensível. Mas isso torna menos irritante ver "pessoas" comuns e chatas em todos os lugares, impressionando desanimadamente os músculos dos "orcs", azedos da graça dos "elfos" e de outros tão incompreensíveis e desapegados que os olhos ficam borrados, "protoss".

Eu queria ficar o mais longe possível de tudo isso, me abstrair. E o que poderia ser mais abstrato do que uma bola? Eu fui desta forma geométrica perfeita. Adicionou uma parte do biomorfismo "zerg" (sim, ele pecou contra si mesmo). Pensei: por que as criaturas abstratas não deveriam ter a capacidade de moldar seu corpo e todos os tecidos tegumentares?



Então os orbes nasceram.

Eles estão vivos. Eles não têm membros. Eles têm habilidades telecinéticas para interagir com o mundo e a capacidade de cantar (como golfinhos) para se comunicar. Eles povoaram o planeta bastante densamente, mas dois centros de poder se formaram.



Um é tradicional, conservador, onde eles acreditam que são filhos da natureza e devem ser maximamente integrados a ela e contribuir para o seu desenvolvimento.



O segundo - aqueles que se consideravam o auge do algoritmo evolutivo da natureza, o que significa que os governantes têm o direito de queimar florestas em fábricas e eclipsar os céus com fumaça e vapor. E, infelizmente, de acordo com o padrão (bolo, ele deixou os orcs, mas não deixou a raposa), o segundo desejo de conquistar o mundo os forçou a buscar a expansão de sua base material e levou seus navios de guerra para a terra cheia de florestas e brilhando com luz de cristal ...

Por trás desse laço havia uma alusão a eventos completamente históricos. Não é assim que, em um dia não muito bonito, os índios viram o mastro dos navios conquistadores no horizonte? No mundo dos orbes, a história se repetiu, apenas para os índios locais nós demos bruxaria real, e os conquistadores navegaram não da Espanha do século XV, mas, digamos, da Bismarck Alemanha.

Assim começou uma guerra que destruiu ambas as civilizações. Nosso jogo deveria começar nos fragmentos do mundo passado, onde uma tribo jovem começa a se procurar nessas vicissitudes de magia e tecnologia.

Entre um pandeiro e uma engrenagem


Mas qual é o desenvolvimento?

Há apenas uma corrida no jogo, mas no decorrer da trama ela pode se modificar. A experiência adquirida ao matar e explorar o mundo permite que você comece o desenvolvimento nos ramos da magia e da tecnologia.



Para começar, estabelecemos dois ramos - Criação e Destruição. Em cada um deles várias galerias de tiro. O recebimento de cada uma delas afeta todas as unidades e todas as estruturas da corrida. A criação é responsável por todas as características construtivas - desenvolvimento do mundo, produção, extração de recursos e assim por diante. A destruição, por sua vez, é responsável pela destruição de sua própria espécie e tudo o que se move.

Depois de bombear em um galho em uma direção, você imediatamente bloqueia a oportunidade de prosseguir na outra. No final, para responder à pergunta, quantas corridas no jogo podem ser diferentes - é uma, mas com um potencial de desenvolvimento de 4 completamente diferentes.

E aqui temos um conceito. Então, é hora de decidir quem estará no nosso jogo! Quais unidades e edifícios, como eles mudarão. Depois de muita discussão, decidimos focar no conjunto básico de estratégias - um trabalhador (constrói edifícios, extrai recursos), uma unidade leve (rápida, fraca), uma unidade pesada (lenta forte), uma catapulta (combate muito lento, muito fino e de longo alcance). Dos edifícios - a base (produz trabalhadores), o ninho (aumenta a alimentação), o quartel (produz uma unidade leve e pesada), a oficina (produz catapultas), santuários / fábricas (permite bombear).

Sim, esqueci completamente de falar sobre os recursos do jogo. Decidimos permanecer em um par clássico - cristais + limite de alimentos, além de um recurso adicional para avançar ao longo da árvore de desenvolvimento. Os cristais são extraídos de depósitos espalhados no mapa (olá starcraft), o limite de alimentos é aumentado pela construção de edifícios especiais - ninhos. Um recurso adicional é obtido com a construção de um dos dois tipos de edifícios em gêiseres venenosos - santuários ou fábricas. Além disso, o jogo tem experiência que é dada para a destruição de exércitos inimigos e criaturas neutras. Se um jogador ganha um novo nível e tem um santuário ou fábrica, ele pode bombear uma vantagem na árvore de desenvolvimento.

Mas voltando às unidades e nivelando.

Pensando por um longo tempo, pensamos em como as ramificações de atualização modificarão as unidades. Veio para o seguinte:
- Steampunk + Destruction aumentará o dano e o alcance das unidades.
- Steampunk + Creation aumenta o poder de produção, coloca todos em armaduras e também aumenta a lucratividade da caminhada de cada funcionário.
- Magic + Destruction, por sua vez, torna as unidades mais rápidas no ataque e reduz seu custo, transforma catapultas em armas penduradas na parede.
- Magic + Creation aumenta o estoque de saúde e também aumenta significativamente a velocidade do movimento.

Lembre-se, eu disse acima que o jogo acabou sendo o oposto ideológico de Arcano? No mundo que criamos, tecnologia e magia não são mutuamente exclusivas. De vez em quando, a fantasia nos fazia visões de feiticeiros caminhando sobre pernas mecânicas e tanques, acionados por um cristal mágico em vez de uma usina a vapor ou a diesel.

Encontre o ponto de equilíbrio


Tudo isso parece bastante simples, mas quando tentamos transferir essa narrativa para o espaço de números, valores exatos e seus crescimentos, tudo acabou MUITO confuso. É fácil lançar alguns deltas de valores para habilidades, por exemplo, esta unidade recebe +20 de dano e +15 à velocidade de movimento. Mas então é muito difícil reduzir esse enorme conjunto de parâmetros para equilibrar.



Em uma enorme tabela do Google, registramos todas as alterações desejadas em cada unidade, com foco em um senso de beleza. O senso de beleza trabalhou em conjunto com o empirista interno, de modo que todas as mudanças nos valores eram imediatamente verificadas no cenário da batalha de teste.



Em algum momento, em algum momento no meio da noite seguinte, chegou-se ao entendimento de que se sentir bonito é bom, mas apenas a lógica e o aparato matemático podem levar ao sucesso de uma tarefa.

Tornou-se claro que todos os valores devem ser reduzidos para cada unidade para um ou mais coeficientes, que já podemos comparar. Aconteceu que toda a escola e a universidade não estão preparando você para calcular a eficácia do construtor. Não é tão óbvio quem trará mais para o tesouro - quem carrega mais na mochila ou quem se move mais rápido.

Após uma noite sem dormir de truques matemáticos, foram construídas fórmulas para calcular a eficácia de diferentes tipos de unidades e edifícios, e esse estágio foi mais ou menos passado.

Então, provavelmente, uma pergunta surgiu na sua cabeça: como toda essa loucura foi introduzida no jogo? Responderei rapidamente - pela primeira vez, pelo método da interrupção meticulosa. Mas quando cada ramo recebeu 2 estágios de desenvolvimento em cada direção e o número total de unidades chegou a 9, meu programador interno preguiçoso se rebelou. Como é - para mim, não tremendo de criatura, que eu tenho que fazer uma rotina tão chata e estúpida ?!

Então eu criei um aplicativo da web para gerar uma árvore de fluxo.





O RTSeditor (como eu o nomeei com uma mão leve) tornou possível criar a própria estrutura da árvore e indicar para cada nó o incremento de valores exigidos pelas unidades do IAbility. O nó zero determinou a configuração inicial de cada unidade de jogo.

Esse sistema retornou o JSON, que o Unity agora aceitava e configurava objetos de jogo (uma certa quantidade de tempo também precisou ser ultrapassada por esse sistema de importação, porque não era tão fácil construir e andar em torno de árvores).

Finalmente, o trabalho foi concluído e, em vez de tortura infernal, foi obtida uma ferramenta conveniente que permite configurar rapidamente todo o "conteúdo" do jogo.

Music Ainur


Aqui eu gostaria de inserir uma observação. Ao longo da história, uso pronomes diferentes - depois eu e depois NÓS. O fato é que iniciei o projeto sozinho, realizei um estudo, criei o “motor” do jogo etc. Porém, com a minha atividade, fiquei interessado nos meus camaradas e, a princípio, duas pessoas entraram no processo - Vladimir Ermakov ( Avega ) como programador experiente e Pavel Shilin como consultor descritivo do artista. Anna Trofimova e Nikolai Morozov ( Avatar4eg ) foram adicionadas para ajudar na paisagem e na programação, respectivamente. Meu bom amigo Dmitry Mashoshin também ajudou a criar um equilíbrio por algumas noites do seu tempo.

Vladimir ajudou a tomar a decisão de transferir unidades para o sistema IAbility e, em seguida, decidiu conectar seu projeto de graduação ao jogo. Seu tema e objetivo era escrever AI. Uma tarefa considerável, que em termos gerais foi resolvida, e nossos oponentes de computador aprenderam a reconstruir a base e enviar seus exércitos para a base encontrada do inimigo com um transportador.

Vamos voltar ao desenvolvimento. Quando já tínhamos uma variedade de funcionalidades, tornou-se simplesmente insuportável observar como essas formas de vida desenvolvidas pastam em um plano interminável de grama. Eu queria criar um mundo para eles e comecei a criar um mapa.

O primeiro passo foi analisar as placas WC3. Aprendi que eles consistem em vários pontos de partida simetricamente localizados, acampamentos neutros, pontos para o desenvolvimento da base e um sistema astuto de estradas entre tudo isso.

Bem, tentei criar algo parecido, mas meu (heh, com essas palavras você pode escrever todo o desenvolvimento como um todo).



A princípio, o mapa foi desenhado e desenhado em papel.

Em seguida, é descrito no Photoshop em um mapa de altura em preto e branco. Inicialmente rigoroso, adquiriu suavidade, suavidade e ruído. Um ponto importante aqui era manter a diferença entre as faces intransitáveis ​​de superfícies e descidas e subidas.

Depois disso, essa estrutura foi extrudada do avião já em Unity. Foi um bom alívio, muito parecido com um cartão de jogo.

Mas algo estava errado com ele. Ele estava completamente branco e gritou em voz alta - ADICIONE-ME TEXTURAS.

O que eu fiz.



Não tive tempo de desenhar minhas texturas (confesso, mas o tempo para a aprovação do diploma era adequado e tive que me virar), então foram usadas as texturas do WorldOfWarcraft baixadas de fontes abertas.







O Unity possui uma incrível funcionalidade de texturização que permite desenhar texturas em cima do formulário como pincéis. Isso tornou possível marcar rapidamente as zonas e, em seguida, era uma questão de detalhes e elaboração. Parece que o campo de jogo é um elemento secundário de segundo plano, mas é o olho do jogador que o observa ao longo do jogo, então eu queria tornar o mapa realmente interessante e animado. Aqui gostaria de expressar minha gratidão a Ana, que me ajudou muito no processo de texturização e destacou o mapa de verdade.

Uma grande surpresa nos esperava aqui. Nossas unidades se moviam perfeitamente ao longo do odiado plano da grama, caminhando habilmente até o ponto de pressionar ao longo de uma linha reta ideal. Quando obstáculos e irregularidades começaram a aparecer, começaram os problemas com o movimento. Sim, os orbes não têm pernas, mas isso não os impediu de quebrá-los em pequenas saliências. Havia uma necessidade de fornecer às unidades um algoritmo para encontrar o caminho.

Aqui, um experiente Vladimir entrou no negócio, que explorou o tópico e percebeu que era muito trabalhoso implementar qualquer um dos métodos existentes para resolver o problema. Foi rapidamente encontrado um plug-in (módulo?) Para o Unity que resolve o problema - A *. Vladimir descobriu a interface e adaptou-a às nossas necessidades. Depois disso, as unidades começaram a encontrar perfeitamente o caminho até o outro extremo do mapa, quando diante delas havia rochas, planícies e outros prazeres da paisagem.

Após a criação do mundo, a pergunta mais ansiosa se tornou relevante - por que todas as nossas unidades são malditas CUBOS?

Chegou a hora de dar aos orbes a forma apropriada, de colocá-los em edifícios característicos de sua aparência, de lhes dar ferramentas para o desenvolvimento de um novo mundo e armas.

Aqui, quero dizer que, antes da formatura, restavam algumas semanas. Tendo calculado minhas capacidades de tempo, cheguei à conclusão de que tenho cerca de 4 horas em um modelo e suas modificações. Eu tive que trabalhar rápido, fluir e até o limite.

Moldar o disforme


Conheça os orbes!



Estes são trabalhadores básicos. O primeiro é bombeado para a magia total, o segundo para a tecnologia completa. Um deles, com a ajuda de um fragmento de cristal que ele desenvolveu em si mesmo, pode arrastar cristais de depósitos para outras pedras e entregá-los ao formigueiro para uso posterior. O segundo coloca ferramentas tecnológicas e enormes contêineres para transporte.



Mas os ninhos em que os orbes vivem. No centro é a base varinat. À esquerda está o desenvolvimento em mágica, à direita, em tecnologia. Além disso, existe e existe desenvolvimento ao longo do ramo da destruição e da criação, portanto elas parecem tão integrais. Mas, como você sabe, isso está longe de ser sempre o caso.



E aqui estão os ninhos híbridos. Suportes de aço e cristais mágicos de cima? Porque não Pelo contrário, prefiro a união com a natureza, mas ao mesmo tempo quero ter um sistema de aquecimento? Por favor



No total, 6 objetos (3 unidades e 3 prédios) + 4 modificações (2 mágicas, 2 técnicas) foram modelados para o jogo. Infelizmente, não havia tempo suficiente para a unidade de luz e os totens.

Todas as modificações foram projetadas de tal maneira que parte delas mudou durante o desenvolvimento do ramo de destruição e parte do ramo da criação.

Assim, o jogo se tornou visualmente diverso. Você está esperando o bombeamento do próximo campo de tiro durante o jogo, como um feriado, porque depois disso todas as suas unidades serão transformadas e refletirão mais suas características e seu estilo de jogo.

No Unity, isso foi adicionado da seguinte maneira - as unidades possuem elementos básicos, por exemplo, um corpo, e cada galeria de tiro (considerando a básica) possui um link para os elementos gráficos correspondentes. Quando uma unidade aparece em cena, sua parte básica é criada e todos os kits corporais necessários são adicionados à estrutura do WorldObject a partir dos ativos.

Janela para o mundo


E agora o jogo já parece um jogo. Mas ainda assim, algo não foi finalizado. Existe um mundo, criaturas se movem ao longo dele, edifícios estão sendo construídos, recursos estão sendo extraídos. As batalhas acontecem, a experiência é conquistada e as raças escolhem seu caminho de desenvolvimento.

Por que então o jogador sofre? O fato é que uma interface adequada não é desenvolvida, HUD, como é comumente chamada em jogos.

Para resolver a tarefa de construir a interface, coletei inicialmente análogos antigos e novos - Command & Conquer, Cossacks, Warcraft 3, Starcraft 2, Warhammer, Dota, LoL - e comecei a analisar os elementos constituintes.

A interface do jogo (como de qualquer outra maneira) deve refletir a localização e o estado atuais do protagonista, além de sugerir maneiras de mudar esse estado. Em termos gerais, é a disponibilidade de recursos, informações sobre a unidade selecionada (como localização, saúde, possíveis ações e explicações para elas), a localização de todas as unidades no minimapa, a capacidade de pausar e sair do jogo.



Depois de ver como os grandes executam essas tarefas, tentei montar minha própria estrutura, correspondendo aos padrões usuais do usuário, mas ocupando a quantidade mínima de espaço na tela.

Naqueles tempos antigos, as ferramentas nativas do Unity para criar HUDs eram um pequeno conjunto de elementos que precisavam ser criados e colocados na tela diretamente através do código.

Depois de escrever um belo front-end adaptável e suave em html + css, parece, é claro, um fanatismo mais selvagem, mas o que você pode fazer. Eu tive que me adaptar, calculando os vários recuos, considerando constantemente a largura e a altura da tela.



Aparafusar a beleza a essa interface é uma tarefa extremamente sombria, então, para começar, decidiu-se executá-la em cores neutras de forma plana.

Assim que a base foi lançada, surgiu a questão de criar um grande número de ícones para os principais eventos e outros elementos da interface.

Tornou-se claro que desenhar tudo era uma tarefa completamente sem esperança, com um prazo apertado, e comecei a procurar alternativas. Encontrei um projeto maravilhoso - os GameIcons, criando ícones simples gratuitos para jogos independentes. Todos os componentes necessários foram encontrados e a interface foi montada.

No decorrer do desenvolvimento, surgiu a necessidade de criar um minimapa. Tendo um pouco de inteligência sobre as capacidades do Unity, adicionei a cada unidade no topo um retângulo do tamanho correspondente, que é visível apenas através de uma câmera especial instalada acima de todo o campo.

Assim que o minimapa estava pronto, havia um desejo de clicar nele para enviar unidades em longas jornadas, o que eu rapidamente percebi.



Vale ressaltar que parte da interface é a própria exibição de informações sobre a saúde de uma unidade, a partir da qual tudo começou. Ao realçar, agora existe um círculo ao redor da unidade, cuja cor reflete o relacionamento desta unidade com você: verde - amigável, amarelo - neutro, vermelho - hostil. Acima da própria unidade, também é exibida uma barra de saúde, que também muda de cor dependendo da sua quantidade.

Para economizar espaço na tela, foi decidido fabricar as barras de saúde de todas as unidades de um determinado comprimento (para que, ao bombear e polir, a barra de saúde de 10.000 hp não ficasse da borda da tela à borda).



A interação com o mundo não termina aí. Um elemento importante para entender o estado do mundo e as possibilidades de mudança é o cursor. Na web, geralmente se transforma em um pé para exibir um elemento que pode ser clicado e em um carro para o texto que pode ser selecionado.

No jogo, assim como devemos entender quem levantou a mão e o que fazer com ela. Portanto, ao realçar, precisamos entender de quem é a unidade e, ao passar para um estado de uma determinada ação (ataque, movimento, produção), mostrar a possibilidade de interação.

Assim que todas as ações básicas apareceram, eles queriam executá-las a partir do teclado para obter velocidade. Para isso, adicionamos conjuntos de entradas de teclado que dependem do estado do player.

E, claro, experiência e nivelamento em árvore.



Chegamos ao nível - um botão especial para bombear luzes, uma árvore se abre. Mostra em verde o que já aprendemos, em preto - no que podemos ir e em vermelho - o que não podemos.



Depois de abrir um certo campo de tiro, vemos todas as mudanças que ele faz no jogo e depois decidimos se queremos bombear.

Sim, parece um pouco desajeitado, mas foi apenas o começo!

E agora está tudo pronto para o primeiro lançamento! Hurrah, muito distante, à frente de um espaço interminável de opções de desenvolvimento.



Resta adicionar apenas a tela inicial - e vá em frente, explore as incríveis extensões de Evenedium. Ah, sim, eu não disse que depois do brainstorming reforçado, escolhemos o nome?

EVENEDIUM.

Vamos lá!


E algumas capturas de tela para quem não quer assistir ao vídeo acima.







Finita?


A versão básica do jogo estava pronta.

Sim, é muito simples, mas apenas nos deu um motivo para criar um excelente conjunto de tarefas para desenvolvimento adicional - aqui você encontrará novas unidades, o nevoeiro da guerra e habilidades com um gerador que o acompanha, novos galhos de bombeamento e mais variabilidade, a campanha e multiplayer e monetização ...

Sim, a propósito: eu me defendi perfeitamente, mas isso não me surpreendeu. Fiquei mais empolgado com o futuro do jogo, cuja implementação eu imediatamente comecei a trabalhar.

Os teclados estavam fervendo, por mais um mês estávamos escrevendo algo ativamente e, de repente, de repente, descobri que um ano de desenvolvimento já havia passado! Durante um ano inteiro, estudei a criação dessa ideia, cheia de associados, e agora somos uma equipe, temos um produto e um futuro brilhante. Decidimos comemorar.

O último commit começou a encontrar todos com esse post.



E sim O último. Por mais estranho que possa parecer, mas foi nesse momento que os caras, que no final ajudaram seriamente na criação, decidiram deixar o projeto. Ele exigiu tempo e esforço, para os quais não estavam preparados. Eles não viram nele nem perspectivas nem significado.

Para mim foi uma surpresa. Ofensivo, acertou bastante.

Não haverá uma conclusão longa, por que é? Tudo está descrito acima.

Em geral, tenho orgulho de ter perseguido meu sonho de criar um mundo e levado a esse estado.

Source: https://habr.com/ru/post/pt415069/


All Articles