Limitador de velocidade
3 participantes
Página 1 de 1
Limitador de velocidade
Poderiam me ajudar a limitar a velocidade do meu veículo mas sem mexer no torque e massa ?
GustavoMaster- Avançado
- PONTOS : 3774
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Limitador de velocidade
você pode tentar usa o Mathf.Clamp ou um if simples
ex
ex
- Código:
speed = rigidbody.velocity.sqrMagnitude;
if(speed < maxSpeed)
{
//exe comandos
}
Weslley- Moderador
- PONTOS : 5729
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Limitador de velocidade
Vish não compreendi.
Olha aqui o meu script.
Eu queria regular por marcha, Ex: 1 marcha vai só ate 10 mas não sei como impor um limite ou desacelera-lo.
Olha aqui o meu script.
Eu queria regular por marcha, Ex: 1 marcha vai só ate 10 mas não sei como impor um limite ou desacelera-lo.
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MovementControl : MonoBehaviour
{
public WheelCollider[] wheelColliders = new WheelCollider[4];
public Transform[] tyreMeshes = new Transform[4];
public float maxTorque = 600;
private Rigidbody m_rigidbody;
public Transform centerOfMass;
//Velocimetro
public Rigidbody RB;
Vector3 Velocity;
public float Velocidade;
//Marcha atual
public Text Marcha;
void start()
{
m_rigidbody = GetComponent<Rigidbody>();
m_rigidbody.centerOfMass = centerOfMass.localPosition;
}
void Update()
{
UpdateMeshesPositions();
//Velocimetro
Velocidade = Velocity.z;
Velocity = RB.GetPointVelocity(transform.position);
//
//Freio normal
if (Input.GetKey(KeyCode.Space)) {
wheelColliders[0].brakeTorque = 1000;
wheelColliders[1].brakeTorque = 1000;
wheelColliders[2].brakeTorque = 1000;
wheelColliders[3].brakeTorque = 1000;
}
else
{
wheelColliders[0].brakeTorque = 0;
wheelColliders[1].brakeTorque = 0;
wheelColliders[2].brakeTorque = 0;
wheelColliders[3].brakeTorque = 0;
}
//
//Marchas
if (Input.GetKeyDown("1"))
{
maxTorque = 400;
Debug.Log("Primeira Marcha");
Marcha.text = ("Primeira Marcha");
}
if (Input.GetKeyDown("2"))
{
maxTorque = 300;
Debug.Log("Segunda Marcha");
Marcha.text = ("Segunda Marcha");
}
if (Input.GetKeyDown("3"))
{
maxTorque = 180;
Debug.Log("Terceira Marcha");
Marcha.text = ("Terceira Marcha");
}
//
}
void FixedUpdate()
{// 0 is front left and 1 is front right
float steer = Input.GetAxis("Horizontal");
float fixedAngel = steer * 45f;
wheelColliders[0].steerAngle = fixedAngel;
wheelColliders[1].steerAngle = fixedAngel;
float acceleration = Input.GetAxis("Vertical");
for (int i = 0; i < 4; i++)
{
wheelColliders[i].motorTorque = acceleration * maxTorque;
}
}
void UpdateMeshesPositions()
{
for (int i = 0; i < 4; i++)
{
Quaternion quat;
Vector3 pos;
wheelColliders[i].GetWorldPose(out pos, out quat);
tyreMeshes[i].position = pos;
tyreMeshes[i].rotation = quat;
}
}
}
GustavoMaster- Avançado
- PONTOS : 3774
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Limitador de velocidade
O seu sistema de marchas está correto? Geralmente utiliza-se uma AnimationCurve para aplicar o torque, desta forma o torque vai diminuindo quando chega a velocidade limite.
Outra coisa que também da pra fazer é ir aumentando o Drag do Rigidbody conforme a velocidade máxima vai chegando... desta forma, quanto mais rápido, mais arrasto do ar o veículo tem... Olhe um exemplo que eu utilizei no meu asset:
Já a parte de controle de velocidade, é MUITO complicada... você ter que adicionar uma forca contrária no Rigidbody conforme a velocidade vai chegando ao limite... mas isto torna-se um problema em curvas, dentre outras coisas, então vários ajustes tem que ser feitos. Olhe o tamanho do estabilizador que eu fiz para o meu asset:
Outra coisa que também da pra fazer é ir aumentando o Drag do Rigidbody conforme a velocidade máxima vai chegando... desta forma, quanto mais rápido, mais arrasto do ar o veículo tem... Olhe um exemplo que eu utilizei no meu asset:
- Código:
corpoRigido.drag = Mathf.Clamp ((KMh / AjustesTorqueVeiculo.velMaxVeiculoKMh) * 0.075f, 0.001f, 0.075f);
Já a parte de controle de velocidade, é MUITO complicada... você ter que adicionar uma forca contrária no Rigidbody conforme a velocidade vai chegando ao limite... mas isto torna-se um problema em curvas, dentre outras coisas, então vários ajustes tem que ser feitos. Olhe o tamanho do estabilizador que eu fiz para o meu asset:
- Código:
public void TireSlips(WheelCollider colider, WheelHit hitDaRoda){
Vector2 tireSlip = new Vector2(0,0), tireForce = new Vector2(0,0);
Vector2 localRigForce = new Vector2 (0, 0);
Vector2 velocidadeLocalRoda = velocidadeLocalDaRoda (colider, hitDaRoda);
Vector2 localSurfaceForceD = ForcaNaSuperficieLocal (hitDaRoda);
if (KMh > AjustesTorqueVeiculo.velMaxVeiculoKMh) {
forcaContrariaLimiteVel = -5 * corpoRigido.velocity.magnitude;
} else {
forcaContrariaLimiteVel = 0;
}
float velocidadeAngularDaRoda = velocidadeAngular (velocidadeLocalRoda, colider);
if (colider.isGrounded){
float estimatedSprungMass = Mathf.Clamp(hitDaRoda.force / -Physics.gravity.y, 0.0f, colider.sprungMass) * 0.5f;
localRigForce = (-estimatedSprungMass * velocidadeLocalRoda / Time.deltaTime) + localSurfaceForceD;
tireSlip.x = velocidadeLocalRoda.x;
tireSlip.y = velocidadeLocalRoda.y - velocidadeAngularDaRoda * colider.radius;
float minSlipY;
float forcaBaixo = (forcaBaixoVeiculoCorrente * AjustarVeiculo.pesoVeiculoKg);
if (colider.brakeTorque > 10){
float wheelMaxBrakeSlip = Mathf.Max(Mathf.Abs(velocidadeLocalRoda.y * 0.2f), 0.3f);
minSlipY = Mathf.Clamp(Mathf.Abs(forcaContrariaLimiteVel * tireSlip.x) / forcaBaixo, 0.0f, wheelMaxBrakeSlip);
}
else{
minSlipY = Mathf.Min(Mathf.Abs(forcaContrariaLimiteVel * tireSlip.x) / forcaBaixo, Mathf.Clamp((Input.GetAxis("Vertical")*2.5f),-2.5f,1.0f));
if (forcaContrariaLimiteVel != 0.0f && minSlipY < 0.1f) minSlipY = 0.1f;
}
if (Mathf.Abs(tireSlip.y) < minSlipY) tireSlip.y = minSlipY * Mathf.Sign(tireSlip.y);
Vector2 rawTireForce = -forcaBaixo * tireSlip.normalized;
rawTireForce.x = Mathf.Abs(rawTireForce.x);
rawTireForce.y = Mathf.Abs(rawTireForce.y);
tireForce.x = Mathf.Clamp(localRigForce.x, -rawTireForce.x, +rawTireForce.x);
if (colider.brakeTorque > 10){
float maxFy = Mathf.Min(rawTireForce.y, forcaContrariaLimiteVel);
tireForce.y = Mathf.Clamp(localRigForce.y, -maxFy, +maxFy);
}
else{
tireForce.y = Mathf.Clamp(forcaContrariaLimiteVel, -rawTireForce.y, +rawTireForce.y);
}
}
else{
tireSlip = Vector2.zero;
tireForce = Vector2.zero;
}
tireSL = tireSlip;
tireFO = tireForce;
}
Re: Limitador de velocidade
Meu controle de Marchas tava errado mesmo, mas na base da gambiarra já resolvi, apenas criei uma especie de freio automático que ativa quando aumenta muito o RPM.
GustavoMaster- Avançado
- PONTOS : 3774
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Limitador de velocidade
isto é um dos estabilizadores que eu fiz também... faço uma média dos RPM das 4 rodas... e se o RPM*raio das rodas ultrapassar um valor máximo, ai eu vou aplicando um brakeTorque multiplicando o RPMMedio atual.
Meio confuso, mas fica bem estável.
Meio confuso, mas fica bem estável.
Re: Limitador de velocidade
A parte de movimentação e física do meu veículo ta ok, o difícil vai ser colocar som, não sei se pelo RPM ia ficar bom, se puder ajudar vlw. :D
GustavoMaster- Avançado
- PONTOS : 3774
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Limitador de velocidade
O som tem que ser feito pelo RPM
o EDY faz um sistema foda, ele separa o RPM, e faz como se fosse uma embreagem. o som é puramente um pitch de um AudioSource baseado nesse RPM.
eh extremamente complexo de fazer. fiquei uns 3 meses aperfeiçoando para deixar top.
o EDY faz um sistema foda, ele separa o RPM, e faz como se fosse uma embreagem. o som é puramente um pitch de um AudioSource baseado nesse RPM.
eh extremamente complexo de fazer. fiquei uns 3 meses aperfeiçoando para deixar top.
Re: Limitador de velocidade
Já resolvi, usei esse sistema mesmo, mas fiz com a velocidade e não RPM.
GustavoMaster- Avançado
- PONTOS : 3774
REPUTAÇÃO : 14
Idade : 21
Respeito as regras :
Re: Limitador de velocidade
GustavoMaster escreveu:Já resolvi, usei esse sistema mesmo, mas fiz com a velocidade e não RPM.
O meu é feito com velocidade, mas é MUITO inferior em realidade ao do Edy.
Seria mais para jogos estilo GTA.
Tópicos semelhantes
» Velocidade da Movimentação
» Duvida com velocidade X e velocidade Z
» me ajudem, dem uma dica de como posso fazer um limitador para esse codigo
» Velocidade
» Velocidade com Button UI.
» Duvida com velocidade X e velocidade Z
» me ajudem, dem uma dica de como posso fazer um limitador para esse codigo
» Velocidade
» Velocidade com Button UI.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos