Jump to content
Unity Insider Forum
Sign in to follow this  
chrische5

Mausinput

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

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
Share on other sites

Hallo

Es handelt sich um ein 2D Spiel. Also wird der Untergrund entweder eine Tilemap oder eben gameobjects auf dieser sein. Ich schaue mal, ob ich das mit den, von dir gezeigten, events lösen kann.

 

Danke

Christoph

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
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...
Sign in to follow this  

×
×
  • Create New...