Buenos dias comunidad.
Agradecería si podéis decirme donde estoy fallando y porque...
He creado estas 4 lineas de codigo , nada del otro mundo, para mover un objeto adelante y hacia los lados etc con los axis verticales y horizontales,.
using System.Collections;
using UnityEngine;
public class controlbarco : MonoBehaviour {
public float velocidadgiro=0f;
public float marcha=0f;
float startY;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update () {
float girar =Input.GetAxis("Horizontal");
float adelante =Input.GetAxis("gatilloderecha");
rb.AddTorque(transform.up*velocidadgiro*girar*Time.deltatime);
rb.AddForce(transform.forward*adelante*marcha*Time.deltatime);
}
}
bien, la idea era que girara / acelerara a una velocidad paulatina osea con el Time.deltatime hasta alcanzar el valor de el float correspondiente.
Pues no. no se mueve en absoluto , en cambio si le quito los Time.....si se mueve pero alcanza la velocidad tanto de giro como de marcha de golpe y sigue acelerando sin parar! de acelerar asi;:
rb.AddTorque(transform.up*velocidadgiro*girar);
rb.AddForce(transform.forward*adelante*marcha);
Y la pregunta es:
Que estoy haciendo mal :)
No da error..
Gracias de antemano!!!
Estás aplicando una force dependiente de la mass del body. Qué mass tienes puesta? Piensa en hacerla independiente de la mass cambiando el ForceMode a acceleration o velocity p.ej o cambiándolo a una mass real si es un coche ( 1 = 1kg por convenio, 1500 de unidad p.ej.)
Desconozco los valores de girar/marcha, y probablemente serán demasiado grandes.
Ponlo en el fixedUpdate ya que es physics.
Error no va a dar ya que sintácticamente es correcto. Al final es un equilibrio entre todos los valores y a una situación concreta. Tendrás que irlo afinando.
Cita de: iRobb date=1488624434Estás aplicando una force dependiente de la mass del body. Qué mass tienes puesta? Piensa en hacerla independiente de la mass cambiando el ForceMode a acceleration o velocity p.ej o cambiándolo a una mass real si es un coche ( 1 = 1kg por convenio, 1500 de unidad p.ej.)
Desconozco los valores de girar/marcha, y probablemente serán demasiado grandes.
Ponlo en el fixedUpdate ya que es physics.
Error no va a dar ya que sintácticamente es correcto. Al final es un equilibrio entre todos los valores y a una situación concreta. Tendrás que irlo afinando.
Gracias iRobb , la masa la tengo al 1, si la subio no se mueve , los valores marxa y velocidad de giro estan en 50/100 los dos.
lo he puesto en FixedUpdate ahora si acelera correctamente lo he dejado asi:
using System.Collections;
using UnityEngine;
public class controlbarco : MonoBehaviour {
public float velocidadgiro = 50f;
public float marcha=50f;
public float marxamax = 60f;
float startY;
private Rigidbody rb;
public GameObject espuma;
float espumas = 0f;
void Start()
{
rb = GetComponent<Rigidbody>();
espuma.SetActive (false);
}
void FixedUpdate () {
float h = Input.GetAxis ("Horizontal") * velocidadgiro;
float v = Input.GetAxis ("gatilloderecha") * marcha * Time.deltaTime;
rb.AddTorque(transform.up *h);
rb.velocity = transform.forward * v;
}
}
Muchas gracias por todo, un saludo cordial.