Unidad: Agregar impulso a una pelota desde cierta posición
– UnityAssets3Free
hola , me llamo jorge y en esta ocasion os traigo
nueva pregunta curiosa
Estoy haciendo un juego de billar en 3D y tuve este problema.
No puedo encontrar la función necesaria para agregar un impulso a una pelota que hará que la pelota gire.
En otras palabras, ¿cómo configuro el punto AIM desde donde quiero agregar el impulso?
Si uso AddForce o AddTorque, parece que calcula desde el centro de la bola.
Pero, ¿cómo especificar el punto de mira (izquierda inglesa, derecha inglesa, etc…)?
¿Y cómo dirigir la pelota hacia la cámara después de que un palo haya golpeado la pelota?
1 respuesta 1
A primera vista, creo que deberías comprobar Rigidbody.AddForceAtPosition. También debe calcular el punto de mira de alguna manera en las coordenadas mundiales.
Soy relativamente nuevo en Unity, pero se me ocurrió la idea principal de rotar primero el vector de señal a lo largo del eje y en un ángulo pequeño, luego calcular el punto de impacto para cada región emitiendo rayos físicos y finalmente aplicar empuje usando Cuerpo rígido.AddForceAtPosition. Traté de escribir un código de ejemplo:
public class SphereController : MonoBehaviour
private Vector3 cueStartPoint;
void Start ()
cueStartPoint = new Vector3(0, 0.5f, -13f);
void Update ()
//direction from cue to center
var direction = transform.position - cueStartPoint;
//rotate cue to aim right english
var angleForRightEnglish = 5f;
var directionForRight = Quaternion.AngleAxis(angleForRightEnglish, Vector3.up) * direction;
Debug.DrawRay(cueStartPoint, directionForRight, Color.red, 10f);
//rotate cue to aim right english
var angleForLeftEnglish = -5f;
var directionForLeft = Quaternion.AngleAxis(angleForLeftEnglish, Vector3.up) * direction;
Debug.DrawRay(cueStartPoint, directionForLeft, Color.blue, 10f);
//try a sample hit from right
if (Input.GetKeyDown(KeyCode.RightArrow))
var forceMagnitude = 1f;
var hitForce = forceMagnitude * directionForRight.normalized;
//calculate right hit point on sphere surface
RaycastHit hitInfo;
if (Physics.Raycast(cueStartPoint, directionForRight, out hitInfo))
var rightHitPoint = hitInfo.point;
gameObject.GetComponent<Rigidbody>().AddForceAtPosition(hitForce, rightHitPoint, ForceMode.Impulse);
//try a sample hit from left
if (Input.GetKeyDown(KeyCode.LeftArrow))
var forceMagnitude = 1f;
var hitForce = forceMagnitude * directionForLeft.normalized;
//calculate left hit point on sphere surface
RaycastHit hitInfo;
if (Physics.Raycast(cueStartPoint, directionForLeft, out hitInfo))
var leftHitPoint = hitInfo.point;
gameObject.GetComponent<Rigidbody>().AddForceAtPosition(hitForce, leftHitPoint, ForceMode.Impulse);
este script debe agregarse a ball como un componente claro, espero que esto ayude.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
por hoy,espero que te funcione