Dificuldades em linkar as meshes com a wheel Collider!
Página 1 de 1
Dificuldades em linkar as meshes com a wheel Collider!
Ola, eu estou com um problema no meu script de controle de carro, estava tentando linkar as meshes das rodas como os wheel Colliders, no entrantro, estou com dificuldades em fazer isso, já tentei de varias formas mais sempre tem alguns bugs. Na minha ultima tentativa consegui fazer esse link, porem, o carro ficou muito instavel, mesmo, existindo uma força para isso não acontecer. Quem poder da uma olhada no meu codigo agradeceria.
public WheelCollider[] guiar;
//public WheelCollider[] guiarRodasFrontas;
//public WheelCollider[] guiarRodasTraseiras;
RodaGestor[] rodasGuiar;
public Transform[] MeshRodas;
public float gui = 0f;
public float acc = 0f;
Rigidbody rb;
public AnimationCurve curvaRoda;
//public AudioClip derraparNormal;
//public AudioClip derraparErva;
//public AudioSource audioCarro;
//public AudioSource audioDerrapar;
public float maxTorque;
public float forcaTravagem;
public float veloKMH;
public float rpm;
public float[] racioMudancas;
int mudancaAtual = 0;
public float maxRPM;
public float minRPM;
//public float somPitch;
public Vector3 forcaFinal;
public Transform centroMassa;
public float instabilidadeTravar;
public int voltas = 0;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.centerOfMass = centroMassa.localPosition;
rodasGuiar = new RodaGestor[guiar.Length];
for(int i = 0; i < guiar.Length; i++)
{
rodasGuiar[i] = guiar[i].GetComponent<RodaGestor>();
}
}
public void SomarVolta()
{
voltas++;
Debug.Log("Demos uma volta - " + voltas.ToString());
}
void FixedUpdate()
{
Quaternion quatF;
Vector3 posiF;
//for(int i = 0; i < guiar.Length; i++)
//{
//}
//GUIAR
Quaternion quatT;
Vector3 posiT;
for (int i = 0; i < guiar.Length; i++)
{
//guiar[i].steerAngle = gui * curvaRoda.Evaluate(veloKMH);
//guiar[i].motorTorque = 1f;
guiar[0].steerAngle = gui * curvaRoda.Evaluate(veloKMH);
guiar[1].steerAngle = gui * curvaRoda.Evaluate(veloKMH);
guiar[2].motorTorque = 1f;
guiar[3].motorTorque = 1f;
guiar[i].GetWorldPose(out posiT, out quatT);
MeshRodas[i].position = posiT;
MeshRodas[i].rotation = quatT;
guiar[i].GetWorldPose(out posiF, out quatF);
MeshRodas[i].position = posiF;
MeshRodas[i].rotation = quatF;
//if (rodasGuiar[i].rodaAtual != 0)
//{
http://rb.AddTorque((transform.up * (instabilidadeTravar/1.5f) * veloKMH / 45f) * gui);
/*if (audioDerrapar.clip != derraparErva)
{
audioDerrapar.clip = derraparErva;
audioDerrapar.Play();
}
}
else
{
if (audioDerrapar.clip != derraparNormal)
{
audioDerrapar.clip = derraparNormal;
audioDerrapar.Play();
}*/
//}
}
//VELO E RPM
veloKMH = rb.velocity.magnitude * 3.6f;
rpm = veloKMH * racioMudancas[mudancaAtual] * 15f;
//MUDANCAS
if (rpm > maxRPM)
{
mudancaAtual++;
if (mudancaAtual == racioMudancas.Length)
{
mudancaAtual--;
}
}
if (rpm < minRPM)
{
mudancaAtual--;
if (mudancaAtual < 0)
{
mudancaAtual = 0;
}
}
//FORCAS
if (acc < -0.5f)
{
rb.AddForce(-transform.forward * forcaTravagem);
rb.AddTorque((transform.up * instabilidadeTravar * veloKMH / 45f) * gui);
acc = 0;
}
forcaFinal = transform.forward * (maxTorque / (mudancaAtual + 1) + maxTorque/1.25f) * acc;
rb.AddForce(forcaFinal);
//SOM
http://audioCarro.pitch = rpm / somPitch;
/* if (veloKMH >= 30f)
{
float angulo = Vector3.Angle(transform.forward, rb.velocity);
float valorFinal = (angulo / 10f) - 0.3f;
audioDerrapar.volume = Mathf.Clamp(valorFinal, 0f, 1f);
}*/
}
}
public WheelCollider[] guiar;
//public WheelCollider[] guiarRodasFrontas;
//public WheelCollider[] guiarRodasTraseiras;
RodaGestor[] rodasGuiar;
public Transform[] MeshRodas;
public float gui = 0f;
public float acc = 0f;
Rigidbody rb;
public AnimationCurve curvaRoda;
//public AudioClip derraparNormal;
//public AudioClip derraparErva;
//public AudioSource audioCarro;
//public AudioSource audioDerrapar;
public float maxTorque;
public float forcaTravagem;
public float veloKMH;
public float rpm;
public float[] racioMudancas;
int mudancaAtual = 0;
public float maxRPM;
public float minRPM;
//public float somPitch;
public Vector3 forcaFinal;
public Transform centroMassa;
public float instabilidadeTravar;
public int voltas = 0;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.centerOfMass = centroMassa.localPosition;
rodasGuiar = new RodaGestor[guiar.Length];
for(int i = 0; i < guiar.Length; i++)
{
rodasGuiar[i] = guiar[i].GetComponent<RodaGestor>();
}
}
public void SomarVolta()
{
voltas++;
Debug.Log("Demos uma volta - " + voltas.ToString());
}
void FixedUpdate()
{
Quaternion quatF;
Vector3 posiF;
//for(int i = 0; i < guiar.Length; i++)
//{
//}
//GUIAR
Quaternion quatT;
Vector3 posiT;
for (int i = 0; i < guiar.Length; i++)
{
//guiar[i].steerAngle = gui * curvaRoda.Evaluate(veloKMH);
//guiar[i].motorTorque = 1f;
guiar[0].steerAngle = gui * curvaRoda.Evaluate(veloKMH);
guiar[1].steerAngle = gui * curvaRoda.Evaluate(veloKMH);
guiar[2].motorTorque = 1f;
guiar[3].motorTorque = 1f;
guiar[i].GetWorldPose(out posiT, out quatT);
MeshRodas[i].position = posiT;
MeshRodas[i].rotation = quatT;
guiar[i].GetWorldPose(out posiF, out quatF);
MeshRodas[i].position = posiF;
MeshRodas[i].rotation = quatF;
//if (rodasGuiar[i].rodaAtual != 0)
//{
http://rb.AddTorque((transform.up * (instabilidadeTravar/1.5f) * veloKMH / 45f) * gui);
/*if (audioDerrapar.clip != derraparErva)
{
audioDerrapar.clip = derraparErva;
audioDerrapar.Play();
}
}
else
{
if (audioDerrapar.clip != derraparNormal)
{
audioDerrapar.clip = derraparNormal;
audioDerrapar.Play();
}*/
//}
}
//VELO E RPM
veloKMH = rb.velocity.magnitude * 3.6f;
rpm = veloKMH * racioMudancas[mudancaAtual] * 15f;
//MUDANCAS
if (rpm > maxRPM)
{
mudancaAtual++;
if (mudancaAtual == racioMudancas.Length)
{
mudancaAtual--;
}
}
if (rpm < minRPM)
{
mudancaAtual--;
if (mudancaAtual < 0)
{
mudancaAtual = 0;
}
}
//FORCAS
if (acc < -0.5f)
{
rb.AddForce(-transform.forward * forcaTravagem);
rb.AddTorque((transform.up * instabilidadeTravar * veloKMH / 45f) * gui);
acc = 0;
}
forcaFinal = transform.forward * (maxTorque / (mudancaAtual + 1) + maxTorque/1.25f) * acc;
rb.AddForce(forcaFinal);
//SOM
http://audioCarro.pitch = rpm / somPitch;
/* if (veloKMH >= 30f)
{
float angulo = Vector3.Angle(transform.forward, rb.velocity);
float valorFinal = (angulo / 10f) - 0.3f;
audioDerrapar.volume = Mathf.Clamp(valorFinal, 0f, 1f);
}*/
}
}
mateusschw- Iniciante
- PONTOS : 1611
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» Problema com Wheel Collider
» Wheel Collider e Box Collider no Carro
» Wheel Collider
» e ai galera to tendo poblema com wheel collider
» Estabilidade com Wheel Collider
» Wheel Collider e Box Collider no Carro
» Wheel Collider
» e ai galera to tendo poblema com wheel collider
» Estabilidade com Wheel Collider
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos