Estas configurações controlam como o estúdio de personagens efetua uma transição de um estado para outro quando usando um Controlador Cognitivo. Para obter informações mais detalhadas, consulte Para configurar e usar um controlador cognitivo.
O elemento mais importante da transição é o script condicional MAXScript. Este é um script associado com o controlador que é executado uma vez por estrutura, e pode testar qualquer aspecto ou aspectos da cena e causar uma transição ou não, dependendo se o resultado do teste for bem-sucedido (verdadeiro ou 1) ou não foi bem-sucedido (falso ou 0).
O estúdio de personagens executa scripts uma vez por quadro por representação atribuída; portanto, objetos e efeitos podem ser animados e ainda permitem delegar a reação com precisão.
Todos os scripts usados em transições utilizam a seguinte estrutura:
fn [FunctionName] del t = ( [MAXScript code] if [MAXScript conditional] then 1 else 0 )
O corte de abertura contém "Fn" (função) seguido pelo nome de função, que também deve aparecer na caixa de diálogo Transição de Estado e, a seguir, os parâmetros de entrada "Del T" e, por fim, "= (". Após isso, não pode ser nenhum código MAXScript, ou nenhum.
O fechamento de seção contém um MAXScript condicional necessário e "então 1 mais 0". Isso significa: se o resultado da condicional for verdadeiro, retornar 1 (isto é, a transição será executada), ou se o resultado da condicional for falso, retornar 0 (isto é, a transição não é executada). É possível alterar a ordem dos números 1 e 0 ("então 1 mais 0"), de modo que o condicional sendo verdadeiro provocaria uma ação sem transição e vice-versa. Por último, a função deve terminar com um parêntese de fechamento: ")".
A seguir, são fornecidos alguns exemplos de scripts que podem ser utilizados em controladores cognitivos, junto com explicações breve. Eles são apresentados para modificação e uso em seus próprios cenas.
Esta script de exemplo testa o número de partículas emitidas pelo sistema de partículas Spray01 e retorna positivo se o número for igual a 100.
fn TestParticles del t = ( if (particleCount $Spray01) == 100 then 1 else 0 )
Esta script de exemplo testa a localização do objeto nomeado Sphere03 e retorna positivo se a sua posição for (X > = 150, Y > = 0, z > = 70).
fn PositionCheck del t = ( if ($sphere03.pos.x >= 150 and $sphere03.pos.y >=0 and $sphere03.pos.z >=70) then 1 else 0 )
Esta script de exemplo testa a densidade do parâmetro de um efeito de névoa e retorna positivo se for igual a 50.
fn TestAtmos del t = ( atmos_fog = getAtmospheric 1 print atmos_fog.density -- to:debug if (atmos_fog.density == 50) then 1 else 0 )
Observe a segunda linha, que atribui a névoa atmosférica a uma variável denominada "atmos_fog". Isto somente é necessário para efeitos atmosféricos; com a maioria dos objetos padrão, basta usar o nome de objeto precedido por $, como nos dois exemplos anteriores. O "1" após o comando getAtmospheric faz referência à posição atmosférica na caixa de diálogo Efeitos de renderização
Lista de efeitos.
Após executar esta atribuição, você pode obter uma lista das propriedades atmosféricas inserindo este comando no ouvinte do MAXScript ouvintes:
ShowProperties atmos_fog
Além disso, a terceira linha no script de exemplo não é necessário para o controlador cognitivo; basta imprimir o resultado do teste na janela de Ouvinte para fins de depuração.
Esta exemplo de script utiliza a função de Distância do MAXScript para obter a distância entre uma representação e um objeto de cena e retorna positivo se o resultado for menor que 30.
fn TestDist del t = ( get_dist=distance $sphere01.pos $delegate02.simpos print (get_dist) if get_dist < 30 then 1 else 0 )
Como no exemplo anterior, uma variável é usada; neste momento, apenas para manter o script simples. Na segunda linha, a função Distância é utilizada para obter a distância entre uma esfera e uma representação, e o resultado é atribuído para a variável "get_dist". Se você deseja testar todos as representações que utilizam o controlador cognitivo em vez de uma específica, substitua "$ delegate02.simpos" com "del.simpos".
Na terceira linha do script, a distância calculada é impressa para a janela do Ouvinte, para fins de depuração. Esta linha não é necessária para a simulação e pode ser excluída. Por último, o valor é comparado com a constante 30 e, se ele for menor, o script retorna 1, indicando que a transição será executada.
Você pode desenhar sobre este script para criar um controlador cognitivo que usa vários estados/comportamentos de Busca para mover as representações ao longo de um caminho entre qualquer número de objetos. Assim que a representação estiver a uma determinada distância de um objeto especificado, a transição ocorre e a representação começa com a seguinte Busca movendo-se, portanto, para o próximo objeto. Como a transição é testada em cada quadro, os objetos de alvo podem ser movidos em qualquer forma, resultando em uma animação dinâmica continuamente.
Esta script de exemplo verifica o parâmetro de Ângulo do modificador de Dobra aplicado a um cilindro e retorna verdadeiro se estiver entre 70 e -70, inclusive.
fn TestBend del t = ( if ($cylinder01.bend.angle <= 70 and $cylinder01.bend.angle >= -70) then 1 else 0 )
Observe que a declaração If na segunda linha usa parênteses ao redor do texto porque o script testa as duas condições: se o ângulo for menor do que ou igual a 70, e se o ângulo for maior do que ou igual a -70. Por causa da "e" entre os dois testes, o script retorna VERDADEIRO somente se ambas forem verdadeiras.
Você pode desejar determinar em uma transição de script que no momento esteja influenciando o comportamento de uma determinada representação. A multidão fornece um método basado em MAXScript para fazer isso. Você pode verificar se uma determinada representação está especificada como um alvo neste comportamento. Um exemplo seria a cena de um coquetel no qual Betty evita Harry se Harry estiver procurando Sally. Mas se Harry estiver evitando Sally, Betty buscará Harry.
O exemplo a seguir utiliza um script mais complexo do cenário do que o exemplo descrito no parágrafo anterior. A seguir está uma visão geral.
Seis representações estão limitadas em um "sala" definida por quatro grades, usando um comportamento de Parede de Afastamento. As representações 1, 2, 3 e 5 simplesmente perambulam aleatoriamente durante a simulação. No entanto, a representação 4 utiliza um controlador cognitivo (cc1) que indica quando ela deve começar a perambular e, a seguir, alternar para uma das três comportamentos Evitar se os membros de uma das três pares de valor arbitrário de representações vêm em 50 unidades uns dos outros. Cada um dos comportamento Evitar visam um grupo diferente de três representações, dois dos quais incluem uma representação 2. À representação 6 é atribuída um segundo controlador cognitivo (CC2) que utiliza o script a seguir para contar a ela para alternar para um comportamento Evitar se a representação 4 estiver evitando a representação 2. A essência do script é esta linha na função transfunc4:
Carregue o arquivo, aperte a tecla F11 para abrir a janela de ouvinte e resolva. A janela Ouvinte exibe uma mensagem sempre que for descoberto que representação 4 está evitando a representação 2.
Você pode usar este script como está em suas próprias simulações para verificar se uma delegação está evitando uma segunda substituindo os nomes da representação na linha acima, e também substituindo os nomes dos comportamentos Evitar na lista transfunc4, adicionando ou excluindo linhas conforme necessário.
O script de exemplo ilustra um segundo ponto importante: os scripts de transição do controlador cognitivo podem conter várias funções. A Multidão primeiro executa a função especificada na caixa de diálogo Transição de estado
no campo Condição de transição, e esta função chama uma ou mais funções adicionais no script que, claro, também pode chamar funções. Neste caso, transfunc4 chama a primeira função, isDelegateAvoiding, passando os três parâmetros.
Por último, o script contém uma função especial, getBehaviorType, que compara um comportamento de entrada à lista de comportamentos e, caso haja uma coincidência, retorna o comportamento conhecido. Neste caso, transfunc4 é executada pela lista de comportamentos atualmente influenciando a Representação04, testando cada uma com getBehaviorType, e se um comportamento Evitar comportamento estiver em vigor, ela continua para verificar se a Representação02 é um obstáculo deste comportamento Evitar. Utilizar esta função é mais eficiente e flexível do que testar determinados comportamentos, especialmente se a sua cena contém muitos comportamentos do mesmo tipo, ou você está constantemente editando as configurações de comportamento. É possível ver os comportamentos retornados ao excluir o comentário (dupla hífen) desde o princípio da linha seguinte em transfunc4.

Quando mais de uma transição testar como verdadeira, o estúdio de personagens utiliza a configuração Prioridade para determinar quais transição ocorrerão. Ele desempenha a transição com a menor prioridade. Portanto, por exemplo, uma transição com uma configuração de prioridade 0 tem precedência sobre uma com prioridade 1, e assim por diante.
Valores inferiores causa uma transição abrupta, enquanto os valores maiores causa uma transição gradual.
Valores inferiores causa uma transição abrupta, enquanto os valores maiores causa uma transição gradual.
O nome da função MAXScript que especifica quando/como a transição deve ocorrer.
Este nome também deve aparecer no início da função principal no script, após "Fn". O script pode conter funções adicionais que são chamadas pela função principal e por outros.
Abre uma janela do editor para editar, salvar e carregar a transição do script MAXScript.