Hellhound Geschrieben 28. August 2018 Melden Share Geschrieben 28. August 2018 Hallo, nach längerer Auszeit wollte ich nun ein bischen in Unity weiter coden. Ich versuche aktuell den NavMesh dazu zu bekommen, bei einem Klick auf ein Objekt eine Position vor dem Objekt einzunehmen. Folgende Schritte führe ich z.Z. aus: 1. Ermitteln der 3D Position für den Click auf Basis eines Raycast. 2. Prüfen ob ein Objekt sich an dieser Position befindet (Auswerten Gameobject vom Hit) 3. Ist dies der Fall einen erneuten Raycast zwischen der aktuellen Position machen und dem Objekt um den exakten HitPoint am Collider zu ermitteln 4. Diesen als Wegpunkt nutzen Allerdings habe ich das Problem, das beim zweiten Raycast der Hitpoint entlang des Direction-Vektors wandert. Hab ich in letzter Zeit zuviel JAVA getankt 🙄? Oder habe ich aktuell einen generellen Denkfehler? Hier eimal der OnClick Code. Pointer ist hierbei die Referenz auf eine Sphere die ich zum Debugging an der Zielposition plaziere // Determine click based on screen coordinates and convert it to world coordinates Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit, Mathf.Infinity)) { var go = hit.transform.gameObject; var position = hit.point; position.y = 0f; if (go != null && go.tag != "Ground" && go.tag != "Pointer") { var dir = position - selected.transform.position; var length = dir.magnitude; Debug.DrawRay(this.selected.transform.position, dir, Color.magenta); // Warum erhalte ich hier immer einen anderen HitPoint mit neuer Position? RaycastHit hitInfo; if (Physics.Raycast(selected.transform.position, dir, out hitInfo, dir.magnitude)) { position = hitInfo.point; position.y = 0f; pointer.transform.position = position; pointer.GetComponent<Renderer>().material.color = Color.red; } } else { pointer.GetComponent<Renderer>().material.color = Color.green; position.y = 0f; pointer.transform.position = position; var dir = position - this.selected.transform.position; Debug.DrawRay(this.selected.transform.position, dir, Color.blue); target = null; } // Check if left mouse button has been pressed if (Input.GetMouseButtonDown(0)) { // determine if double click has been performed and raise click events var doubleClick = this.WasDoubleClick(); OnLeftClick.Invoke(position, doubleClick); } } pointer.SetActive(true); Hier mal ein Video: https://sendvid.com/h5ce5m3d Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 28. August 2018 Melden Share Geschrieben 28. August 2018 Deine Pointerkugel hat offenbar einen Collider, und im nächsten Frame triffst du ihre Oberfläche, setzt sie mit dem Mittelpunkt darauf, sodass sie näher dran ist als vorher, und im nächsten Frame wiederholt sich das Ganze. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hellhound Geschrieben 28. August 2018 Autor Melden Share Geschrieben 28. August 2018 Danke für den Hinweis, genau das war es 👌. Da hätte ich noch ewig weiter gesucht ... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.