Traigo otra pregunta de arrastrar con el mouse (estoy usando Unity con C #), pero con un detalle particular menos común: la existencia de obstáculos en el medio del camino a través del cual ocurre el arrastre (espacio 3D, no 2D) .
Dejame explicar. Supongamos que tengo un plano sobre el cual quiero arrastrar un cubo llamado "obj". Eso es fácil. Aquí está mi implementación simple para eso:
void Update () {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 1000000))
obj.transform.position = new Vector3(hit.point.x,0.25F,hit.point.z);
}
Funciona. Sin embargo, supongamos que también tengo algunos otros cubos sobre el avión, que son los obstáculos. Obviamente, cuando el jugador mueve "obj" sobre el avión, tal movimiento debe ser bloqueado por los obstáculos. Y luego, mientras choca con los obstáculos, "obj" solo debe moverse a los lados de ese obstáculo. Si se mueve el mouse y "obj" deja de chocar con obstáculos, el movimiento de arrastre libre se reanuda nuevamente.
Para dificultar el desafío, estoy tratando de lograrlo sin el uso de componentes RigidBody en los obstáculos (el objeto arrastrado puede tenerlo). ¿Alguna idea sobre cuál es la forma más eficiente de lograr eso? ¡Muchas gracias!
EDITAR: Los comentaristas me han llamado la atención sobre que debo mencionar que los objetos pueden rotar cuando se rompen.
EDITAR 2: Considerando la dificultad de la formulación original, cambié la pregunta permitiendo el uso de componentes Rigidbody en los objetos arrastrados. La solución simplemente no puede usar componentes de Rigidbody en los obstáculos.