Estoy haciendo un juego de pelota rodante, y la forma en que quiero que funcione se basa en un movimiento constante hacia adelante y un giro basado en la rotación. Estoy usando la fuerza, que luego hace que la pelota ruede hacia adelante. Mi problema aquí es que me gustaría que la pelota avance en función de dónde está "mirando". El uso de Vector3.forward solo lo mueve de acuerdo con el espacio mundial y transform.forward comenzará a retroceder porque la pelota rueda boca abajo. ¿Cómo puedo hacer que se transforme tanto? ¿Adelante ignora mi giro hacia adelante y solo se ve afectado por el giro hacia los lados?
"adelante" es difícil de imaginar en una esfera.
Agrega velocidad cuando gira alrededor del eje X (la bola se mueve "hacia adelante") Para el control de dirección, gira alrededor del eje Y global. El transform.forward girará alrededor del objeto. Pero transform.right (eje x local, por así decirlo) se mantiene estable. Entonces solo necesitamos el Vector3.Cross Product de transform.right y el Vector3.Up global.
Vector3 forward = Vector3.Cross(transform.right, Vector3.up);Puedes usar matemáticas vectoriales para esto. Tome el producto cruzado entre el derecho local y el mundo hacia arriba:
private static Vector3 GetRollingForward(Vector3 localRight) { return Vector3.Cross(localRight, Vector3.up); } // ... void Update() { Debug.DrawLine(transform.position, transform.position + GetRollingForward(transform.right)); }