Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

O que é mais leve para o jogo , colliders ou calcular distancia

quanto ao kit medico , foi usado a função OnTriggerEnter ( ) para detectar colisão mas ,o que pesaria menos durante um jogo : o calculo continuo que verifica a distancia entre o player e o kit medico que se fosse <= 0.5 por exemplo ,destruiria o kit medico e curaria o jogador ou , o uso da função OnTriggerEnter ( ) que faz parte da física da unity ?

2 respostas
solução!

Oi, Daniel, não consegui testar no profile mas vou dar um chute com algum grau de assertividade.

Provavelmente o OnTriggerEnter será mais leve, em primeiro momento não faz sentido mas a distancia é calculada a todo frame e a física só roda em alguns por isso fica um pouco mais leve. Mesmo você otimizando a distancia usando sqrtMagnitude e usar talvez alguma abstração pra ela não acontecer a todo frame, provavelmente a física de colisão ainda assim será mais leve.

Acho que o que podemos é otimizar a física da colisão, usando colisores em esfera no Kit Médico por exemplo é uma boa, já que são os colisores mais rápidos e leves. Uma otimização que podemos fazer também é usar as camadas de colisão assim a física do Kit Médico não precisa detectar qualquer colisão e pode somente detectar o Jogador, nesse caso nem necessitaria verificar quem é o objeto, colidiu, é o jogador.

Mas a pior otimização na verdade está em fazer o GetComponent pra ficar procurando o script e isso aconteceria ainda pior com a detecção de distancia que teria que ficar procurando o jogador no começo para poder começar a calcular. Essa parte facilitaria muito se no momento que o jogo começar a gente já criasse alguns Kit Médicos que soubessem qual o script da vida e aí não precisaria procurar, isso é chamado de Object Pooling.

Você cria por exemplo 10 kit médicos no começo do jogo, já configurados mas desativados. No momento que precisa de um você puxa o primeiro da lista e só coloca no lugar, quando colidir ele volta a estar desativado. Então você não precisa ficar criando, destruindo, procurando jogador em cada objeto. Você faz isso uma vez só no loading por exemplo.

Essa técnica tem num outro curso de jogos aqui da Alura que é mais focado em perfomance para mobile. Ele também faz parte da formação de jogos, mas tem alguns pré-requisitos, já que esses outros focam mais em C#.

Obrigado pelas dicas professor