DESENVOLVIMENTO DE JOGO DISTRIBUÍDO EM REDE UTILIZANDO UNREAL DEVELOPMENT KIT - PDF
Download "DESENVOLVIMENTO DE JOGO DISTRIBUÍDO EM REDE UTILIZANDO UNREAL DEVELOPMENT KIT"
Luiz Eduardo Sanches Cesário
1 UNIVERSIDADE SÃO FRANCISCO Curso de Engenharia da Computação FERNANDO ÉTORE GALLÃO DESENVOLVIMENTO DE JOGO DISTRIBUÍDO EM REDE UTILIZANDO UNREAL DEVELOPMENT KIT Itatiba 2011
2 FERNANDO ÉTORE GALLÃO R.A DESENVOLVIMENTO DE JOGO DISTRIBUÍDO EM REDE UTILIZANDO UNREAL DEVELOPMENT KIT Monografia apresentada ao Curso de Engenharia da Computação da Universidade São Francisco, como requisito parcial para obtenção do título de Engenheiro da Computação. Orientador: Prof. Fabio Andrijauskas. Itatiba 2011
3 AGRADECIMENTOS Agradeço aos meus pais, meus amigos, colegas de trabalho, professores, e todos que me apoiaram e me permitiram que fosse capaz de trabalhar neste projeto de desenvolvimento de um jogo. Agradeço ao Thomas Cintra Penteado por se comprometer com o desenvolvimento das interfaces para serem utilizadas neste jogo.
6 RESUMO Grid Computing é um modelo de computação distribuída descentralizada que tem como foco o uso de recursos em uma rede de computadores de forma a melhorar o desempenho ou disponibilidade de recursos compartilhados. Tendo isto em mente o objetivo desse trabalho é desenvolver um jogo de computador capaz de ter os seus recursos distribuídos, melhorando o desempenho e a disponibilidade do jogo, para isso será utilizado a ferramenta de desenvolvimento de jogos Unreal Development Kit (UDK). Esta ferramenta é gratuita para uso sem fins lucrativos, permite a portabilidade de jogos feitos tanto para a plataforma Windows quanto para ios. Unindo a ideia de computação distribuída e a possibilidades de criar jogos em rede que a ferramenta UDK possibilita, será criado um jogo que terá em seu código as funcionalidades de cliente e servidor ao mesmo tempo. Agindo como um cliente para se conectar aos outros jogadores e como servidor para hospedar o mundo virtual onde o jogo se passa, este mundo possui uma ação de Teleporter que será responsável por fazer a comunicação com o servidor existente em outro computador da rede. Tal ação fará com que o personagem possa viajar livremente entre um mundo a outro, onde cada mundo estará hospedado no servidor existente no computador de cada jogador pelo tempo em que este estiver conectado ao jogo. Palavras-chave: Grid Computing. desempenho. Unreal Development Kit.
7 ABSTRACT Grid Computing is a model of decentralised distributed computing that focuses on the use of resources in a network of computers to improve performance or availability of shared resources. With this in mind the goal of this work is to develop a computer game able to have their distributed resources, improving performance and availability of the game, for this will be used to game development tool Unreal Development Kit (UDK). This tool is free for nonprofit use, allows portability of both games made for the Windows platform and ios. Uniting the idea of distributed computing and the possibilities for creating networked games that the tool enables a UDK game that will have in your code the client and server functionalities at the same time. Acting as a client to connect to other players and as a server to host the "virtual" world where the game takes place, this world has an action of "Teleporter" which will be responsible for making communication with the existing server on another computer on the network. Such action will cause the character can travel freely from one world to another, where each world will be hosted on the existing server on the computer of each player by the time that this is connected to the game. Keywords: Grid Computing. performance. Unreal Development Kit.
8 LISTA DE ILUSTRAÇÕES Figura 1 - O motor gráfico é responsável por traduzir uma lista de propriedades em imagens interativas na tela Figura 2 - Janela principal do Unreal Editor Figura 3 - Microsoft Visual Studio Figura Exemplo de Script utilizando Kismet Figura Trigger Volume em verde usado para ativar o script Figura Mapa inicial Figura Mapa após a ativação do Trigger Figura 5 - Diagrama de funcionamento da aplicação Figura TriggerVolume no mapa Dia Figura Programação via Kismet no mapa Dia Figura O TriggerVolume_1 é invisível para o jogador durante o jogo Figura Jogo se conectando ao mapa hospedado pelo servidor no notebook Figura Visão do jogador no notebook1 com o personagem do jogador do notebook2 no centro da tela... 37
9 LISTA DE CÓDIGO FONTE Código 1 FTGame.uc Código 2 - FTHUD.uc Código 3 - FTPawn.uc Código 4 FTPlayerController.uc Código 5 - FTPawn_NPC Código 6 - FTBot.uc... 32
10 LISTA DE ABREVIATURAS E SIGLAS UDK Unreal Development Kit RAM Random Acess Memory MSDNAA Microsoft Development Network Academic Alliance
11 SUMÁRIO 1 INTRODUÇÃO DESENVOLVIMENTO Conceitos Sobre Jogos de Digitais Jogos 3D Jogos em Rede GRID COMPUTING Unreal Development Kit Componentes do Unreal Engine Visual Studio METODOLOGIA Kismet Unreal Editor Configurações do ambiente Diagrama Classes FTGame FTHUD FTPawn FTPawn_NPC FTBot Problemas Testes e Resultados Conclusão Trabalhos Futuros REFERÊNCIAS... 41
12 12 1 INTRODUÇÃO Atualmente, todo computador pessoal independente de desktop ou notebook possui um ou mais recursos que acabam por ser subutilizados, sejam eles o processador, a memoria RAM, ou disco rígido. Estes recursos, criatividade e a ferramenta de desenvolvimento de jogos da Epic Games, o Unreal Development Kit possibilitam o desenvolvimento de um jogo de computador que pode ser distribuído em computadores em rede. No decorrer deste trabalho foi possível desenvolver um jogo que possui características de servidor e cliente, e possibilita o aproveitamento de recursos computacionais ociosos através da rede distribuindo processamento e conteúdo entre os computadores. Para que isso fosse possível, além do uso da ferramenta UDK, que possibilita um ambiente gráfico para criar aplicações em ambiente tridimensional, também foram usados o Visual Studio 2010 da Microsoft em conjunto com o nfringe da Pixelmine para o desenvolvimento do código usado no jogo, e algumas outras ferramentas que fazem parte do UDK que facilitaram o desenvolvimento e testes. Levando em consideração estes recursos computacionais ociosos este trabalho busca criar uma solução de entretenimento que aproveite estes recursos de forma a melhorar o desempenho em geral da aplicação, para isto esta sendo desenvolvido um jogo de computador que será formado por um servidor e um cliente, o servidor utilizara os recursos de espaço em disco para armazenar o mapa que poderá ser criado pelo usuário utilizando a ferramenta Unreal Development Kit e a memoria RAM e processamento para criar um serviço no qual irá hospedar o mapa na rede permitindo que outros jogadores se conectem utilizando o cliente do jogo onde poderão se organizar em grupos para realizar missões de forma cooperativa. Além dos recursos computacionais o jogo tirara proveito da criatividade de cada usuário permitindo que sejam adicionados conteúdos criados pelos próprios usuários permitindo assim que possa crescer em conteúdo sem ficar limitado a um mesmo desenvolvedor.
13 13 2 DESENVOLVIMENTO Neste trabalho faz-se uma breve introdução a jogos de computador e algumas tecnológicas utilizadas nos mesmos, assim como as ferramentas de desenvolvimento utilizadas durante o desenvolvimento deste trabalho. 2.1 Conceitos Sobre Jogos de Digitais Um jogo digital (ou videojogo ou jogo eletrônico), termo genérico que se refere a jogos eletrônicos desenhados para serem jogados num computador, num console ou outro dispositivo tecnológico (PIVEC E KEARNEY, 2007), como celulares, pode ser definido como um jogo onde existe interação entre humano e computador, recorrendo ao uso de tecnologia (GEE, 2003). Os jogos de computador são aplicações que possuem como objetivo a diversão e comodidade do usuário visando o seu entretenimento. Jogos de computador podem receber classificações quanto ao seu tipo e gênero, dentre eles podem ser classificados em jogos 2D, 2.5D e 3D onde jogos 2D possuem apenas imagens em duas dimensões, jogos 2.5D possuem recursos em três dimensões como o cenário, personagens, etc., porem não oferecem todos os recursos de uma aplicação em 3D que oferece recursos de visualizar uma imagem, estrutura, ambiente, personagem, etc., de vários pontos de vista podendo movimentar a câmera para vários ângulos diferentes. (Clua, Esteban W.G.; Bittencourt, João R.) Jogos 3D Segundo Clua (Clua, Esteban W.G.; Bittencourt, João R.), um jogo 3D é um software especial, pois contém elementos muito variados: módulos de Computação Gráfica, Inteligência Artificial, Redes de Computadores, Multimídia, entre outros. Todos estes módulos devem funcionar em perfeita harmonia, obedecendo a uma característica fundamental de um jogo: deve ser um software em tempo real.
14 14 Com o avanço da tecnologia do hardware e do software hoje em dia é possível produzir imagens gráficas geradas por computador que são capazes de enganar a percepção humana fazendo acreditar que tais imagens são reais, como por exemplo, um cenário criado artificialmente por computação gráfica. Com o atual poder computacional e a redes de computadores já é possível que jogos sofisticados sejam utilizados em rede Jogos em Rede Segundo o autor do texto JOGOS EM REDE Jogos por rede são jogos de computador que usam uma rede (Internet ou rede local), geralmente através do protocolo TCP/IP, para permitir uma ligação de utilizadores entre si em jogos multijogadores. No tipo de jogo multijogador podem ser encontrados jogos no estilo de tiro em primeira pessoa, como por exemplo, o Quake III, Counter-Strike ou sites da web que usam simplesmente a ligação de rede para promover os usuários com sistemas de pontuação. (JOGOS EM REDE). Atualmente a muitas das ferramentas e linguagens usadas nos jogos já possui algum método ou função para a transmissão de dados pela rede, sendo assim, possível que o jogador possa jogar com mais pessoas utilizando a rede de computadores, uma das ferramentas que possui estas instruções nativamente é o Unreal Development Kit., com o uso da rede é possível aproveitar recursos disponíveis em outros computadores assim como é feito em grid computing. 2.2 GRID COMPUTING O Grid Computing é um novo conceito que explora as potencialidades das redes de computadores, com o objetivo específico de disponibilizar camadas virtuais que permitem a um usuário ter acesso a aplicações altamente exigentes, bem como aderir a comunidades virtuais de grande escala, com uma grande diversidade de recursos de computação e de repositórios de informações. [MORIMOTO, Carlos E].
15 15 Com o Grid é possível que a aplicação agregue o recurso de vários computadores de uma rede somando os recursos e tratando isso como se fosse um único recurso de uma quantidade muito maior, como por exemplo, a memoria RAM dos computadores ou o espaço em disco. Utilizando essa técnica, pode-se usufruir de alguns benefícios como: 1. Organizações podem agregar recursos 2. Poderosa plataforma de suporte a Organizações Virtuais 3. Acesso distribuído a diversos tipos de recursos 4. Colaboração entre centro de pesquisas 5. Melhor utilização de largura de banda 6. Aproveitamento de recursos ociosos Isto já é utilizado no software Unreal Development Kit durante a renderização do mapa durante o calculo de luz e iluminação do mapa, por este motivo o software foi escolhido para este trabalho. 2.3 Unreal Development Kit O Unreal Development Kit (UDK), segundo Jason Busby, Zak Parrish e Jeff Wilson, autores do livro Mastering Unreal Technology, Volume I Introduction to Level Design with Unreal Engine 3, o Unreal Engine usado pela ferramenta UDK é um sistema que organiza os seus assets personagens, sons, níveis, musicas, vozes, armas, efeitos de som e etc, - em um ambiente gráfico interativo, não qualquer ambiente gráfico, mas sim um que se comporta da maneira que você desejar em outras palavras um jogo[busby, Jason, 2009]. Todas as informações sobre Unreal Development Kit, seus componentes e ferramentas foram retirados do próprio site da ferramenta e do livro Mastering Unreal Technology, Volume I Introduction to Level Design with Unreal Engine 3.[BUSBY, Jason].
16 Componentes do Unreal Engine O Unreal Engine é formado por vários componentes que trabalham de forma independente, mas são mantidos em harmonia por uma central core engine. Como todo o sistema é modularizado, licenciados da tecnologia do Unreal Engine podem editar ou alterar qualquer componente sem modificar drasticamente o core engine (o que aumentaria o custo de desenvolvimento e/ou atrasos na entrega). Motor Gráfico O motor gráfico controla o que você vê enquanto esta jogando um jogo. Sem ele, você veria apenas uma lista enorme de propriedades mudando seus valores, como a localização do jogador, quantidade de vida, armas que esta carregando, munição, animação que estaria sendo executada, etc. Graças ao motor gráfico toda essa informação é traduzida em um ambiente estonteante que você vê enquanto esta jogando como na figura 1. Figura 1 - O motor gráfico é responsável por traduzir uma lista de propriedades em imagens interativas na tela.
17 17 O motor gráfico é responsável pelos cálculos por trás das cenas, por exemplo, ele determina quais objetos estão na frente de outros, e quais objetos devem ocultar outros na visão que aparece na tela. No Unreal Engine 3, quando você oculta objetos que se encontram atrás do ponto de visão, estes objetos não são renderizados. Isso libera muitos ciclos de processamento para algo que precise mais, otimizando para um melhor desempenho da aplicação. Motor Sonoro É dito que 90% do que você percebe é o que você ouve, até o melhor filme ou jogo perde a sua essência com o som desligado, os jogos atuais possuem muitos sons diferentes na sua programação, que vão desde o som do jogador caminhando ou correndo, vidros quebrando, som das águas de um rio ou chuva, som de ventos, a própria musica ou som ambiente que dão vida ao jogo. O motor sonoro torna possível todos estes efeitos de som nos jogos. Ele utiliza todos os efeitos sonoros que tenha sido gravado e importado, e utiliza ou ativa eles com base em certos eventos dentro do jogo em si como o som de uma explosão sendo tocado quando uma granada é jogada ou algum veiculo explode. Motor Físico O Unreal Engine 3 utilizado pelo UDK não possui um motor de física próprio, mas utiliza o PhysX desenvolvido pela NVIDIA, este suporta uma grande gama de simulações físicas como, corpos rígidos, constrained bodies(organismos restritos), dynamics skeletal meshes(malhas de esqueleto dinâmico) e até mesmo simulação de tecidos. Cada uma dessas simulações pode ser interativa no jogo e pode ser manipulada seja pelo jogador diretamente ou por alguma sequencia de script. O motor físico pode trabalhar em conjunto com o motor sonoro para gerar sons de impacto por exemplo.
18 18 Gerente de Entradas Sem as entradas do jogador, como as teclas pressionadas pelo usuário, sejam estas em um controle ou usando o teclado e mouse, não existiria um jogo, mas sim apenas uma animação dirigida por um motor de jogo, cada uma dessas entradas deve ser reconhecida e convertida em comandos que dizem ao jogo como reagir. Este trabalho é do gerente de entradas ou input manager dentro do Unreal Engine 3. Infraestrutura de rede Durante uma partida multiplayer usando a rede, cada computador de cada jogador esta em constante comunicação com outro computador que esta agindo como o servidor. Este computador servidor também pode executar o jogo como um cliente e fazer parte da mesma partida que esta sendo executada no servidor. Quando um computador esta sendo usado estritamente como servidor sem nenhum cliente sendo executado, este é chamado de servidor dedicado. Servidores dedicados são geralmente preferidos para um jogo online pois dessa forma pode aproveitar todos os seus recursos para executar o servidor. O ponto chave para uma eficiência em jogos através da rede é limitar a informação enviada pela rede para apenas as informações importantes em relação ao jogo, como a posição do jogador e sua interação com o ambiente que se encontra. Enviando apenas os detalhes relevantes ao jogo pela rede, é possível ter um jogo rápido mesmo em conexões lentas, o Unreal Engine foi desenvolvido para fazer isso. Interpretador de UnrealScript UnrealScript é um dos aspectos mais revolucionários do Unreal Engine. É uma linguagem de script que permite que programadores ou usuários ajustem virtualmente qualquer coisa que esteja sendo executada pelo Engine, sem a necessidade de alterar o código fonte do jogo. Esta linguagem foi criada com a intenção de ser relativamente fácil de usar, é muito parecida com C++ e Java, e seu criador Tim Sweeney diz que preferiu escolher a simplicidade do que a velocidade de execução.o interpretador de UnrealScript é
19 19 um componente do engine responsável por transformar o UnrealScript criados previamente em códigos que podem ser processados pelo engine. Kismet Kismet é uma ferramenta de programação visual que faz parte do Unreal Development Kit, esta ferramenta é utilizada durante o desenvolvimento dos mapas e pode ser acessada através do Unreal Editor, pode ser utilizadas para facilitar a programação utilizando eventos, variáveis e etc. [KISMET HOME] Unreal Editor O Unreal Editor, como pode ser visto na figura 2, é a ferramenta utilizada para criar os mapas, adicionar objetos, personagens, static meshes e vários outros assets que serão utilizados no mapa. Este foi utilizado para criar alguns mapas para serem utilizados pelo jogo em desenvolvimento.[unreal EDITOR AND TOOLS] 1. Menu bar: 2. Toolbar 3. Toolbox 4. Viewports 5. Status bar
20 20 Figura 2 - Janela principal do Unreal Editor A barra de menu ou menu bar no editor de nível é algo familiar a qualquer pessoa que já utilizou aplicações para Windows anteriormente. Ela provê acesso a uma grande gama de ferramentas e comandos que são necessários no processo de criar um nível com o Unreal Editor [UNREAL EDITOR USER GUIDE] A barra de ferramentas, como na maioria das aplicações, é um grupo de comandos que provê acesso rápido aos comandos e ferramentas mais comumente usados na aplicação. Muitos dos itens encontrados nos menus do editor de níveis também podem ser encontrados como botões na barra de ferramentas. [UNREAL EDITOR USER GUIDE] A caixa de ferramentas é um conjunto de ferramentas usadas para controlar o modo que o editor de níveis esta trabalhando, reformular builder brush, criar novos volumes e geometrias de BSP e controlar a visibilidade e seleção dos atores pelos viewports. [UNREAL EDITOR USER GUIDE] Viewports no editor de níveis são as janelas para o mundo que esta sendo criado no editor. Oferece múltiplas visões ortográficas (Topo, Lateral, Frontal) e uma visão em perspectiva, lhe da controle completo sobre o que pode ser visto e como é visto. [UNREAL EDITOR USER GUIDE]
21 21 O Unreal Editor é utilizado para gerar o mapa ou cenário onde o jogo se situa, as classes e o código usado no jogo é feito com a ajuda da ferramenta de desenvolvimento da Microsoft, o Visual Studio Visual Studio 2010 O Microsoft Visual Studio 2010 Professional é a ferramenta essencial para indivíduos que executam tarefas de desenvolvimento básicas. Ele simplifica a criação, depuração e implantação de aplicativos em uma variedade de plataformas que incluem o SharePoint e a nuvem. O Visual Studio 2010 Professional é fornecido com suporte integrado para desenvolvimento orientado a testes, bem como ferramentas de depuração que ajudam a garantir soluções de alta qualidade. [VISUAL STUDIO 2010 PROFESSIONAL] A solução de desenvolvimento Visual Studio 2010 Professional pode ser adquirida graças a parceria da Universidade São Francisco com a Microsoft que disponibiliza vários programas de forma gratuita aos alunos de cursos de tecnologias através do MSDNAA. A ferramenta Visual Studio sozinha não reconhece a linguagem UnrealScript que foi utilizada na programação das classes do jogo desenvolvido, para isso foi necessário adicionar um plug-in recomendado e usado pela própria Epic Games, criadora do Unreal Engine, o nfringe[nfringe] que adiciona ao Visual Studio a possibilidade de criar scripts e reconhecer a formatação da linguagem UnrealScript e reconhecer seus erros na estrutura do código. Figura 3 - Microsoft Visual Studio
22 22 3 METODOLOGIA Este trabalho utilizou uma ferramenta de desenvolvimento de jogos gratuita para estudos e fins não lucrativos, esta ferramenta utiliza a Unreal Engine 3 vencedora de vários prêmios e utilizada no desenvolvimento de vários jogos de alta qualidade hoje em dia como as séries de Assassin s Creed, Gears of War, Unreal Tornament, entre outros O programa Unreal Development Kit pode ser adquirido na página do próprio site (www.udk.com). Esta ferramenta é capaz de gerar jogos com qualidade impressionante e possui varias ferramentas internas que facilitam a criação de mapas, animações, vídeos, ambiente com folhagem, terrenos, movimento de personagens, e programação do jogo em geral, uma das ferramentas que foi utilizada neste desenvolvimento foi o Kismet, que ajuda o usuário a criar programações de eventos, ações e condições através da programação de script visual. Com esta ferramenta a programação de eventos e outras ações é muito mais simples de ser feita mesmo sem grandes conhecimentos de programação por linha de código. 3.1 Kismet A ferramenta Kismet de programação visual foi utilizada no desenvolvimento deste jogo para permitir que seja definido no gatilho que ativará o teletransporte para outro mapa hospedado em outro servidor utilizando para isso o comando de console open ipaddress onde o IP do servidor ao qual o jogador deseja se conectar poderá ser inserido pela interface que será criada no trabalho desenvolvido por Thomas Cintra Penteado, o qual criará uma interface que usará actionscript e scaleform para criar um campo na tela onde o usuário poderá inserir o IP e esta informação será adicionada a uma variável global do jogo, que por sua vez será utilizado pelo kismet para executar o comando de console, figura 4.1 e 4.2 que fará o cliente se conectar ao outro servidor na rede.
23 23 Figura Exemplo de Script utilizando Kismet Figura Trigger Volume em verde usado para ativar o script Para que isso seja possível foi criado um script Figura 4.1 simples onde uma variável guarda o comando que será executado, e um Trigger Volume Figura 4.2 foi criado dentro do
24 24 mapa, este Trigger Volume ativará o script assim que um jogador toca-lo, e o script por sua vez executará o comando enviando o jogador para outro mapa como podemos ver a seguir na Figura 4.3 Mapa inicial e Figura 4.4 Mapa após ativar o Trigger. Figura Mapa inicial Figura Mapa após a ativação do Trigger
25 Unreal Editor Pelo Unreal Editor pode-se criar alguns mapas simples para serem utilizados para testes de comunicação do jogo e para o aprendizado no uso da ferramenta, também foram utilizados alguns exemplos de mapa já prontos que acompanham a ferramenta em sua instalação, estes possuem uma qualidade de detalhes muito maiores e já são optimizados para jogos em rede para até 64 jogadores. 3.3 Configurações do ambiente Antes de o projeto começar a ser desenvolvido é necessário fazer algumas configurações para o inicio do desenvolvimento, para isso foram seguidos alguns passos: 1. Instalar o UDK mais recente que pode ser adquirido no site 2. Instalar o Visual Studio 2010 Professional 3. Instalar o nfringe 4. Navegar até a pasta <caminho de instalação do UDK>\Develpment\Src e criar uma pasta onde serão salvos os arquivos de script do projeto, neste caso foi usada a pasta FTGame, dentro desta criar a pasta Classes o resultado sera: <caminho de instalação do UDK>\Development\Src\FTGame\Classes 5. Abrir o Visual Studio e criar um novo projeto utilizando o modelo de UnrealScript selecionando a pasta anteriormente para o local onde serão salvos os arquivos do projeto. 6. Após criada a estrutura, é necessário criar alguns scripts básicos para definir algumas configurações do jogo, foram criados os scripts FTGame.uc, FTHUD.uc, FTPawn.uc, FTPlayerController.uc 7. Criados os scripts é necessário configurar o Unreal Editor para utiliza-los para o novo jogo, para isso é necessário editar o arquivo DefaultEngine.ini localizado na pasta <instalação do UDK>\UDKGame\Config\DefaultEngine.ini e navegar até a área onde
26 26 diz: [UnrealEd.EditorEngine] e adicionar a linha +EditPackages=<Nome da pasta do projeto> 8. Feito o passo 7, ao abrir o Unreal Editor, este informará que os scripts precisam ser recompilados, depois do processo ter sido feito basta criar um novo mapa, navegar para o menu View -> World Properties, expandir a opção Game Type e selecionar em Default Game Type e Game Type for PIE a classe criada anteriormente, neste caso FTGame. Seguidos estes passos, o ambiente de desenvolvimento estará pronto para criar níveis utilizando o modelo de jogo que for definido na classe FTGame.uc.
27 Diagrama Figura 5 - Diagrama de funcionamento da aplicação Como é visto neste diagrama, o aplicativo, chamado de Projeto Fairy Tail, será instalado em pelo menos dois computadores, o aplicativo é formado pelas classes FTGame, FTPawn, FTHUD, FTbot, FTPawn_NPC e FTPlayerController, estas classes são interdependentes e controlam algumas configurações do jogo. Cada um dos computadores onde o jogo estiver instalado hospedará um mapa diferente que possui um componente Trigger que ao ser ativado executa o comando de console open ipaddress onde o ipaddress é substituído pelo IP do outro computador na rede. Ao executar este comando, o aplicativo abre uma conexão de rede com o aplicativo no outro computador permitindo que o jogador seja transportado para o mapa hospedado no outro computador.
28 Classes As classes são arquivos de código em Unreal Script com definições de padrões do jogo que serão utilizadas durante a execução do jogo, definindo o seu comportamento, comandos, personagens, inteligência artificial e etc FTGame Esta classe define o modelo de GameType que será utilizado pelo jogo e define as classes que serão utilizadas por padrão no jogo,com isso é possível definir o estilo de jogo, como o personagem deverá se comportar, quais serão os comandos que o jogador poderá executar e etc. class FTGame extends UTDeathMatch; defaultproperties { //Aponta para a classe Pawn usada neste jogo DefaultPawnClass=class'FTPawn' //Aponta para a classe PlayerController usada neste jogo PlayerControllerClass=class'FTPlayerController' } FTHUD Código 1 FTGame.uc A classe HUD será usada pelo jogo para definir a interface usada durante o jogo, quais informações estarão disponíveis na tela, como a vida do personagem, a mira da arma, entre outras coisas, esta classe ainda não foi definida, pois a interface ainda esta em planejamento. class FTHUD extends HUD; defaultproperties { //Será usada para definir a interface futuramente } Código 2 - FTHUD.uc
29 FTPawn O código 3 apresenta a classe Pawn usada pelo jogo, a principio esta classe, utiliza as variáveis ElapsedRegenTime, RegenAmount e RegenTime para definir o tempo de regeneração e quantidade de saúde regenerada pelo personagem do jogador, esta classe é utilizada no jogo para definir o personagem do jogador, como esta classe esta extendendo a classe UTPawn que já vem pronta de exemplo junto com o UDK o personagem padrão do jogo e suas características serão semelhantes aos usados pelo personagem usado no jogo Unreal Tornament. class FTPawn extends UTPawn; var float ElapsedRegenTime; var float RegenAmount; var float RegenTime; event Tick(float DeltaTime) { //Calcula o tempo que se passou ElapsedRegenTime += DeltaTime; //passou o tempo suficiente? if(elapsedregentime >= RegenTime) { //Cura a saúde do "Pawn" e reinicia o contador HealDamage(RegenAmount, Controller, class'damagetype'); ElapsedRegenTime = 0.0f; } } defaultproperties { //Define as propriedades padrões de regeneração de saúde RegenAmount=2 RegenTime=1 } Código 3 - FTPawn.uc
30 FTPlayerController PlayerController é a classe usada neste jogo para definir a aparência do personagem do jogador e a câmera usada para definir a visão do personagem. Devido ao pouco tempo para o desenvolvimento do jogo e seus personagens, aqui também foi utilizada uma extensão de uma classe que já acompanha o UDK, ela já define os comandos que podem ser passados pelo jogador e como o personagem responde a eles. class FTPlayerController extends UTPlayerController; var class<utfamilyinfo> CharacterClass; simulated event PostBeginPlay() { super.postbeginplay(); SetupPlayerCharacter(); } /** Definir a classe de informação de personagem do jogador e executar outra inicialização */ function SetupPlayerCharacter() { //Define o personagem ServerSetCharacterClass(CharacterClass); } defaultproperties { //Aponta para a classe UTFamilyInfo para o personagem CharacterClass=class'UTFamilyInfo_Liandri_Male' CameraClass=class'FTGame.FTPlayerCamera' } Código 4 FTPlayerController.uc
31 FTPawn_NPC Neste código 6 foi definido um personagem do jogo da mesma forma que o personagem do jogador, porem alguns detalhes a mais são definidos aqui, como o padrão de animação do personagem, qual o seu esqueleto que define como o personagem é capaz de se mover, a física que será aplicada ao personagem, e define que este personagem não será controlável e estará no mapa para combater o jogador. Esta classe ainda não esta finalizada, apesar de estar funcionando será modificada futuramente ou criadas varias classes diferentes para definir diferentes monstros que serão adicionados ao jogo. class FTPawn_NPC extends UTPawn placeable; var(npc) SkeletalMeshComponent NPCMesh; var(npc) class<aicontroller> NPCController; simulated event PostBeginPlay() { if(npccontroller!= none) { //Define a classe ControllerClass existente para a nova classe NPCController ControllerClass = NPCController; } Super.PostBeginPlay(); } //Substituir para fazer nada simulated function SetCharacterClassFromInfo(class<UTFamilyInfo> Info) { } defaultproperties { //Constroi o NPC Padrão, com o seu "esqueleto", padrão de simulação de fisica e animações. Begin Object Class=SkeletalMeshComponent Name=NPCMesh0 SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode' PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics' AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_BaseMale' AnimtreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human' End Object NPCMesh=NPCMesh0 Mesh=NPCMesh0 Components.Add(NPCMesh0) //Aponta para a classe AIController customizada - Como valor padrão NPCController=class'FTBot' } Código 5 - FTPawn_NPC