Página 1 de 1

Paths no Unity

Enviado: Ter Dez 20, 2016 9:09 am
por saim
Olá. Sou usuário do Game Maker a algum tempo e estou tentando adaptar alguns jogos meus pro Unity.
Uma das facilidades do GM é o uso de paths, que não está tão óbvio, no Unity. Não tem aquelas funções built-in nem o editor de paths tão bacana...
Bom, alguém saberia criar e utilizar um path no Unity? Se não der pra ser com tantas opções quanto no GM, pelo menos um path de velocidade fixa (ou seja, a velocidade seria definida apenas pelo objeto que percorre o path), podendo o objeto ser alinhado a ele enquanto percorre o caminho?

Re: Paths no Unity  Tópico resolvido

Enviado: Ter Dez 20, 2016 6:37 pm
por bruzin123456
A forma mais simples de resolver o problema seria criar um path linear... Nesse caso você simplesmente pega uma lista de Vetores(pontos). Então simplesmente faça o objeto se mover de um ponto ao próximo usando Vector.MoveTowards.

Agora se você quer uma solução mais sofisticada e que possa usar curvas irá dar no minimo 10 vezes mais trabalho, não vou escrever um tutorial mais vou enumerar o que seu algoritmo necessitaria para funcionar corretamente;

1-) Colecionar os Pontos  para formar o caminho;

2-)  Utilizar curvas de Bezier para interpolar uma curva entre os pontos, curvas de bezier de grau muito alto consomem muito desempenho então a melhor opção são usar curvas quadráticas e separar o caminhos em diversos trechos de 3 pontos;

3-) Curvas de Bezier são dependentes de t(tempo), então você sera apenas capaz definir o tempo que o objeto demorará para percorrer o percurso. Para o objeto percorrer o trecho à velocidade constante primeiro você calcula a distancia do trajeto usando Comprimento de Curva(É uma integral, se você procurar consegue encontrar ja resolvida). E então divide a velocidade desejada  pela distância do trajeto, então você terá o tempo necessário que o objeto deve percorrer o caminho.

4-) Para que o objeto esteja rotacionado para a posição que está se movimentando você deve Derivar a função de Bezier para obter um vetor tangente, os ângulos desse vetor será a rotação do o objeto.

5-) Para ter um feedback visual no editor e prever como seria o caminho você terá que usar OnDrawGizmos, para desenhar a curva e os pontos.

* *Essa e uma de muitas soluções, existem outros métodos de interpolar curvas, porém curvas de Bezier são bem utilizados em computação grafica devido a eficiência.

Fazer tudo isso é um tanto trabalhoso, se você não tem o tempo ou a paciência você pode procurar por alguma solução já pronta no Asset Store!

Re: Paths no Unity

Enviado: Qua Dez 21, 2016 9:24 am
por Denis Lemos
A Unity não tem essa funcionalidade, então você deve criar o seu próprio sistema. Caso seja apenas para estudo, sugiro que pesquise e tente criar por si próprio, mas se for para projetos comerciais vale mais a pena comprar um sistema já pronto na Asset Store, isso reduz o tempo de desenvolvimento. Tem muitos pacotes desse tipo na loja da Unity, mas eu conheço um que me parece ser o melhor.

PhatMagic: Esse parece ser o melhor sistema de Paths que eu vi na asset Store, ele custa $20 o que fica um pouco caro com o preço do dólar, mas você precisa comprar apenas uma vez e pode usar em todos os seus futuros jogos. Se for jogos comerciais vale muito o investimento.

Simple Waypoint System: Este está na promoção por tempo limitado custando $7,50. Embora parece mais simples, tem muito mais opções do que o sistema de path do GM.

Re: Paths no Unity

Enviado: Qua Dez 21, 2016 9:42 am
por bruzin123456
Eu encontrei uma solução free no asset store não cheguei a testar mas parece bom : Itwent

E o passo 3 que eu citei na minha explicação está incorreto, não existe solução analítica para curvas de Bezier(Quadrática ou superior), é melhor usar uma aproximação.

Re: Paths no Unity

Enviado: Qua Dez 21, 2016 4:54 pm
por saim
Valeu!
Como ainda não pretendo comercializar os jogos, vou experimentar a asset free. Mas vou dar uma olhada em todas!
Muito obrigado!

Re: Paths no Unity

Enviado: Seg Dez 26, 2016 3:14 pm
por rluders
A Unity tem uma função chamada NavMesh que pode ajudar.