Na última palestra, apresentamos um plano para fazer pão e também pegamos a farinha para fazer
esse pão.
Agora, queremos adicionar outro plano em que entregamos o pão. A entrega do pão
é diferente da outra cadeia.
Realmente não se encaixa porque queremos entregar pão, mas apenas quando temos uma certa quantidade de pão.
O BakeBread produz apenas 1 pão, mas queremos acumulá-los em uma entrega.
Vamos começar com o projeto anterior, onde o Baker estava assando pão e
colhendo farinha conforme necessário e, para começar, vamos inserir uma nova ação para entregar o pão, de modo a obter
uma corrente que se pareça com esta... que temos Farinha de Captação ... Asse o pão e depois entregue o pão.
Observe que o efeito 'doJob' é movido para o final da entrega de pão e um 'hasBread'
True é usado para vincular a assadeira e a entrega.
Portanto, para conseguir isso, você precisa de um
novo script de ação, então crie outro script C # e chame-o de DeliverBread e ele ficará assim.
Portanto, o DeliverBread é uma ação DeliverBread.
Lembre-se de que você pode copiar isso de suas outras ações para economizar digitando
tudo novamente e apenas modificar o DeliverBread lá e também no construtor.
Agora, a pré-condição para entregar pão é que você tenha pão e o efeito é para fazer o trabalho.
Portanto, para o padeiro estar fazendo seu trabalho completamente, ele
precisa entregar o pão, não apenas fazê-lo.
Agora, quando entregamos pão (se voltarmos para o nosso desempenho), isso significa que o
nível de pão no inventário diminuirá 1.
Portanto, certifique-se de adicionar esse efeito do ambiente físico ao seu script aqui.
Salve isso e,
em seguida, de volta à sua ação no BakeBread, você precisará alterar seu Efeito final aqui para ...
em vez de fazer o trabalho ('doJob'), será 'hasBread' é True e, em seguida, vinculará essa ação à
ação DeliverBread.
Portanto, certifique-se de salvar isso também.
Agora volte para o Unity, selecione o Baker e você deseja arrastar e soltar o script DeliverBread no Baker
e, em seguida, defina o local da entrega, que será a Porta do Mercado.
Então vamos arrastar e soltar isso lá.
Agora, quando pressionamos
Play, inicialmente não teremos pão em nosso inventário, então não podemos entregar
nada, mas ele fará pão (e você tem pão é
1) e depois vai entregá-lo e largá-lo e depois ele volta e já tem farinha suficiente
para poder fazer outro pedaço de pão e depois deixá-lo e agora ele não
tem farinha suficiente, então ele terá que ir ao moinho para pegar um pouco farinha e depois ele vai
voltar para a padaria e assar um pouco mais de pão ... mas apenas asse 1 pedaço de pão,
porque isso define o 'hasBread' como True, o que causará esse link.
Agora, a razão pela qual não podemos testar quantos pedaços de pão temos para fazer
isso é porque cada ação precisa ter as pré-condições e os efeitos que se vinculam, de modo que, quando o
algoritmo A * estiver em execução através do plano e tentando encontrar todas as
ações que
serão vinculadas, se não houver uma correspondência, não funcionará.
Portanto, você não pode fazer com que a padaria diga 'hasBread' é False e o mercado diga 'hasBread' é
True e espera que essa cadeia seja formada no estágio de planejamento, o que significa que nunca terá um
plano que apenas comece com pão e depois vai quebrar e cair e você
pode tentar que, se quiser, simplesmente não funcionará.
Então, em vez de fazer isso, você deseja adicionar um plano separado. Então, voltaremos ao nosso DeliverBread e, na
parte superior, definiremos isso como 'hasDelivery'. Portanto, uma entrega será uma coisa maior
e satisfará o 'doJob'.
Agora, quando uma entrega ocorre, digamos que há 5 pães em uma entrega;
portanto, na parte inferior aqui, o nível do inventário diminui em 5.
Então está tudo muito bem.
Então salve isso, vamos voltar ao BakeBread. Agora o BakeBread vai voltar ao que era antes, então vamos
'doJob' e continuaremos a fazer o trabalho. Salve isso e, em seguida,
você quer ir
para o Worker e precisamos injetar os 5 pães como um Estado Mundial, que acionará a entrega.
Então, vamos colocá-lo aqui no GetWorldState com a farinha, então aqui em cima
vamos apenas adicionar ...
worldData.
Adicione 'hasDelivery' e será igual ao pão do inventárioNível superior a 4, o que significa que
temos 5 (ou mais)
pães que podemos entregar e, em seguida, quando
isso atingir esse valor e 'hasDelivery' for True, a entrega poderá ocorrer.
Então, vamos salvar isso e voltar ao Unity e pressionar Play. Então, inicialmente não temos pão, então vamos
começar a fazer pão ... tem 2 pães ... vá buscar mais farinha e farinha suficiente para podermos
fazer mais 3 pães ... esses 3 pães serão feitos nesse ponto (esperamos! ), poderemos entregar, porque teremos 5
lotes de pão e lá ele vai e, quando
ele chegar lá e a ação for concluída, reduzirá o pão no inventário
para 0.
Também não há
farinha e temos que voltar ao moinho para buscá-la.
Portanto, agora temos uma série complexa de eventos com apenas algumas cadeias de ações realmente simples, e
você pode ver a partir disso como é fácil continuar adicionando ações para realizar
todos os tipos de tarefas diferentes. Na próxima palestra, veremos como adicionar um inventário global e outro agente.