Putenpizza Geschrieben 24. Oktober 2016 Melden Share Geschrieben 24. Oktober 2016 Hallo zusammen. Ich habe ein Button programmiert, wo jedes mal ein GameObject erstellt wird, wenn man draufklickt. Das GameObject übernimmt die Position der Maus, damit ich es positionieren kann. Das Problem nun ist, dass es nicht platziert wird. Ich möchte, dass wenn der Button geklickt wird und die Maus gedrückt gehalten wird, das Objekt erstellt wird aber erst platziert wenn losgelassen wird. Das hab ich versucht mit der Input.GetMouseButtonDown abfrage aber, jetzt wird das Objekt immer sofort platziert. Hier einmal der Code: using UnityEngine; using System.Collections; public class PlatformPlacement : MonoBehaviour { public GameObject gObject; public Camera mycamera; public Rect rect; public bool isClicked = false; public bool isCreated = false; void Start () { mycamera = GetComponent<Camera>(); } void Update () { if(isClicked) { Placement(); } } void OnGUI() { if(GUI.Button(rect, "Platform")) { isClicked = true; isCreated = true; } } void Placement () { Vector2 mousePos = Input.mousePosition; Vector2 objectPos = mycamera.ScreenToWorldPoint(mousePos); if (isCreated) { Instantiate(gObject, objectPos, Quaternion.identity); isCreated = false; } if (Input.GetMouseButtonDown(0)) { gObject.transform.position = objectPos; } else { isClicked = false; } } } Ich hab erst vor kurzem mit Programmieren angefangen und weiß nun nicht mehr weiter Ich hoffe ihr könnt mir Weiterhelfen. MfG Putenpizza Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TobLine Geschrieben 24. Oktober 2016 Melden Share Geschrieben 24. Oktober 2016 Naja wenn du es beim Maus auslassen haben möchtest, versuchs doch eher mit GetMouseButtonUp: https://docs.unity3d.com/ScriptReference/Input.GetMouseButtonUp.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Putenpizza Geschrieben 24. Oktober 2016 Autor Melden Share Geschrieben 24. Oktober 2016 Hab es gerade ausprobiert und es klappt leider immernoch nicht :/ Wenn ich jetzt auf den Button klicke, dann wird das Objekt erst erstellt, wenn ich die Maus loslasse. Ich möchte es aber noch positionieren bevor es erstellt wird. Trotzdem Danke für deine Hilfe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
GelegenheitsProgrammierer Geschrieben 24. Oktober 2016 Melden Share Geschrieben 24. Oktober 2016 Naja mit erstellen meinst du natürlich das es dann an dem Ort platziert wird und nicht mehr von der Maus verschoben werden kann, war etwas unglücklich formuliert wenn du das meinst. Wenn du auf deinen Button drückt, erstelltst du ein Gameobject(ich nenn es jetzt einfach mal Cube ersatzweise). Dieser bekommt jedes Update die Position deiner Maus übermittelt. So das der Cube immer da ist wo deine Maus ist. Wenn du jetzt die Mouse los lässt mit GetMouseButtonUp(), musst du einfach in dein GameObject verweis in deinen Script "Null" schreiben. Bei dir wäre das gObject glaub ich also musst du einfach gObject = null; schreiben. Probier das mal. Was vielleicht auch helfen könnte ist das video Das sollte deinem Problem recht ähnlich kommen MFG GelegenheitsProgrammierer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Putenpizza Geschrieben 24. Oktober 2016 Autor Melden Share Geschrieben 24. Oktober 2016 Es klappt leider immernoch nicht. Wenn ich es "null" setze, dann wird die GameObject Zuweisung vom Script gelöscht. Ich hab das jetzt etwas anders gelöst und zwar habe ich einfach abgefragt, ob die linke Maustaste betätigt wird. Ist zwar nicht genau das was ich wollte aber es klappt fürs erste. Aber etwas stört mich noch. Undzwar wenn ich jetzt mehr als ein Objekt erstellt habe und ich wieder auf den Button klicke, dann positionieren sich alle Objekte, da wo ich hingeklickt habe. Wie verhindere ich das ? //EDIT Ich hab eine neue Instance erstellt und das Problem somit gelöst: myNewInstance = (GameObject)Instantiate(gObject, objectPos, Quaternion.identity); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TobLine Geschrieben 24. Oktober 2016 Melden Share Geschrieben 24. Oktober 2016 Naja du rufst void Placement() ja wahrscheinlich nur einmal beim Button Klick auf. Das heißt es wird nur dann wenn du den Button klickst die Position upgedated: Vector2 mousePos = Input.mousePosition; Vector2 objectPos = mycamera.ScreenToWorldPoint(mousePos); Du kannst die zwei Zeilen in Update() packen, dann wird bei jeden update objectPos wieder upgedated. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
GelegenheitsProgrammierer Geschrieben 24. Oktober 2016 Melden Share Geschrieben 24. Oktober 2016 Ich Schätze mal das das Script an den Objekten selber hängt ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.