[RESOLVIDO] Posição final do objeto em jogo 2D
2 participantes
Página 1 de 1
[RESOLVIDO] Posição final do objeto em jogo 2D
Boa noite, pessoal.
Estou fazendo um joguinho 2D de vôlei. Ainda estou bem no início.
A posição final do objeto (bola) está contrariando a matemática.
A posição inicial da bola é x: -10 e y:0.
Eu chamo a função DirectionVelocity(30, 0) em outro script. Ou seja, velocidade inicial 30 e ângulo 0.
Pela matemática e pela física, a posição final da bola deveria ser 20. Mas no jogo fica 20,2 (e mais algumas casas decimais).
Já testei usando FixedUpdate; arrendodando ou não Time.deltaTime; atualizando a velocidade antes da posição.
Sempre dá 19,8 ou 20,2.
Alguém sabe por que o valor não dá 20 cravado?
Fórmula para calcular o deslocamento.
V2=v02+2αΔs
Script da bola:
Obrigado.
Estou fazendo um joguinho 2D de vôlei. Ainda estou bem no início.
A posição final do objeto (bola) está contrariando a matemática.
A posição inicial da bola é x: -10 e y:0.
Eu chamo a função DirectionVelocity(30, 0) em outro script. Ou seja, velocidade inicial 30 e ângulo 0.
Pela matemática e pela física, a posição final da bola deveria ser 20. Mas no jogo fica 20,2 (e mais algumas casas decimais).
Já testei usando FixedUpdate; arrendodando ou não Time.deltaTime; atualizando a velocidade antes da posição.
Sempre dá 19,8 ou 20,2.
Alguém sabe por que o valor não dá 20 cravado?
Fórmula para calcular o deslocamento.
V2=v02+2αΔs
Script da bola:
- Código:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
public int acceleration;
public float velocity, velInitial, tempo;
public float[] direction = new float[2];
public float[] ballPosition = new float[2];
public float teta, grau;
public Transform ball;
// Start is called before the first frame update
void Start()
{
ball = gameObject.transform;
acceleration = 15;
velInitial = 10;
}
// Update is called once per frame
void Update()
{
Move();
EndPoint();
}
public void DirectionVelocity(int vel, float ang)
{
velocity = vel;
velInitial = vel;
teta = ang;
grau = teta * Mathf.Rad2Deg;
direction = new float[] { Mathf.Cos(teta), Mathf.Sin(teta) };
}
void Move()
{
ballPosition = new float[] { ball.position.x, ball.position.y };
float varTime = Mathf.Round(Time.deltaTime*100)/100;
ballPosition[0] += direction[0] * velocity * varTime;
ballPosition[1] += direction[1] * velocity * varTime;
velocity += (-acceleration * varTime);
velocity = Mathf.Clamp(velocity, 0, velInitial);
ball.position = new Vector3(ballPosition[0], ballPosition[1], -1);
}
void EndPoint()
{
}
}
Obrigado.
JoelMJunior- MembroAvançado
- PONTOS : 2946
REPUTAÇÃO : 13
Respeito as regras :
Re: [RESOLVIDO] Posição final do objeto em jogo 2D
Já tentou usar Double aou invés de Float ?
Pode te garantir uma melhor precisão de dados.
Dê uma atenção especial Pricipalmente esses dois arrays: direction e ballPosition.
OBS: A variavel grau recebe valor mas nunca o repassa.
Pode te garantir uma melhor precisão de dados.
Dê uma atenção especial Pricipalmente esses dois arrays: direction e ballPosition.
OBS: A variavel grau recebe valor mas nunca o repassa.
Magnatah- Instrutor
- PONTOS : 3549
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: [RESOLVIDO] Posição final do objeto em jogo 2D
Valeu, amigo. Descobri o problema.
Testei o double, mas o problema não era esse.
Era a fórmula da posição. Descobri depois de pensar umas 4 horas kkk.
Tava na minha cara o tempo todo e eu não percebia.
A posição é assim:
Agora o resultado está dando 20.00001. Já está ótimo assim.
Obrigado.
Testei o double, mas o problema não era esse.
Era a fórmula da posição. Descobri depois de pensar umas 4 horas kkk.
Tava na minha cara o tempo todo e eu não percebia.
A posição é assim:
- Código:
ballPosition[0] += direction[0] * (velocity * varTime + 0.5f * acceleration * Time.deltaTime * Time.deltaTime);
ballPosition[1] += direction[1] * (velocity * varTime + 0.5f * acceleration * Time.deltaTime * Time.deltaTime);
Agora o resultado está dando 20.00001. Já está ótimo assim.
Obrigado.
JoelMJunior- MembroAvançado
- PONTOS : 2946
REPUTAÇÃO : 13
Respeito as regras :
Tópicos semelhantes
» Como pegar a posição final de um texto TextMesh
» definir posição de um objeto
» Como transformo a posição de um objeto em outra posição?
» [RESOLVIDO] salvar a rotação de um objeto e quando iniciar o jogo carregar
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
» definir posição de um objeto
» Como transformo a posição de um objeto em outra posição?
» [RESOLVIDO] salvar a rotação de um objeto e quando iniciar o jogo carregar
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos