Nesta palestra, continuaremos trabalhando em nossa simulação de multidão.
Desde a última palestra, adicionei um cenário extra à cena que você encontrará na pasta
Street no projeto em Prefabs.
Também adicionei outro local da meta para que a multidão caminhe pelos dois lados dos edifícios.
Agora, fazemos algumas modificações nos controles de animação para impedi-los de andar como um exército
armado antes de adicionar um obstáculo dinâmico.
A primeira coisa que precisamos fazer é impedi-los de andar juntos.
Lembre-se, eles estão tocando exatamente a mesma animação, exatamente na mesma velocidade.
O que podemos fazer para parecer um pouco diferente é, antes de tudo, torná-lo para que não fiquem em
sintonia, para que estejam em diferentes fases do ciclo de caminhada e a outra coisa
que podemos fazer é mudar a velocidade ou a velocidade da caminhada.
Então a primeira coisa que queremos fazer é encontrar nossa animação.
Vamos clicar em Ativos> Pessoas e depois há a 'Multidão'.
Clique duas vezes nele e este é o Controlador de
animação com o nosso 'Walking'.
Se você selecionar a animação Caminhada e procurar no Inspetor, verá que há uma Velocidade (da
qual voltaremos em breve) e um 'Deslocamento do Ciclo'. Esse deslocamento de ciclo é um valor entre 0
e 1 que especifica em que local do ciclo a animação está sendo reproduzida.
Agora, se você definir valores aleatórios para todos os caracteres, eles ficarão fora de sintonia.
Para fazer isso facilmente, precisamos de um parâmetro que possamos pegar do nosso código.
Então, primeiro de tudo, vamos para a seção Parâmetros e depois clicamos em '+'.
Vamos adicionar um float e chamaremos esse float de wOffset e isso é porque é um deslocamento a
pé.
Em seguida, para nossa animação de caminhada, selecione isso e vá até o Inspetor.
Você deseja marcar a caixa Parâmetro
ao
lado de Deslocamento do ciclo e ele preencherá automaticamente o wOffset como o parâmetro.
Agora, qualquer valor que atribuímos ao wOffset em nosso código passará por aqui e definirá o deslocamento para a caminhada.
Para definir esse deslocamento, volte ao seu código AIControl. No Start, logo após configurar o animador, antes de
iniciar a animação ambulante, definiremos o valor de deslocamento para ele, para que seja
um valor aleatório entre 0 e 1, entrando nesse wOffset.
É um SetFloat
nesse caso, porque é um valor flutuante.
Portanto, salve isso, volte para o Unity e pressione Play.
Agora, veremos que nossos personagens não estarão sincronizados entre si, o que faz com
que pareça um pouco mais naturalista.
Agora também podemos fazer a mesma coisa com a velocidade. Se voltarmos ao nosso Walking in the animator, você encontrará
no Inspetor que existe o valor de velocidade que
vimos anteriormente.
Também pode ser alterado com um parâmetro e possui um multiplicador abaixo, que você pode ver aqui.
Vamos criar isso antes de tudo. Então, criamos um Float e vamos chamar isso de 'speedMult'.
Inicialmente, ele será definido como 1; caso
contrário, você não irá a lugar algum, porque se você multiplicar por 0,
será
a uma velocidade de 0 e, em seguida, selecione sua animação Walking, clique na caixa Parameter ao lado e, em
seguida, altere sua multiplicador para speedMult.
Agora podemos modificar o speedMult também em nosso script.
Portanto, se abrirmos nosso script novamente (o AIControl) e pudermos fazer isso no Start, podemos dar a eles uma velocidade
de caminhada aleatória.
Então vamos anim.
SetFloat ("speedMult" e depois Random. Intervalo, digamos em algum lugar entre 0. 5 e 2. Vamos colocar um 'f' lá
para
o nosso carro alegórico e salvar isso. Nesse ponto, você terá apenas a velocidade multiplicada na animação.
Portanto, ele diminuirá ou acelera,
mas a velocidade do agente (o Nav Mesh Agent) não está sendo alterada e, portanto, você deseja garantir que, se alterar a velocidade da animação,
também altere a velocidade na qual o Nav Mesh O agente também está se movendo.
Primeiro, precisamos salvar qual é o seu multiplicador para a sua velocidade, então
vamos colocar 'float sm =' e tiraremos isso daqui.
Entendido.
Cole-o
lá em cima, coloque-o como nosso 'sm' e também usaremos o 'sm' na
velocidade do nosso agente, então 'agente. velocidade * = sm; ' Curtiu isso.
Agora, temos nosso multiplicador de velocidade aplicado à nossa animação E ao movimento do agente.
OK, então salve isso e voltaremos para o Unity e jogaremos e devemos obter velocidades diferentes, como você
pode ver
lá, e as animações também são diferentes.
Então, multiplicando-o por 2 como o máximo, eles andam muito rápido, mas você pode ver
que a animação os acompanha.
Se você quiser desacelerá-las, porque não parece particularmente naturalista, é
possível que as pessoas passem a 0. Se andar e talvez as pessoas digam 1. 5f.
Depende de você o que você
tem aí
e o efeito que realmente está buscando, mas pelo menos todo mundo agora não está andando em sintonia entre
si e algumas pessoas estão dando um passeio casual e outras estão com pressa.
Agora vamos adicionar um obstáculo dinâmico ao NavMesh para que nossos agentes se movimentem e esse obstáculo pode ser
qualquer coisa, mas vamos torná-lo um controlador em primeira pessoa.
Portanto, entre no seu Assets e importe o pacote de caracteres. Depois
de fazer isso, você obterá um pacote do FirstPersonCharacter em 'Standard Assets> Characters' da
sua pasta Assets.
Entre no Prefabs e agarre o FPSController e arraste e solte na cena.
Se estiver abaixo da superfície, apenas levante-a um pouco e eu vou movê-la de volta, porque eu quero levá-la para essas pessoas que estão
subindo dessa maneira, para que possamos vê-la. Agora, ele tem uma câmera que usaremos
em um momento, mas, por enquanto, usaremos a câmera atual que está apontando para a
cena, porque eu quero dar uma olhada nisso e para você ver que esses agentes vão completamente
ignore-o primeiro.
Então, com isso, pressione Play e, em seguida, você pode usar as teclas W, A, S & D para mover seu personagem e você perceberá
que pode passar direto pelas pessoas e elas nem se importam ou sabem que você ' estou
lá.
Então, se você estivesse jogando isso no modo de primeira pessoa, a mesma coisa aconteceria ... as pessoas andavam direto para cima
e depois direto para você.
Ok, basta pressionar Escape para recuperar o controle do mouse e parar de jogar. Para transformar esse controlador de primeira pessoa em
um obstáculo no
NavMesh, adicionamos um componente chamado 'Obstáculo de malha de navegação'.
Portanto, selecione o controlador de primeira pessoa na cena e vá até o Inspetor, adicione componente e
estamos procurando um Obstáculo de malha de navegação.
Clique nisso.
Agora você não precisa tornar esse objeto estático, como fizemos com todas as outras geometrias,
porque não é estático. Vai estar se movendo e os agentes vão reagir a isso. Agora, dentro do Nav
Mesh Obstacle, você também pode definir se será uma cápsula ou uma caixa.
Nosso personagem é uma cápsula, então vamos colocar uma cápsula lá.
Nesse ponto, você verá que existem 2 cápsulas ali. Um é o colisor de física e o outro é o coletor
do NavMesh e você pode ajustá-los para que sejam exatamente iguais. Vou deixá-los como são porque
são bem parecidos.
Então agora, quando pressionamos Play e levamos nosso personagem para passear, descobrimos que as pessoas o evitam e, por
isso, estão dando voltas e, se esbarrarmos nas pessoas, também afetamos onde elas estão.
Então, para ter uma ideia de como isso é, pressione Escape e pare de jogar. Vamos descer, encontre nossa
câmera que temos antes e você pode excluí-la ou simplesmente desligá-la.
Agora, quando pressionamos o play, o padrão é a câmera na primeira pessoa, e agora
podemos percorrer as pessoas e elas nos evitarão. Então você pode ver esse personagem circulando e também
afetamos aqueles ao nosso redor.
Você pode empurrá-los para fora do
caminho e, como eu disse antes, você pode adicionar este Obstáculo de Nav Mesh a qualquer objeto de jogo em
sua cena para torná-lo um obstáculo dinâmico no NavMesh, para que você também possa ter um carro que esteja
dirigindo juntamente com a TI como um obstáculo de malha de navegação, para que todos os agentes presos nela precisem navegar pelo
objeto em movimento.
Obviamente, como você pode imaginar, quanto mais obstáculos dinâmicos você adicionar, mais o
código NavMesh precisará trabalhar para continuar recalculando os caminhos.
Portanto, quando você puder ter algo estático e não se mover, você deseja torná-lo estático e
pensar no que será movido, torná-lo não estático e adicionar o Obstáculo do Nav Mesh.