Unity - Lentidão e Aceleração alteradas do nada!!!
2 participantes
Página 1 de 1
Unity - Lentidão e Aceleração alteradas do nada!!!
Boa noite, pessoal! Seguinte,
Meu Jogo (Ludo 3D) tem 16 Personagens, mas comecei a fazer o Script com 1 e tudo funcionava bem.
Quando fiz o 2º personagem, ambos pararam de funcionar como antes.
Os movimentos mudaram o comportamento. Quando era pro personagem andar e parar, ele andava, parava e andava novamente e depois parava de vez, e isso sem dar comando algum!
Daí pra ver se isso era por que aumentei a quantidade de personagens de 1 pra 2, criei os outros 14 personagens e coloquei o Script em cada um.
Aconteceu que todos os movimentos ficaram mt rápidos e o pulo mt alto. E quando eu removi o Script dos 15 e deixei só no 1º, tudo ficava muuuuito lento. Não sei oq é isso! Acho até que a aceleração é que fez os personagens bugar andando e parando, é como se ele ficasse sem freio!
Não quero ter que fazer um Script pra cada personagem, pois em um só Script dando Gets nos personagens e interagindo tudo em todos, eles são reconhecidos, o problema é que estou tendo essa instabilidade na lentidão ou a aceleração dos movimentos, sem falar na parte que ele anda, para, e em vez de ficar parado, ele anda novamente e logo em seguida para de novo.
O que seria isso?
O certo é 1 Script só e colocando ele em todos os personagens?
Ou tem que ser 1 Script separadamente pra cada personagem? (Prefiro 1 Script só. Nele interajo tudo!)
Quer fazer 1 único Script e colocar ele nos personagens, dado.. é possível fazer isso sem ter esses problemas?
Obg a todos!!!
Meu Jogo (Ludo 3D) tem 16 Personagens, mas comecei a fazer o Script com 1 e tudo funcionava bem.
Quando fiz o 2º personagem, ambos pararam de funcionar como antes.
Os movimentos mudaram o comportamento. Quando era pro personagem andar e parar, ele andava, parava e andava novamente e depois parava de vez, e isso sem dar comando algum!
Daí pra ver se isso era por que aumentei a quantidade de personagens de 1 pra 2, criei os outros 14 personagens e coloquei o Script em cada um.
Aconteceu que todos os movimentos ficaram mt rápidos e o pulo mt alto. E quando eu removi o Script dos 15 e deixei só no 1º, tudo ficava muuuuito lento. Não sei oq é isso! Acho até que a aceleração é que fez os personagens bugar andando e parando, é como se ele ficasse sem freio!
Não quero ter que fazer um Script pra cada personagem, pois em um só Script dando Gets nos personagens e interagindo tudo em todos, eles são reconhecidos, o problema é que estou tendo essa instabilidade na lentidão ou a aceleração dos movimentos, sem falar na parte que ele anda, para, e em vez de ficar parado, ele anda novamente e logo em seguida para de novo.
O que seria isso?
O certo é 1 Script só e colocando ele em todos os personagens?
Ou tem que ser 1 Script separadamente pra cada personagem? (Prefiro 1 Script só. Nele interajo tudo!)
Quer fazer 1 único Script e colocar ele nos personagens, dado.. é possível fazer isso sem ter esses problemas?
Obg a todos!!!
Última edição por WLCS22 em Sex maio 14, 2021 7:34 pm, editado 2 vez(es)
WLCS22- MembroAvançado
- PONTOS : 1926
REPUTAÇÃO : 60
Respeito as regras :
Re: Unity - Lentidão e Aceleração alteradas do nada!!!
Podem ser várias coisas q estejam alterando o comportamento do seu script, às vezes até algum fator externo a ele, como o uso errôneo de um rigidbody.
O correto e ideal é sempre a reutilização de scripts, portanto, poder usá-lo em todos os personagens de forma livre e desacoplada, o que poderia impedir tal prática é se vc estiver utilizando alguma propriedade ou método static, mas fica difícil alguém te ajudar sem o script pra darmos uma analisada nele.
O correto e ideal é sempre a reutilização de scripts, portanto, poder usá-lo em todos os personagens de forma livre e desacoplada, o que poderia impedir tal prática é se vc estiver utilizando alguma propriedade ou método static, mas fica difícil alguém te ajudar sem o script pra darmos uma analisada nele.
Re: Unity - Lentidão e Aceleração alteradas do nada!!!
Então, MayLeone, mt obg pela atenção!
Sou mt nova na Unity, dá até vergonha de mostrar o Script, pois ainda estou testando as coisas, sem falar que é mt grande!
Eu tenho esse Script dos personagens e um Script das Plataformas, não tem nada a ver com os Personagens. Nele só faço as Plataformas girarem. Apenas isso.
O problema começou a partir do 2º Personagem posto em cena, pois funciava bem quando era só o 1º. Quando coloquei o 2º já deu bronca. E agora está tudo lento! Não faço ideia do que seria isso, será uma sobrecarga de personagens? Acho que não, mas.. não sei.
Quando eu pesquisei sobre esse comportamento do personagem de andar, parar e tals, eu vi algo sobre o Rigidbody, a pessoa estava falando que poderia ser os Freezers no position e no rotation. Eu o faço só nos eixos X e Z tanto no position, quanto no rotation. Seria isso? Cara.. se for, tô perdida. Pq eu preciso deles congelados, do contrário os personagens não para nem anda nem corre nem pula quieto, eles saem da linha!
Segue parte do código, no caso é quando o personagem sai da plataforma, vai pra casa inicial, anda e para:
O método do jogo é nada mais nada menos que de acordo com a casa atual do personagem e o valor do dado, ele anda, corre, pula, gira, dança.. enfim.
Olha, uma coisa que não sei se tem interferência, quando eu estava com o 1º e 2º personagens, o giro da plataforma estava um pouco rápido. Daí diminui ela, será que isso tem alguma coisa a ver? É no Script que só tem nas plataformas, não tem nos personagens não.
Sou mt nova na Unity, dá até vergonha de mostrar o Script, pois ainda estou testando as coisas, sem falar que é mt grande!
Eu tenho esse Script dos personagens e um Script das Plataformas, não tem nada a ver com os Personagens. Nele só faço as Plataformas girarem. Apenas isso.
O problema começou a partir do 2º Personagem posto em cena, pois funciava bem quando era só o 1º. Quando coloquei o 2º já deu bronca. E agora está tudo lento! Não faço ideia do que seria isso, será uma sobrecarga de personagens? Acho que não, mas.. não sei.
Quando eu pesquisei sobre esse comportamento do personagem de andar, parar e tals, eu vi algo sobre o Rigidbody, a pessoa estava falando que poderia ser os Freezers no position e no rotation. Eu o faço só nos eixos X e Z tanto no position, quanto no rotation. Seria isso? Cara.. se for, tô perdida. Pq eu preciso deles congelados, do contrário os personagens não para nem anda nem corre nem pula quieto, eles saem da linha!
Segue parte do código, no caso é quando o personagem sai da plataforma, vai pra casa inicial, anda e para:
- Código:
// O personagem sai da plataforma e vai pro plano que fica em cima da primeira casa
private bool personagemPlanoInicial(Animator _animator, string stMovimento, Rigidbody _rigidbody, GameObject objPersonagem, Vector3 destinoPlanoInicial) {
_animator.SetFloat(stMovimento, movimentoParado);
_rigidbody.useGravity = false;
objPersonagem.transform.position = Vector3.MoveTowards(objPersonagem.transform.position, destinoPlanoInicial, velocidadePlanoInicial * Time.deltaTime);
if(objPersonagem.transform.position == destinoPlanoInicial) {
return true;
}
else {
return false;
}
}
// O personagem fica no ângulo certo e com a gravidade ele cai na casa inicial
public void personagemCasaInicialH1Amarelo() {
// Se fizer um método só, o personagem não desce pra casa inicial. Daí o retorno, que depois de usado, volta a seu valor inicial (false)
if(!retornoDeCasaInicialH1Amarelo) {
retornoDeCasaInicialH1Amarelo = personagemPlanoInicial(_animatorObjH1Amarelo, "MovimentoH1Amarelo", _rigidbodyObjH1Amarelo, _objH1Amarelo, planoInicialAmarelo);
}
else {
_rigidbodyObjH1Amarelo.useGravity = true;
_objH1Amarelo.transform.eulerAngles = anguloPraEsquerda;
listaDasReferenciasH1Amarelo[1] = true;
}
}
// Método que faz o personagem andar
public void andar(string stMovimento, GameObject objPersonagem, Animator _animator, Vector3 destino, Vector3 anguloFinal, int casaAtual, int casaDeDestino) {
// Seta o parâmetro dos movimentos do Personagem. Aqui ele anda
_animator.SetFloat(stMovimento, movimentoAndando);
// Variáveis que tratam a ida e vinda do Personagem para a Casa Inicial e para a Plataforma
vaiPraCasaInicialH1Amarelo = false;
voltaPraPlataformaH1Amarelo = false;
// Quando a posição do deslocamento for igual à posição final, o Personagem para, é tratado o status da Casa Atual e a de Destino na lista
if(objPersonagem.transform.position == destino) {
// Método que deixa o Personagem parado
parar(stMovimento, objPersonagem, _animator, destino, anguloFinal, casaAtual, casaDeDestino);
}
}
// Método que faz o personagem para
public void parar(string stMovimento, GameObject objPersonagem, Animator _animator, Vector3 destino, Vector3 anguloFinal, int casaAtual, int casaDeDestino) {
_animator.SetFloat(stMovimento, movimentoParado);
Quaternion rotacaoFinal = Quaternion.Euler(anguloFinal);
objPersonagem.transform.rotation = Quaternion.RotateTowards(objPersonagem.transform.rotation, rotacaoFinal, velocidadeGiroDoPersonagemH1Amarelo * Time.deltaTime);
if(_objH1Amarelo.transform.rotation == rotacaoFinal) {
listaDasReferenciasH1Amarelo[casaAtual] = false;// Marca a Casa Atual como "false"
listaDasReferenciasH1Amarelo[casaDeDestino] = true;// Marca a Casa de Destino como "true"
retornoCoroutineDelayPuloH1Amarelo = false;
retornoCoroutineDelayDeslocamentoH1Amarelo = false;
puloH1Amarelo = true;
jogadorDaVez = 0;
dado = 0;
retornoDeAndou = false;
retornoDeCorreu1 = false;
retornoDeCorreu2 = false;
retornoDeCorreu3 = false;
retornoDePulou = false;
}
}
// Método do Jogo (Como ele é mt grande, coloquei só quando a chamada do método andar é feita)
public void jogo(List<Vector3> listaDasCasas, List<bool> listaDasReferencias, string stMovimento, GameObject objPersonagem, Animator _animator) {
// Varre a Lista (de 59 ítens) em que as referências das Casas foram inseridas. i == 1 para não pegar a plataforma que é i == 0
for(int i = 1; i < listaDasCasas.Count; i++) {
// A Casa Atual e Destino
int casaAtual = i;
int casaDeDestino = casaAtual + dado;
if(casaAtual > 58 || casaDeDestino > 58) {
//print("ÍNDICE FORA DA LISTA, SEU LIMITE É 58");
//print("casaAtual > 58 ::: " + casaAtual);
//print("casaDeDestino > 58 ::: " + casaDeDestino);
}
// RODA O JOGO
else {
// Casa de Destino do Personagem
Vector3 destino = listaDasCasas[casaDeDestino];
// Se o Personagem atingiu a 58ª Casa, esse Personagem completou o Jogo
if(listaDasReferencias[58] == true) {
// O Fim do Jogo recebe "true", pois o Personagem finalizou 0 Jogo
}
// O Jogo Continua
else {
// Casa Atual do Personagem e o valor do Dado == 1
if(listaDasReferencias[casaAtual] == true && dado == 1) {
// Anda
if(casaAtual >= 1 && casaAtual <= 5) {
andar(stMovimento, objPersonagem, _animator, destino, angulo, casaAtual, casaDeDestino);
}
}
}
}
}
}
O método do jogo é nada mais nada menos que de acordo com a casa atual do personagem e o valor do dado, ele anda, corre, pula, gira, dança.. enfim.
Olha, uma coisa que não sei se tem interferência, quando eu estava com o 1º e 2º personagens, o giro da plataforma estava um pouco rápido. Daí diminui ela, será que isso tem alguma coisa a ver? É no Script que só tem nas plataformas, não tem nos personagens não.
Última edição por WLCS22 em Sex maio 14, 2021 8:09 pm, editado 2 vez(es)
WLCS22- MembroAvançado
- PONTOS : 1926
REPUTAÇÃO : 60
Respeito as regras :
Re: Unity - Lentidão e Aceleração alteradas do nada!!!
Amigo, fechei a Unity, o Visual Studio, reiniciei meu pc e abri eles novamente. Resolveu, isso foi ontem. Mas hj ele está do mesmo jeito quando estava dando erro. Não dá pra ficar sem controle disso, mas não sei o que está causando isso não. A velocidade de deslocamento que eu estava fazendo era 5f agora ele parece que está como se forre 20f ou 30f, e isso é no 1º Personagem, todos os personagens estão igualmente com os movimentos assim. Quando eu estava testando só com 1 personagem, estava tudo bem. Mas quando coloquei o 2º apresentou o problema e quando coloquei o resto não mudou nada.
MayLeone, retomei o tópico por que eu pensei que tinha resolvido o problema, mas não resolveu não.
Vc viu meu código?
MayLeone, retomei o tópico por que eu pensei que tinha resolvido o problema, mas não resolveu não.
Vc viu meu código?
WLCS22- MembroAvançado
- PONTOS : 1926
REPUTAÇÃO : 60
Respeito as regras :
Tópicos semelhantes
» Lentidão na Unity
» Não consigo alterar "nada" no unity
» Jogo fecha do nada
» rotação e aceleração.
» PITCH para aceleração de carro. Como que faço mesmo?
» Não consigo alterar "nada" no unity
» Jogo fecha do nada
» rotação e aceleração.
» PITCH para aceleração de carro. Como que faço mesmo?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos