Jump to content
Unity Insider Forum
loui1337

Warten auf Event

Recommended Posts

Moin!

Ich hätte da noch eine Frage wegen meinem Kleinem Spiel:
Ich möchte gerne das man erst ein GameObject auswählt und man anschließend weitere Events machen kann... bei mir geht es nachdem ich darauf geklickt sofort los und die Methode wird ausgeführt... Kann mir da jemand helfen?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Newplatform : MonoBehaviour
{
    public GameObject Platform;
    void OnMouseDown()
    {
		StartCoroutine (WaitTime());
		if (Input.GetMouseButtonDown(0))
        {
            Vector2 screenPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
            Vector2 ClickWorldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
            Debug.Log(ClickWorldPosition);
			
			Instantiate(Platform, ClickWorldPosition, transform.rotation);
        }
	IEnumerator WaitTime()
	{
		//Für Wartezeit nach Klick in Zeile 14
		yield return new WaitForSeconds (1);
		
	}
    }
}

 

Share this post


Link to post
Share on other sites

Genau richtig: StartCoroutine startet eine Coroutine, aber wartet nicht, bis sie fertig ist. Das würdest du auch gar nicht wollen, denn deine OnMouseDown-Methode wird im Hauptthread ausgeführt. Wenn du da wirklich eine Sekunde warten würdest, würde dein Spiel eine Sekunde lang einfrieren.

Allerdings passen deine Problembeschreibung und dein Code sowieso nicht ganz zueinander.

vor 18 Stunden schrieb loui1337:

Ich möchte gerne das man erst ein GameObject auswählt und man anschließend weitere Events machen kann...

Da musst du den Zustand deines Objekt ändern und nicht auf irgendetwas warten:

private bool selected;

private void OnMouseDown()
{
  selected = true;
}

private void Update()
{
  if (selected && Input.GetMouseButtonDown(0))
  {
    // ...
  }
}

 

Share this post


Link to post
Share on other sites

Und noch eine Frage:

das funktioniert immer noch nicht... sobald ich auf das Gameobject klicke wird sofort ein neues erstellt. 

Share this post


Link to post
Share on other sites
vor 3 Stunden schrieb loui1337:

Vielen vielen dank für die Antworten, aber warum genau sind die Update und OnMouseDown Methode private?😅

Hallo

 

Wenn du nix hinschreibst, ist private default. Es ist also egal, ob du nichts oder private schreibst.

 

Christoph

Share this post


Link to post
Share on other sites
vor 5 Stunden schrieb chrische5:

Wenn du nix hinschreibst, ist private default. Es ist also egal, ob du nichts oder private schreibst.

Das ist richtig, aber es gibt halt die Grundregel dass Explizit besser als Implizit ist. Die Funktionsweise ist dieselbe, aber mit expliziten Modifikatoren ist's besser für die Code-Qualität :) Ich mach's daher immer so, werfe es aber niemandem vor, wenn es anders gemacht wird.

Share this post


Link to post
Share on other sites

Hallo

Ich mache es auch so, wusste aber nicht, was da Standard ist. Alles was steht, kann ich lesen, wenn ich nix schreibe, brauche ich zusätzliches Wissen... Also mache ich es mir einfach.

 

Christoph

Share this post


Link to post
Share on other sites

Hast du denn deine Coroutine aufgerufen? 
Ich habe mir erlaubt Saschas Code etwas zu modifizieren. selected dann wieder von dir auf false gesetzt werden, da das sonst nur einmal funktioniert. 

Es ist für den User ziemlich irritierend wenn eine Sekunde lang keine Rückmeldung kommt. Du kannst das z.B auch auf 0.2f verkürzen. 
 

private bool selected;

private void OnMouseDown()
{
  	
  StartCoroutine (WaitTime());
}

private void Update()
{
  if (selected)
  {
    // ...
  }
}

IEnumerator WaitTime()
	{
		
		yield return new WaitForSeconds (1);
		selected = true;
	}
    }


 

 

Share this post


Link to post
Share on other sites

Du führst außerdem mit OnMouseDown und Input.GetMouseButton(0) das selbe aus. 
Möchtest du den Zustand das die Mouse über einem Objekt erfassen dann heisst es OnMouseOver()

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...

×
×
  • Create New...