Jump to content
Unity Insider Forum

Objekt auf dem Spielfeld durch Mausklick zu anderer Position bewegen


Madmix
 Share

Recommended Posts

Hallo Com,
ich bin relativ neu in Unity und entwickele gerade ein einfaches 2D Spiel für mich zum lernen.
Ich glaube meine Frage wird hier des öfteren gestellt und entrückt euch Profis nur ein müdes lächeln.
Über die Suchfunktion hier habe ich bisher nicht das Passende gefunden, daher hoffe ich auf euer Schwarmwissen.

Folgendes Scenario möchte ich umsetzen und stoße da etwas an meine Grenzen.

Es gibt Prefabobjekte auf der Spielfläche, die mehr oder weniger mehrfach dort vorkommen und beim Spielstart dynamisch erstellt werden.
Z.B. Prefab -> carYellow, carRed, carBlue usw.
carRed erscheint auf dem Spielfeld 10x, carYellow 3x und carBlue 5x an unterschiedlichen Plätzen.
Nun möchte ich jedes einzelne Objekt mit der linken Maustaste anklicken und zu einem bestimmten Punkt auf der Spielfläche verschieben.

Wie ich alle Objekte z.B. carYellow auf einmal auf der X oder Y-Achse verschiebe, habe ich bereits herausgefunden.
Allerdings passiert das wenn ich mit der Maus irgendwo im Spielfeld klicke.
Mein Problem ist nun, wie ermittel ich das geklickte Objekt um es dann einzelnd zu verschieben?
Ich hoffe ich habe mich verständlich ausgedrückt und hoffe auf eure Hilfe.


Danke Mad.

Link to comment
Share on other sites

Moin und willkommen!

Du kannst deinen Autos, wenn sie das nicht schon haben, Collider geben. Die sind nicht nur für Physik und Kollisionen da, sondern werden auch dafür benutzt, dass du in die Szene klicken kannst und dann wird geschaut, was du getroffen hast.

Die professionellere Variante ist das jetzt nicht, aber für den Anfang reicht es aus, deinem Auto-Prefab ein Script zu geben (bzw. ein vorhandenes zu erweitern), das eine OnMouseDown-Methode hat:

private void OnMouseDown()
{
  Debug.Log(name + " wurde geklickt");
}

Wenn das soweit funktioniert, kann man da was sinnvolleres reinschreiben.

Z.B. kannst du das markierte Auto in einem statischen Feld referenzieren. Statisch bedeutet, dass nicht jede Instanz dieses Script (also jedes Auto für sich) dieses Feld (Variable) hat, sondern es das Feld nur einmalig im Programm gibt. Wenn du da also "hineinschreibst", welches Auto gerade markiert ist, dann kann immer nur eines zur Zeit markiert sein.

// "NameDesAutoScripts" = Name dieses Scripts hier
public static NameDesAutoScripts selectedCar;

private void OnMouseDown()
{
  selectedCar = this;
}

Und in deinem Code, der Autos bewegt, kannst du dann diesem Auto sagen, dass es sich bewegen soll:

NameDesAutoScripts.selectedCar.MoveTo(position);

...oder wie auch immer dein Code da aussieht. Jedenfalls kannst du mit "NameDesAutoScripts.selectedCar" von überall im Code das aktuell ausgewählte Auto abfragen und damit machen, was du willst.

Ist alles etwas rudimentär - für eine Stelle als Entwickler solltest du dich mit diesem Code eher nicht bewerben. Sollte aber funktionieren. Nur nicht drauf verbeißen ;)

Link to comment
Share on other sites

Super danke, nun kann ich schon mal einzelne Objekte zu Testzwecken per Mausklick verschwinden lassen.
Der nächste Stepp wird es nun sein, diese Objekte an einem anderen Ort wieder auftauchen zu lassen, oder sie animiert dorthin zu bewegen.
'NameDesAutoScripts.selectedCar.MoveTo(position);' wird mir da bestimmt weiterhelfen.
Sobald ich Zeit habe werde ich mich da mal ranmachen.

 

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...