chrische5 Posted August 11 Report Share Posted August 11 Hallo, Irgendwie habe ich einen Knoten im Kopf, den ich nicht gelöst bekomme. Derzeit zeichne ich eine Linie von einem Punkt zum Mauszeiger, wenn die linke Maustaste gedrückt ist. Nun möchte ich diese Linie aber nicht immer bis zum Mauszeiger, sondern nur in einer bestimmten Länge zeichnen. Wie kann ich die Koordinaten dieses Punktes berechnen? Zusammenfassung: ich habe Zwei Punkte und möchte eine Strecke mit einer bestimmten Länge von Punkt a zum errechneten Punkt zeichnen. Versteht man, was ich meine? Wenn nicht, mache ich eine kleine Zeichnung. Danke Christoph Quote Link to comment Share on other sites More sharing options...
Antragon Posted August 12 Report Share Posted August 12 Hi, meinst du sowas? Vector3 direction = mousePosition - origin; Vector3 target = origin + Mathf.Min(targetLength, direction.magnitude) * direction.normalized; 2 Quote Link to comment Share on other sites More sharing options...
Sascha Posted August 12 Report Share Posted August 12 Es gibt noch Vector3.ClampMagnitude, welches einmal das Berechnen der Quadratwurzel einspart. Ist vielleicht auch minimal lesbarer. Aber das sind nur minimale Optimierungen gegenüber @Antragons Lösung. 1 Quote Link to comment Share on other sites More sharing options...
chrische5 Posted August 13 Author Report Share Posted August 13 Hallo Danke für eure Antworten. So richtig klappt das nicht. Die Länge der Linie ist immer noch nicht konstant, sondern abhängig von der Entfernung der Maus vom Ursprung. Das soll ja eben nicht so sein Mein Code: if (Input.GetMouseButton(0) && _isDirectionRay.value && !_isGamePaused.value) { var mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); using (Draw.ingame.WithLineWidth(_directionRayWidth.value)) { Vector3 direction = mousePosition - transform.position; Vector3 target = transform.position + Mathf.Min(_directionRayLength.value, direction.magnitude) * direction.normalized; Draw.ingame.Line(transform.position, target, _directionRayColor.value); } } Ich hätte es gern, dass die Gerade immer gleich lang ist. Egal, wo die Maus sich befindet. Also auch wenn diese "innerhalb" der eigentlichen Länge ist. Christop Quote Link to comment Share on other sites More sharing options...
Sascha Posted August 13 Report Share Posted August 13 Ach soo Na dann: direction = direction.normalized * _directionRayLength.value; Quote Link to comment Share on other sites More sharing options...
chrische5 Posted August 13 Author Report Share Posted August 13 Hallo, ich bin mal ehrlich: Ich bekomme es nicht hin. Die Strecke ist immer noch abhängig von der Entfernung der Maus zum Spieler. Christoph Quote Link to comment Share on other sites More sharing options...
Sascha Posted August 13 Report Share Posted August 13 Wie sieht denn dein Code aus? Aber ganz allgemein: meinVector.normalized gibt einen Einheitsvektor zurück, der dieselbe Richtung wie meinVector hat. Also derselbe Vektor, aber mit der Länge 1. Er wird verlängert oder verkürzt, um das zu erreichen. meinVector * Zahl gibt dir meinVector zurück, aber "Zahl"-mal so lang. Wenn meinVector also die Länge 2 hat und "Zahl" = 3 ist, dann kriegst du einen Vektor mit derselben Richtung und der Länge 6. Wenn du daher meinVector.normalized * zahl dann kriegst du meinVector, aber mit der Länge "zahl", egal wie lang "meinVector" vorher war, zurück. Quote Link to comment Share on other sites More sharing options...
chrische5 Posted August 14 Author Report Share Posted August 14 Hallo So sieht mein Code aus: Vector3 direction = mousePosition - transform.position; direction = direction.normalized * _directionRayLength.value; Vector3 target = transform.position + direction; Draw.ingame.Line(transform.position, target, _directionRayColor.value); Habe ich da einen dicken Denkfehler? Christoph Quote Link to comment Share on other sites More sharing options...
Sascha Posted August 14 Report Share Posted August 14 Nö, sieht richtig aus. Meine Vermutung wäre daher, dass irgendetwas anderes schief läuft. Setzt du vielleicht _directionRayLength.value irgendwo? Oder hast du vielleicht noch ein anderes Script, das eine Linie da hin malt? Oder eine zweite Instanz dieses Scripts mit anderen Werten? Quote Link to comment Share on other sites More sharing options...
chrische5 Posted August 15 Author Report Share Posted August 15 Hallo Zunächst möchte ich um Entschuldigung bitten, dass ich mich nur so sporadisch melde. Leider habe ich derzeit viel zu tun und komme nur punktuell zum Programmieren. Zum Problem: Ich bin wirklich verwirrt. Der Wert von _directionRayLength bleibt konstant (ich lasse es mir in der Console ausgeben). Eine Linie wird nur von diesem Script gemalt und das script liegt nur auf einem GameObject. Christoph Quote Link to comment Share on other sites More sharing options...
Sascha Posted August 16 Report Share Posted August 16 Dann stimmt vielleicht was bei der Line-Funktion nicht? Steht da ein LineRenderer hinter? Nutzt der vielleicht statt world space local space oder anders herum? Quote Link to comment Share on other sites More sharing options...
chrische5 Posted August 16 Author Report Share Posted August 16 Hallo Das werde ich mir mal anschauen. Danke. Christoph Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.