[TUTORIAL] Otimização de colisores ( desativa conforme a distância )
3 participantes
Página 1 de 1
[TUTORIAL] Otimização de colisores ( desativa conforme a distância )
Então galera... tive a idéia de fazer esse tutorial pelo FoxTenn do forumwmag
Elaborei um sistema ótimo e simples de otimização, para desativar os colisores quando estiverem distantes do jogador... fazendo o jogo ficar mais leve.
Basta criar um script em C# com o nome " Otimizacao " e jogar em algum objeto da sua cena
O seu jogador deve ter a tag " Player "
defina as distancias de ativação de cada tipo de colisor e pronto, o resto o script faz :D
Elaborei um sistema ótimo e simples de otimização, para desativar os colisores quando estiverem distantes do jogador... fazendo o jogo ficar mais leve.
Basta criar um script em C# com o nome " Otimizacao " e jogar em algum objeto da sua cena
O seu jogador deve ter a tag " Player "
defina as distancias de ativação de cada tipo de colisor e pronto, o resto o script faz :D
- Código:
using UnityEngine;
using System.Collections;
public class Otimizacao : MonoBehaviour {
private GameObject jogador;
public float distanciaBox,distanciaCapsule,distanciaSphere,distanciaMesh; // definir a distancia de ativaçao
//cria 4 listas de 4 tipos de colisores
private BoxCollider[] BoxColl;
private CapsuleCollider[] CapsuleColl;
private SphereCollider[] SphereColl;
private MeshCollider[] MeshColl;
void Start(){
//adiciona os tipos de colisores as suas respectivas listas
BoxColl = GameObject.FindObjectsOfType(typeof(BoxCollider)) as BoxCollider[];
CapsuleColl = GameObject.FindObjectsOfType(typeof(CapsuleCollider)) as CapsuleCollider[];
SphereColl = GameObject.FindObjectsOfType(typeof(SphereCollider)) as SphereCollider[];
MeshColl = GameObject.FindObjectsOfType(typeof(MeshCollider)) as MeshCollider[];
//acha o jogador pela sua tag
jogador = GameObject.FindWithTag ("Player");
}
void Update () {
//controle da ativaçao dos BoxCollider
for(int x = 0; x < BoxColl.Length; x++) {
if(Vector3.Distance(jogador.transform.position,BoxColl[x].transform.position) <= distanciaBox){
BoxColl[x].GetComponent<BoxCollider>().enabled = true;
}
else{
BoxColl[x].GetComponent<BoxCollider>().enabled = false;
}
}
//controle da ativaçao dos CapsuleCollider
for(int x = 0; x < CapsuleColl.Length; x++) {
if(Vector3.Distance(jogador.transform.position,CapsuleColl[x].transform.position) <= distanciaCapsule){
CapsuleColl[x].GetComponent<CapsuleCollider>().enabled = true;
}
else{
CapsuleColl[x].GetComponent<CapsuleCollider>().enabled = false;
}
}
//controle da ativaçao dos SphereCollider
for(int x = 0; x < SphereColl.Length; x++) {
if(Vector3.Distance(jogador.transform.position,SphereColl[x].transform.position) <= distanciaSphere){
SphereColl[x].GetComponent<SphereCollider>().enabled = true;
}
else{
SphereColl[x].GetComponent<SphereCollider>().enabled = false;
}
}
//controle da ativaçao dos MeshCollider
for(int x = 0; x < MeshColl.Length; x++) {
if(Vector3.Distance(jogador.transform.position,MeshColl[x].transform.position) <= distanciaMesh){
MeshColl[x].GetComponent<MeshCollider>().enabled = true;
}
else{
MeshColl[x].GetComponent<MeshCollider>().enabled = false;
}
}
}
}
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:30 pm, editado 1 vez(es)
Re: [TUTORIAL] Otimização de colisores ( desativa conforme a distância )
isso vai ajudar muito!
marcelo123- Membro
- PONTOS : 3534
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Otimização de colisores ( desativa conforme a distância )
Marcos, Muito obrigado por esse script! =D Isso era exatamente o que eu estava tentando criar.
Fiz vários testes aqui e esta perfeito para o meu projeto, eu percebi que o script usa o mesmo valor de (X) em Y e Z.
Tentei modificar esse calculo para que ele calcula-se o X e Z normalmente como já faz com o valor de 10 metros de distancia e que calcula-se o valor de Y separado, com um valor maior de 25 metros de altura, pois o meu projeto possui prédios. Mas minhas tentativas não deram muito certo, o fps acabou dropando muito.
Enfim, acabei deixando o código original mesmo e mantive a distancia de 25 metros para que o X,Y e Z funcionasse sem risco de alguém acabar entrando no objeto.
Obs: Eu tentei mudar o valor de Y pois alem de prédios no projeto, eu pretendo add um sistema de vou ou planar no projeto futuramente e se eu deixasse a distancia de X em 10 metros, ao voar iria continuar com o valor de 10 metros em Y e eu acabava caindo dentro dos prédios.
Msm assim, obrigado por esse conteúdo.
Fiz vários testes aqui e esta perfeito para o meu projeto, eu percebi que o script usa o mesmo valor de (X) em Y e Z.
Tentei modificar esse calculo para que ele calcula-se o X e Z normalmente como já faz com o valor de 10 metros de distancia e que calcula-se o valor de Y separado, com um valor maior de 25 metros de altura, pois o meu projeto possui prédios. Mas minhas tentativas não deram muito certo, o fps acabou dropando muito.
Enfim, acabei deixando o código original mesmo e mantive a distancia de 25 metros para que o X,Y e Z funcionasse sem risco de alguém acabar entrando no objeto.
Obs: Eu tentei mudar o valor de Y pois alem de prédios no projeto, eu pretendo add um sistema de vou ou planar no projeto futuramente e se eu deixasse a distancia de X em 10 metros, ao voar iria continuar com o valor de 10 metros em Y e eu acabava caindo dentro dos prédios.
Msm assim, obrigado por esse conteúdo.
Lucass- Iniciante
- PONTOS : 2891
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Otimização Simples por distância
» [TUTORIAL] Dicas de otimização
» [TUTORIAL] Mensagem aparecer na tela conforme a distância do jogador (Unity 5)
» [TUTORIAL] Unity 5 - Otimização por blocos
» [TUTORIAL] Unity 5 - Otimização com LOD Group
» [TUTORIAL] Dicas de otimização
» [TUTORIAL] Mensagem aparecer na tela conforme a distância do jogador (Unity 5)
» [TUTORIAL] Unity 5 - Otimização por blocos
» [TUTORIAL] Unity 5 - Otimização com LOD Group
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos