sexta-feira, 28 de outubro de 2011

Mapeamento de Teclas em UnrealScript

UnrealScript permite a definição de funções executáveis. Essas funções podem ser chamadas durante o jogo a partir do game console e também podem ser associadas a teclas/botões.

Exemplo de uma função executável:
exec function TesteExec()
{    
 worldinfo.game.broadcast(self, "TESTANDO EXEC FUNCTION");
}

As funções executáveis só podem ser definidas em algumas classes (e subclasses) específicas, como: Controller, Pawn, Input, InventoryManager, Weapon, HUD, GameInfo, CheatManager.

Já existem diversas funções executáveis definidas no UnrealScript que são usadas principalmente para testes. Por exemplo, inicie um jogo como UTGame (Menu UDK: View -> WorldProperties -> Game Type). Abra o game console pressionando a tecla ' ou ~. Digite ThrowWeapon e pressione ENTER.


O mapeamento de teclas em UnrealScript é feito em um arquivo de configuração chamado DefaultInput.ini que se encontra na pasta "..\UDK-20??-??\UDKGame\Config\".

Por exemplo, para associarmos a tecla H com a função TesteExec() que foi criada acima, usamos o seguinte:

.Bindings=(Name="H",Command="TesteExec")

Analisando o arquivo DefaultInput.ini podemos observar que as funções executáveis foram organizadas em Game Bindable Action (GBA), para facilitar o mapeamento de uma função a várias teclas/botões.

O nosso exemplo então ficaria assim:

.Bindings=(Name="GBA_Teste",Command="TesteExec")

.Bindings=(Name="H",Command="GBA_Teste")

E se quisermos adicionar o botão Y do controle do XBox 360 para executar a mesma função:

.Bindings=(Name="XboxTypeS_Y",Command="GBA_Teste")


Para fazer um teste do mapeamento de teclas, criei uma subclasse de UTPawn com o nome de TestePawn, defini como placeable e adicionei um SkeletalMesh. Coloquei uma Exec Function para ser executada quando pressionasse a tecla H. Inseri esse TestePawn no editor e iniciei o jogo. Pressionei a tecla H e então... nada aconteceu??? :(

Veriquei o Log (..\UDK-20??-??\UDKGame\Logs\Launch.log) e encontrei o nome da minha função "TesteExec". Isto significa que o mapeamento feito no arquivo DefaultInput.ini funcionou, o problema é que a Unreal Engine não encontrou a definição da função que fiz no TestePawn.

Depois eu inseri a minha Exec Function direto na classe UTPlayerController. Testei e funcionou perfeitamente.

Criei uma subclasse de UTGame apenas para definir que o jogo deveria usar minha classe TestePawn como a classe Pawn padrão. Iniciei o jogo como MeuUTGame. O mapeamento da tecla também funcionou corretamente.
class MeuUTGame extends UTGame;
//UTGame é uma subclasse de GameInfo
defaultproperties
{
    DefaultPawnClass=class'RomeroScripts.TestePawn'
}

A conclusão que eu cheguei é que provavelmente a Unreal Engine procura as funções executáveis a partir da classe GameInfo. Sendo assim a classe que você quiser usar com Exec Function precisa estar sendo referenciada direta ou indiretamente a partir de uma classe GameInfo. A classe GameInfo será o assunto do próximo artigo.

Para mais informações sobre mapeamento de teclas e funções executáveis acesse:
http://udn.epicgames.com/Three/ExecFunctions.html

Nenhum comentário:

Postar um comentário