Jump to content
Unity Insider Forum

Punkt auf Linie


chrische5
 Share

Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...