PlayMaker é sem dúvida é uma dos assets mais icônicos do Unity que permite facilidade na implementação e no desenvolvimento de games. Usado tanto por artistas como para designer, ele permite fácil implementação no editor do Unity.
Mas se você é programador, gostará de saber que ele permite expandir suas possibilizadas com o uso de ações personalizadas que você pode criar.
Abaixo fiz a tradução da Wiki oficial do PlayMaker que está disponível aqui para ajudar aqueles que tem dificuldade com inglês ou que querem facilidade na hora de criar uma nova ação. Lembrando que todos os direitos da marca PlayMaker pertencem a HutongGames.
Caso você queira, você pode utilizar o Custom Action Wizard para criar suas ações personalizadas mais facilmente.
Dica de Ouro Para Começar:
Para evitar conflitos, sempre utilize um namespace personalizado ao criar ações personalizadas. Por exemplo, a url da sua empresa ou do seu game/projeto:
Exemplo:
namespace MeuEstudio.playmaker.actions
{
//Seu Código
}
E sempre verifique duas vezes se você não incluiu o plugin do Playmaker em seu unitypackage caso queria compartilhar a action com alguém.
O Playmaker descobre automaticamente qualquer classe derivada do FsmStateAction no projeto. Todas as ações descobertas aparecem no Action Browser.
Exemplo:
namespace MeuEstudio.playmaker.actions
{
public class NomeDaMinhaAcao : FsmStateAction
{
//Seu Código
}
}
As actions ou "ações" são como “blocos de construção modulares” que definem o comportamento de um estado. Escrever um Custom Actions ou “ação personalizada” é muito semelhante à escrita de um script MonoBehaviour no Unity. No entanto, ao contrário dos Comportamentos Mono, as ações podem ser movidas no Inspetor do Playmaker e executar em uma determinada sequência.
Aprenda a criar seus próprios jogos com nossos cursos de desenvolvimento de jogos
Funções Uteis:
Owner.
Faz referência ao GameObject que possui o FSM onde essa ação se encontra.
Exemplo:
Owner.transform.position = new Vector3(0,0,0);
OnPreprocess()
OnPreprocess() é chamado por PlayMakerBuildCallbacks.OnPostProcessScene
Use isso para pré-processar algo da cena, e evitar o processamento em tempo de execução.
Exemplo:
você pode adicionar manipuladores de física aqui:
public override void OnPreprocess()
{
Fsm.HandleCollisionEnter = true;
}
Isso vai adicionar um proxy Monobehaviour ao GameObject que permite pegar o OnCollisionEnter. Você pode fazer isso no tempo de compilação em vez de tempo de execução usando o OnPreprocess.
Awake()
Essa função é chamada quando a action é carregada pela primeira vez. Use isso para operações de inicialização caras.
OnEnter()
Em vez de Start(), ou OnEnable(), use OnEnter().
OnEnter é chamado quando o Estado se torna ativo. Isso permite que você inicie essa action. Muitas ações também fazem todo o seu trabalho no OnEnter.
OnUpdate()
Em vez de atualizar() use OnUpdate().
OnUpdate é muito semelhante a função Update() do MonoBehaviour.
OnExit()
Em vez de OnDisable(), ou OnDestroy() use OnExit().
O OnExit é chamado antes de deixar o estado atual. Isso permite que você faça a limpeza ou realize operações opcionais ao sair de um estado.
Finish()
Se uma ação tiver um critério de conclusão definido, ela deve chamar a função Finish(). Quando todas as ações em um estado terminarem, um evento FINISHED é enviado que pode ser usado para a transição para outro estado.
Events
Os FSMs do playmaker são impulsionados por eventos, eles mudam de estado quando recebem eventos. Uma ação pode enviar um evento usando:
Fsm.Event(eventName)
OBS: Se o evento causar uma mudança de estado, o OnExit() é chamado imediatamente em todas as ações no estado atual que tenham começado, mas não concluídas; o FSM então muda de estado, e o OnEnter() será então chamado a cada ação no novo estado.
Variables
As variáveis de ação pública são expostas no Action Editor da mesma forma que as variáveis públicas monobehaviour são expostas no Inspector do Unity. Um FSM também tem uma lista de variáveis nomeadas que podem ser usadas em parâmetros da action. Os tipos FsmVariable usam um prefixo "Fsm" na frente do seu tipo, por exemplo:
FsmInt, Para Inteiros.
FsmFloat, Para Números Flutuantes.
FsmString, Para Textos.
... (E outros tipos também)
Normalmente você recebe/define o valor subjacente da variável Fsm usando a propriedade Value, por exemplo:
Public FsmFloat Vida;
...
Vida.Value = 10;
Log()
As ações podem chamar Log(), LogWarning() e LogError() para criar entradas de log bem formatadas. Avisos e erros aparecem na janela PlayMaker Log e no Unity Console. Outras entradas de registro são exibidas apenas na Janela de Log Do PlayMaker.
ErrorCheck()
As ações podem fornecer uma função opcional ErrorCheck(). Esta função é chamada pelo Verificador de Erros para validar a configuração de ação. Use esta função para executar verificações personalizadas de configuração e retornar uma sequência de erro (ou nula se não forem encontrados erros).
OBS: Você também pode usar Atributos RequiredField e CheckForComponent para validar parâmetros.
EveryFrame
Muitas ações têm a opção de repetir cada quadro. Por convenção, isso é definido como: public bool everyFrame, e deve ser o último parâmetro da ação. Ações que repetem cada quadro não chamam de OnExit().
Reset()
As ações devem fornecer uma função Reset() que inicialize parâmetros para valores padrão úteis.
MonoBehaviour Events
As funções a seguir foram incorporadas no PlayMaker para dar apoio MonoBehaviour:
OnGUI
para usar isso, você tem que declarar explicitamente seu uso usando:
Fsm.HandleOnGUI = true;
OnFixedUpdate
para usar isso, você tem que declarar explicitamente seu uso usando:
Fsm.HandleFixedUpdate = true;
DoCollisionEnter
para usar isso, você tem que declarar explicitamente seu uso usando
Fsm.HandleOnCollisionEnter = true;
DoCollisionStay
para usar isso, você tem que declarar explicitamente seu uso usando
Fsm.HandleOnCollisionStay = true;
DoCollisionExit
para usar isso, você tem que declarar explicitamente seu uso usando
Fsm.HandleOnCollisionExit = true;
DoTriggerEnter
para usar isso, você tem que declarar explicitamente seu uso usando
Fsm.HandleOnTriggerEnter = true;
DoTriggerStay
para usar isso, você tem que declarar explicitamente seu uso usando
Fsm.HandleOnTriggerStay = true;
DoTriggerExit
para usar isso, você tem que declarar explicitamente seu uso usando
Fsm.HandleOnTriggerExit = true;
OnLateUpdate
usado para lidar com o evento MonoBehaviour LateUpdate().
Usando variáveis no PlayMaker:
Para criar variáveis no PlayMaker é muito simples, em vez de você escrever:
public float velocidade;
Você escreve:
public FsmFloat velocidade;
Dessa forma essa variável vai aparecer lá no ação do PlayMaker, lembrando que você também pode usar o tipo Var:
public FsmVar velocidade;
Somente lembre-se de definir do que se tratará essa variável posteriormente no script. 😉
Valores Padrão:
Por conveniência, é muito útil definir algum valor padrão para suas variáveis na declaração da própria variável. Mas no playmaker pode ser útil fazermos isso de dentro da função Rezet().
A maioria das Variáveis Fsm tem substituições de atribuição, então você pode apenas dizer, por exemplo: velocidade = 10;
FsmOwnerDefault:
O tipo FsmOwnerDefault permite pegar o objeto atual onde o FSM está localizado. É geralmente usado em Ações que precisam de um alvo GameObject. Uma variável FsmOwnerDefault permite que o usuário escolha o Proprietário do FSM (o padrão) ou outro Objeto de Jogo como o alvo.
Para obter a escolha do usuário use Fsm.GetOwnerDefaultTarget().
Exemplo:
public FsmOwnerDefault gameObject;
GameObject go = Fsm.GetOwnerDefaultTarget(gameObject);
OBS: Você precisará verificar se essa variável é nula antes de prosseguir, caso contrário pode gerar inconsistência no seu codigo.
Dropdown variável:
Se um parâmetro de ação precisar de um dropdown para selecionar uma variável (por exemplo, para armazenar um valor), use o atributo UIHint com UIHint.Variable.
Exemplo:
[UIHint(UIHint.Variable)]
public FsmFloat storeSpeed;
Isso permite deixar sua ação mais intuitiva e menos suscetível a erros.
IsNone:
As variáveis Fsm são garantidas para não serem nulas no tempo de execução. Para verificar se o usuário selecionou "Nenhum" na Interface do Usuário, use a propriedade IsNone.
OBS: A Variável Fsm é garantida não ser nula, mas seu Valor pode ser nulo! Por exemplo, fsmGameObjectVariable.Value pode ser nulo.
Aprenda a criar seus próprios jogos com nossos cursos de desenvolvimento de jogos