J'apporte encore une autre question de glisser avec la souris (j'utilise Unity avec C #), mais avec un détail particulier moins commun: l'existence d'obstacles au milieu du chemin à travers lequel le glissement se produit (espace 3D, pas 2D) .
Laisse-moi expliquer. Supposons que j'ai un plan sur lequel je veux faire glisser un cube appelé "obj". C'est facile. Voici ma mise en œuvre simple pour cela:
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);
}
Ça marche. Cependant, supposons que j'ai également quelques autres cubes au-dessus de l'avion, qui sont les obstacles. De toute évidence, lorsque le joueur se déplace "obj" au-dessus de l'avion, ce mouvement doit être bloqué par les obstacles. Et puis, en entrant en collision avec les obstacles, "obj" ne devrait se déplacer que sur les côtés de cet obstacle. Si la souris est déplacée et que "obj" cesse d'entrer en collision avec des obstacles, le mouvement de style glisser libre reprend à nouveau.
Pour rendre le défi plus difficile, j'essaie de le faire sans utiliser de composants RigidBody aux obstacles (l'objet traîné peut l'avoir). Avez-vous des idées sur la manière la plus efficace d'y parvenir? Merci beaucoup!
EDIT: Les commentateurs ont attiré mon attention sur le fait que je devrais mentionner que les objets peuvent pivoter lors de la capture.
EDIT 2: Compte tenu de la difficulté de la formulation d'origine, j'ai changé la question permettant l'utilisation de composants Rigidbody au niveau des objets glissés. La solution ne peut tout simplement pas utiliser des composants Rigidbody aux obstacles.