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:
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.
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.
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
Para mais informações sobre mapeamento de teclas e funções executáveis acesse:
Nenhum comentário:
Postar um comentário