Ich bringe noch eine weitere Frage zum Ziehen mit der Maus (ich verwende Unity mit C #), aber mit einem weniger verbreiteten Detail: dem Vorhandensein von Hindernissen in der Mitte des Weges, durch den das Ziehen erfolgt (3D-Raum, nicht 2D) .
Lassen Sie mich erklären. Angenommen, ich habe eine Ebene, über die ich einen Würfel namens "obj" ziehen möchte. Das ist einfach. Hier ist meine einfache Implementierung dafür:
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);
}
Es klappt. Angenommen, ich habe noch ein paar andere Würfel über dem Flugzeug, die die Hindernisse darstellen. Wenn sich der Spieler "obj" über das Flugzeug bewegt, sollte diese Bewegung offensichtlich durch die Hindernisse blockiert werden. Und dann, während "obj" mit den Hindernissen kollidiert, sollte es sich nur an den Seiten dieses Hindernisses bewegen. Wenn die Maus bewegt wird und "obj" nicht mehr mit Hindernissen kollidiert, wird die Bewegung im freien Ziehstil wieder fortgesetzt.
Um die Herausforderung zu erschweren, bemühe ich mich, dies ohne die Verwendung von RigidBody-Komponenten an den Hindernissen zu erreichen (das gezogene Objekt kann es haben). Irgendwelche Ideen, wie dies am effizientesten erreicht werden kann? Danke vielmals!
BEARBEITEN: Kommentatoren haben mich darauf aufmerksam gemacht, dass ich erwähnen sollte, dass sich Objekte beim Einrasten drehen dürfen.
EDIT 2: Angesichts der Schwierigkeit der ursprünglichen Formulierung habe ich die Frage geändert, die die Verwendung von Rigidbody-Komponenten an den gezogenen Objekten erlaubt. Die Lösung kann einfach keine Rigidbody-Komponenten an den Hindernissen verwenden.