Kojote Geschrieben 15. MĂ€rz 2022 Melden Share Geschrieben 15. MĂ€rz 2022 Hi! Sagt mal, gibt es etwas genaueres um eine Taste bei der Maus abzufragen als: Input.GetMouseButtonDown(0) Damit kann ich zwar abfragen, ob der linke Mausbutton gedrĂŒckt wird, aber dank Update-Methode habe ich das Problem das meine Aktion zwischen 32 und 64 mal aktiviert wird. đ GetKeyDown() liefert das selbe Problem. Möchte jedoch nur einmal wissen dass gedrĂŒckt wurde und erst wenn die Taste wieder gedrĂŒckt wird, dass nĂ€chste mal etwas passiert. Hab jetzt noch einmal nachgelsen, eigentlich sollte GetMouseButtonDown nur einmal True zurĂŒckgeben. Warum macht er das aber so oft? So sieht der SpaĂ als Code bei mir aus: if(Input.GetMouseButtonDown(0) && (ClientAPI.GetTargetObject() != null) && !characterNoMove && (groundDistance < 0.07f) && !mouseOverUI) { Debug.LogError("ATTACK on: " + ClientAPI.GetTargetObject().Name); NetworkAPI.SendTargetedCommand(ClientAPI.GetTargetOid(), "/ability " + 16 + " -1 -1"); } GrĂŒĂe von Kojote Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. MĂ€rz 2022 Melden Share Geschrieben 15. MĂ€rz 2022 vor 3 Stunden schrieb Kojote: Hab jetzt noch einmal nachgelsen, eigentlich sollte GetMouseButtonDown nur einmal True zurĂŒckgeben. In der Tat. Also... jein. Update wird einmalig ausgelesen und gecached. Und zwar im Update Loop. Wenn du deine Maustaste drĂŒckst, wird GetMouseButtonDown einen Frame lang true zurĂŒck geben. Innerhalb dieses Frames aber jedes Mal. Checkst du mit dem Ding mehrere Male im selben Frame? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 15. MĂ€rz 2022 Autor Melden Share Geschrieben 15. MĂ€rz 2022 Die if-Klausel ist in der Update-Methode drin, sollte also nur ein einziges mal ausgefĂŒhrt werden.  Ich habs mal so probiert: bool mouseSave = false; bool mouseOverUI = AtavismCursor.Instance.IsMouseOverUI(); if(Input.GetMouseButtonDown(0) && (ClientAPI.GetTargetObject() != null) && !characterNoMove && (groundDistance < 0.07f) && !mouseOverUI && !mouseSave) { mouseSave = true; Debug.LogError("ATTACK on: " + ClientAPI.GetTargetObject().Name); NetworkAPI.SendTargetedCommand(ClientAPI.GetTargetOid(), "/ability " + 16 + " -1 -1"); } if(Input.GetMouseButtonUp(0) && mouseSave) { mouseSave = false; } Sollte eigentlich unmöglich sein, dass es mehr als 1 ist. Gleiches Problem wie vorher. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. MĂ€rz 2022 Melden Share Geschrieben 15. MĂ€rz 2022 Du hĂ€ltst also die Maustaste gedrĂŒckt und kriegst in jedem Frame immer wieder den Error in die Konsole gedruckt, bis du loslĂ€sst? đ€ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 15. MĂ€rz 2022 Autor Melden Share Geschrieben 15. MĂ€rz 2022 Nein, nur gut ein Dutzend mal. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. MĂ€rz 2022 Melden Share Geschrieben 15. MĂ€rz 2022 Aber in jedem Frame einmal? Oder alle auf einmal? Denn das klingt fĂŒr mich im Zweifelsfall nach gut einem Dutzend Instanzen dieses Scripts in deiner Szene. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 15. MĂ€rz 2022 Autor Melden Share Geschrieben 15. MĂ€rz 2022 Moment du hast Recht! Die Update-Methode steckt im Controller. Enemy und Player nutzen den selben Controller. Dann ist klar wo das Problem ist. Stehe ich mitten in einem Haufen Enemys wird natĂŒrlich bei jedem Enemy in der Update-Methode mein Code ausgefĂŒhrt. *facepalm* Â 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.