Jump to content
Unity Insider Forum

GameObject platzieren


Putenpizza

Recommended Posts

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

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

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

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

Archiviert

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

×
×
  • Neu erstellen...