Jump to content
Unity Insider Forum

Objekt mit Mausklick ansprechen


uumli

Recommended Posts

Hallo,

 

Ich habe derzeit ein Problem. Ich brauche für ein kleines Projekt die Möglichkeit, Objekte in der Spielwelt mit einem Mausklick anzusprechen.

 

Der Spieler (2D) läuft in dem Level herum und findet ab und zu Objekte, die mit einem Ausrufezeichen markiert sind. Dort soll er mit der Maus (Linksklick) die Objekte anklicken. Wenn das geschieht, soll ein Canvas geöffnet und ein kleiner Sound abgespielt werden. Mir fehlt die Möglichkeit, diese Objekte mit der Maus anzusprechen. Hat dort jemand eine Lösung? Ich komme da leider nicht weiter.

 

PS: Nach Möglichkeit, sollen die Objekte, danach zerstört werden.

 

Danke schonmal, an alle. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da wird kein Objekt definiert. Es sei denn, du zählst den Collider2D, der auf dem anklickbaren GameObject sein soll.

 

Phyics.Raycast ist eine Funktion, die ausgeführt wird. Du steckst Richtung und andere Parameter rein und es kommen Informationen zurück, ob oder was getroffen wurde.

Da Spiele ja grundsätzlich in ihrem innersten Kern eine Schleife sind, die immer abwechselnd Update (Spielinhalt ändern) und Render (Spiel zeichnen) ausführt, musst du deine Abfrage in Update packen.

void Update() // Jeden Frame:
{
 if(Input.GetMouseButtonDown(0)) // Wenn die linke Maustaste in diesem Moment gedrückt wird:
 {
   RaycastHit hit;
   if(Physics.Raycast(ray, out hit)) // Wenn der Ray etwas trifft:
   {
  Debug.Log(hit.gameObejct.name);
   }
 }
}

Das wäre jetzt der Code für einen 3D-Raycast.

Für dein 2D-Projekt wäre es allerdings eventuell sinnvoll, statt eines Raycasts OverlapPoint zu benutzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab den Quellcode eurer beiden Antworten mal kombiniert, damit Vermentex es leichter hat:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
Camera camera;

void Start() {
 camera = GetComponent<Camera>();
}

void Update() {
   if(Input.GetMouseButtonDown(0)) // Wenn die linke Maustaste in diesem Moment gedrückt wird:
   {
	 // Erzeuge Ray von der aktuellen Mausposition in den 3D(2D)-Raum
	 Ray ray = camera.ScreenPointToRay((Input.mousePosition);
	 RaycastHit hit;
	 if(Physics.Raycast(ray, out hit)) // Wenn der Ray etwas trifft:
	 {
		Debug.Log(hit.gameObject.name);
	 }
   }
}
}

 

Eine andere (vermutlich bessere) Variante wäre deinen Objekten einen 2D-Collider zu verpassen und den Mausklick so zu ermitteln:

https://docs.unity3d...nMouseDown.html

 

Dabei musst du ebenfalls ein Skript mit der OnMouseDown()-Methode allen diesen Objekten verpassen.

(hier ein Video wie das im 3D-Raum funktioniert:

)

 

 

Für die obere Variante musst du deinen 2D-Objekten 3D-Collider verpassen!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...