Velocidade constante em qualquer plataforma Unity 5
3 participantes
Página 1 de 1
Velocidade constante em qualquer plataforma Unity 5
Todos sabemos que se quisermos uma velocidade baseada no tempo e não do hardware devemos multiplicar a velocidade por Time.deltaTime;
Tudo lindo até aqui , e isto realmente resolve na maioria das vezes.
Sim , na maioria não em todas.
Coloquei isso no meu jogo e funciona normal , mas por um motivo desconhecido em determinadas vezes que inicio o Nível o personagem fica extremamente rápido , ai eu paro a execução do jogo e começo dnv e ai volta ao normal.
Sim eu usei Time.deltaTime , mas algumas vezes a velocidade fica diferente , extremamente rápida.
Fiz alguns testes e colocar o comando transform.Translate na função FixedUpdate resolveu o problema.
Agora me respondam , é correto fazer isso?
Posso ter algum prejuízo fazendo isso ou não?
Ficou tipo assim :
Por mais que eu tenha colocado a velocidade sem Time.deltaTime o personagem sempre andou na mesma velocidade , independente das execuções ou plataformas.
Acham q é coincidência ou posso usar isso sem problemas ? Se não puder , qual a forma de fazer o personagem andar na mesma velocidade em todas as plataformas?
Tudo lindo até aqui , e isto realmente resolve na maioria das vezes.
Sim , na maioria não em todas.
Coloquei isso no meu jogo e funciona normal , mas por um motivo desconhecido em determinadas vezes que inicio o Nível o personagem fica extremamente rápido , ai eu paro a execução do jogo e começo dnv e ai volta ao normal.
Sim eu usei Time.deltaTime , mas algumas vezes a velocidade fica diferente , extremamente rápida.
Fiz alguns testes e colocar o comando transform.Translate na função FixedUpdate resolveu o problema.
Agora me respondam , é correto fazer isso?
Posso ter algum prejuízo fazendo isso ou não?
Ficou tipo assim :
- Código:
function Start () {
velocidade = 3f;
}
function Update () {
}
function FixedUpdate (){
transform.Translate(0,0,vel);
}
Por mais que eu tenha colocado a velocidade sem Time.deltaTime o personagem sempre andou na mesma velocidade , independente das execuções ou plataformas.
Acham q é coincidência ou posso usar isso sem problemas ? Se não puder , qual a forma de fazer o personagem andar na mesma velocidade em todas as plataformas?
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
A void Update ocorre de acordo com os FPS do jogo, ou seja, se o jogo está a 15 FPS o update será chamado 15 vezes por segundo... se o jogo estiver a 1000FPS, o update será chamado 1000 vezes por segundo.
Já a void FixedUpdate acontece na mesma velocidade que as simulações de física do seu jogo, ou seja, a 50Hz... Isto pode ser conferido em Edit > Project Settings > Time > FixedTimestep. Geralmente o valor padrão dessa variável é 0.02 segundos a cada simulação, ou seja, vão ocorrer 50 simulações fixas por segundo, independente do FPS do jogo.
Então, colocar comandos assim no FixedUpdate sem multiplicar por Time.deltaTime é correto sim, por que a void FixedUpdate é chamada a 50Hz, juntamente com a simulação do PhysX
Apenas uma observação... evite utilizar transform.Rotate ou Translate para movimentar o seu jogador, pois esses movimentos usam interpolação, e ignoram colisões.
Já a void FixedUpdate acontece na mesma velocidade que as simulações de física do seu jogo, ou seja, a 50Hz... Isto pode ser conferido em Edit > Project Settings > Time > FixedTimestep. Geralmente o valor padrão dessa variável é 0.02 segundos a cada simulação, ou seja, vão ocorrer 50 simulações fixas por segundo, independente do FPS do jogo.
Então, colocar comandos assim no FixedUpdate sem multiplicar por Time.deltaTime é correto sim, por que a void FixedUpdate é chamada a 50Hz, juntamente com a simulação do PhysX
Apenas uma observação... evite utilizar transform.Rotate ou Translate para movimentar o seu jogador, pois esses movimentos usam interpolação, e ignoram colisões.
Re: Velocidade constante em qualquer plataforma Unity 5
Esquece oque eu disse acima kkkk Ainda n sei editar ou excluir algo .
Só uma coisa , o rigidBody.velocity (usado para andar ) , tbm iria precisar de deltaTime fora do fixedUpdate ne?
Só uma coisa , o rigidBody.velocity (usado para andar ) , tbm iria precisar de deltaTime fora do fixedUpdate ne?
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
lesgoy escreveu:Esquece oque eu disse acima kkkk Ainda n sei editar ou excluir algo .
Só uma coisa , o rigidBody.velocity (usado para andar ) , tbm iria precisar de deltaTime fora do fixedUpdate ne?
Sim, mas rididBody.velocity usa-se na void FixedUpdate SEMPRE
Não há motivos para tirar a sincronia da simulação do PhysX com os comandos do rigidbody.
Re: Velocidade constante em qualquer plataforma Unity 5
Não entendi , porque deve usar sempre no fixedUpdate?MarcosSchultz escreveu:lesgoy escreveu:Esquece oque eu disse acima kkkk Ainda n sei editar ou excluir algo .
Só uma coisa , o rigidBody.velocity (usado para andar ) , tbm iria precisar de deltaTime fora do fixedUpdate ne?
Sim, mas rididBody.velocity usa-se na void FixedUpdate SEMPRE
Não há motivos para tirar a sincronia da simulação do PhysX com os comandos do rigidbody.
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
Alguem pode me explicar? Mais por questão de conhecimento mesmo , vai que futuramente sirva pra algo (oque acho bem provavel).
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
Olá, tudo bem?
Observação: Eu não uso muito o Fixed Update, e tudo isto daí, porque eu sempre limito o meu FPS com VSync, mas tudo bem.
Então, você deve usar na void FixedUpdate as simulações de física, porque a física não precisa ser necessariamente calculada 1000x apenas para simular 1 segundo.
Entretanto, você deve usar na void Update os inputs do jogador, pois você não quer perder nenhum input do jogador e perder o controle.
Referências:
https://answers.unity.com/questions/1097715/why-dont-we-always-use-fixedupdate.html
https://answers.unity.com/questions/620981/input-and-applying-physics-update-or-fixedupdate.html
Espero ter ajudado
Observação: Eu não uso muito o Fixed Update, e tudo isto daí, porque eu sempre limito o meu FPS com VSync, mas tudo bem.
Então, você deve usar na void FixedUpdate as simulações de física, porque a física não precisa ser necessariamente calculada 1000x apenas para simular 1 segundo.
Entretanto, você deve usar na void Update os inputs do jogador, pois você não quer perder nenhum input do jogador e perder o controle.
Referências:
https://answers.unity.com/questions/1097715/why-dont-we-always-use-fixedupdate.html
https://answers.unity.com/questions/620981/input-and-applying-physics-update-or-fixedupdate.html
Espero ter ajudado
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
Simulações de fisica?
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
É, como modificar a velocidade de um corpo.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
Então toda vez que eu for fazer algo relacionado a andar , pular , movimentos é no FixedUpdate , todo resto no update certo?
lesgoy- Mestre
- PONTOS : 3489
REPUTAÇÃO : 49
Respeito as regras :
Re: Velocidade constante em qualquer plataforma Unity 5
Se você fizer comandos como Rigidbody.AddForce, Rigidbody.Velocity, etc, etc, relacionados a algum RIGIDBODY, faça-os no FixedUpdate, para ficarem sincronizados com a simulação do PhysX.
Comandos como Rotate, Translate, Vector3.Lerp, faça-os no Update e multiplique a velocidade do movimento por Time.deltaTime. Desta forma o movimento fica sincronizado com os Inputs do seu game e com o FPS.
Inputs e a lógica coloque sempre na void Update, pois ela vai pegar todos os Inputs, sem ignorar nenhum frame.
Movimento da câmera ou processos de renderização devem ser feitos na void LateUpdate, pois a renderização é a última coisa que acontece na cena.
Comandos como Rotate, Translate, Vector3.Lerp, faça-os no Update e multiplique a velocidade do movimento por Time.deltaTime. Desta forma o movimento fica sincronizado com os Inputs do seu game e com o FPS.
Inputs e a lógica coloque sempre na void Update, pois ela vai pegar todos os Inputs, sem ignorar nenhum frame.
Movimento da câmera ou processos de renderização devem ser feitos na void LateUpdate, pois a renderização é a última coisa que acontece na cena.
Tópicos semelhantes
» Velocidade e tempo constante
» Botoes da unity no android e destruir um objeto em qualquer lugar da cena com touch
» PLATAFORMA/COR ALEATORIA + AUMENTO DE VELOCIDADE
» Manter frame constante em um script especifico UNITY
» [TUTORIAL] Colocando Dark Theme Na Sua Unity [Qualquer Versão]
» Botoes da unity no android e destruir um objeto em qualquer lugar da cena com touch
» PLATAFORMA/COR ALEATORIA + AUMENTO DE VELOCIDADE
» Manter frame constante em um script especifico UNITY
» [TUTORIAL] Colocando Dark Theme Na Sua Unity [Qualquer Versão]
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos