Jump to content
Unity Insider Forum

HitPoint wandert?


Hellhound

Recommended Posts

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...