Jump to content
Unity Insider Forum

Mausinput


chrische5

Recommended Posts

Hallo

 

Ich habe mal wieder eine allgemeine Frage:

Wie gehe ich am besten mit Mausinput um? Ich würde gern den Cursor je nach "Untergrund" ändern. Meine Idee ist, ein Skript an die Maus zu hängen, welches im Update immer einen raycast senden und schaut, was es trifft und dann entsprechend den Cursor ändert. Allerdings müsste das Script ja dann die verschiedenen Treffer interpretieren können. Das klingt nach vielen if-Abfragen a la:

if(hit.GetComponent<Gras>())

{

}

....

Ist das ein guter Weg?

 

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was meinst du genau mit Untergrund? Hintergrund: Es wären unterschiedliche Lösungen, je nachdem ob es sich um ein Unityterrain handelt oder ob du einfach nur auf verschiedene GO reagieren möchtest die in der Szene verteilt sind.

Wenn es GO sind die in der Scene verteilt sind würde ich:
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseEnter.html
und
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseExit.html

verwenden und den Mousecursor verändern je nachdem was für eine Komponente an dem GO hängt (so wie du es oben schon angedeutet hast).  Das aktuelle GO ist dir bekannt, da du für die beiden oberen Methoden ein entsprechendes Skript an die zu erkennenden GO hängen musst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei GameObjects sollte es so gehen und die Verwendung solcher Trigger ist eben wesentlich performanter als die Update-Methode mit Raycasts zu belasten.

Ansonsten wenn du bei OnMouseEnter() als GO eine Tilemap findest, dann würde ich hier doch ein Raycast durchführen und zwar immer bei OnMouseHover().
(Die Tilemap muss einen Collider haben)

Wenn du dann die Contactdaten hast über den Raycast, dann sollte es so funktionieren:
- GetComponent() des Colliders um an die Tilemap zu kommen
- Tilemap.layoutGrid um an das Grid von der TileMap.zu kommen
- Grid.WorldToCell mit dem Kollisionspunkt aus dem Raycast um an die Cellcoordinaten zu kommen
- und zum Schluss TileMap.GetTile oder TileMap.GetInstantiatedObject um an die TileBase zu kommen (oder das GO des tile)
(wo der Unterschied zwischen TileMap.GetTile und TileMap.GetInstantiatedObject genau liegt habe ich aber auch nicht verstanden)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...