Sascha Geschrieben 31. August 2010 Melden Share Geschrieben 31. August 2010 In anderen Engines ist es eine komplizierte Sache, wenn man dem Spieler die Möglichkeit geben will, mit der Maus in die 3D-Welt hineinzuklicken. Man muss die zweidimensionale Mausposition benutzen, um über Aspect Ratio der Kamera und Auflösung des Spiels eine dreidimensionale Position zu ermitteln und dabei schauen, auf welches Objekt der "Strahl" (Ray), der mit diesen Informationen berechnet wird, fällt. Unity macht diesen Vorgang sehr einfach, aber bietet zusätzlich noch eine ganz einfache Alternative an. Erstelle folgendes Skript:function OnMouseDown() { print("Du hast auf das Objekt geklickt."); } Weise das Skript einem Objekt zu, das einen Collider hat Starte das Spiel Klicke auf das Objekt In der Konsole (und damit unten links im Editor) erscheint der Geklickt-Satz. Ersetze den print()-Befehl durch beliebigen Code Fertig! Neben OnMouseDown() (Spieler hat geklickt) gibt es noch ähnliche Funktionen: OnMouseEnter() (Spieler hat angefangen, das Objekt mit dem Zeiger zu berühren) OnMouseExit() (Spieler hat aufgehört, das Objekt mit dem Zeiger zu berühren) OnMouseOver() (Spieler berührt jetzt in diesem Frame das Objekt mit dem Mauszeiger) Viel Spaß mit Picking! 2 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chip Geschrieben 1. September 2010 Melden Share Geschrieben 1. September 2010 Danke für das Tutorial, manchmal denk ich einfach komplizierter als es ist. OnMouseUp und OnMouseDrag gibts noch. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 1. September 2010 Autor Melden Share Geschrieben 1. September 2010 Stimmt wohl Ich dachte mir: In der Kürze liegt die Würze, und Anfänger brauchen die beiden auch nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Thomas Eilmsteiner Geschrieben 1. September 2010 Melden Share Geschrieben 1. September 2010 Naja ich persönlich finde OnMouseUp() besser als OnMouseDown(). Speziell bei Menüs ist es besser. Tom. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chip Geschrieben 1. September 2010 Melden Share Geschrieben 1. September 2010 *g* das ist eine Grundsatzdiskussion die in wohl in jeder Sprache, die GUI-Elemente hat, stattfindet. Aber zum Schluss läuft es doch auf die persönliche Vorliebe hinaus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Gast Timo Weiße Geschrieben 1. September 2010 Melden Share Geschrieben 1. September 2010 Der Standart ist wohl Schaltflächen mit OnMouseUp( ) zu versehen.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Gast Terry Geschrieben 2. September 2010 Melden Share Geschrieben 2. September 2010 Naja ich persönlich finde OnMouseUp() besser als OnMouseDown(). Speziell bei Menüs ist es besser. Tom. Naja... besser, schlechter... Beide haben ihren eigenen Zweck/Sinn, z.B. ist eine Drag&Drop funktion mithilfe von OnMouseUp() ziemlich,... doof. Da ist es sinnvoller onMouseDown() zu nehmen und solange man gedrückt hält, das Object "dragged". Von daher ist diese Aussage. Mäh. Aber klar für Menüs wird oftmals onMouseUp benutzt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
teiger Geschrieben 1. August 2012 Melden Share Geschrieben 1. August 2012 Hi leute, da fällt mir grad was ähnliches ein. Ist es möglich wenn ich in der Mitte ein GUI (Crosshair) einrichte ähnlich wie bei dem (3rdPersonShooter_Sample),diesen so zu nutzen das wenn ich damit auf Objekte Ziele, und eine Maustaste drücke dieses Object ausgewählt wird? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Naim Geschrieben 1. August 2012 Melden Share Geschrieben 1. August 2012 Hi leute, da fällt mir grad was ähnliches ein. Ist es möglich wenn ich in der Mitte ein GUI (Crosshair) einrichte ähnlich wie bei dem (3rdPersonShooter_Sample),diesen so zu nutzen das wenn ich damit auf Objekte Ziele, und eine Maustaste drücke dieses Object ausgewählt wird? Ich denke, dass sollte möglich sein. Ich würde das hier benutzen um festzulegen, dass der Cursor in der Mitte bleibt: http://docs.unity3d.com/Documentation/ScriptReference/Screen-lockCursor.html Einfach das Crosshair auf die Kamera legen und zentrieren und dann kannst du ein Script mit OnMouseDown Funktion erstellen und auf dein Objekt legen. Im selben Skript auch eine Boolean Variable erstellen und OnMouseDown auf true setzen... Dann könntest du es als Schalter benutzen... Oder du lässt es sich bewegen oder so... Ich hoffe es hilft und die Idee ist net falsch. 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
teiger Geschrieben 1. August 2012 Melden Share Geschrieben 1. August 2012 Danke habe mir nun was zusammen gezimmert . using UnityEngine; using System.Collections; public class Crosshair : MonoBehaviour { public Texture reticle; /*Funktion draw crosshair on Center * Erstellt in der Mitte der Screens einen Zielpunkt * wenn ESC gedrückt wird wird der Cursor wieder Freigegeben,ist allerdings noch verdeckt!*/ void OnGUI () { if (Time.time != 0 && Time.timeScale != 0) GUI.DrawTexture(new Rect(Screen.width/2-(reticle.width*0.5f), Screen.height/2-(reticle.height*0.5f), reticle.width, reticle.height), reticle); Screen.lockCursor = true; Screen.showCursor = false; } } Soweit geht alles und sogar ohne Fehler!. Nun habe ich einem Object diesen Script zugewiesen. #pragma strict function Start () { } function Update () { } function OnMouseDown() { print("Du hast auf das Objekt geklickt."); } Wobei ich ja nun anstatt (print) auch eine Funktion zuweisen kann z.B: So wie ich das im Game geplant habe,als Bonus Goldstücke auf der Map zu verteilen diese damit per Klick aufnehmen zu lassen, und dem Guthaben des Players im Game hinzuzufügen, und somit gleichzeitig das Object verschwinden zu lassen. Wobei ich das verschwinden des Objects über Destroy (gameObject) realisieren möchte. @Edit: Hätte eventuell jemand nen Tipp wie man diese Destroy's Zählen lassen könnte. Im Detail: Ich habe vor im Game ein Money System einzubauen, sprich bei Game-start(New Game) hat der Player ein Festes Guthaben z.B. 2000 Coints oder so. Wenn er nun die Versteckten Coints findet und einsammelt, wird ihm ein festgelegter Betrag gut geschrieben. Also soll der vorhandene Betrag logischerweise erhöht werden und irgendwo gespeichert werden, das er beim nächsten start wieder da ist. Hätte dafür jemand eine Lösung? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
teiger Geschrieben 2. August 2012 Melden Share Geschrieben 2. August 2012 Hat sich erledigt bis aufs Speichern des Guthabens in .txt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
olaf Geschrieben 20. August 2012 Melden Share Geschrieben 20. August 2012 Danke! Ich hatte es mir bisher immer unnötig kompliziert gemacht: void OnMouseOver() { mouseOverObject= true; } void OnMouseDown() { if (mouseOverObject) //blabla } omg Gruß Olaf Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.