Kojote Geschrieben 13. Oktober 2017 Melden Share Geschrieben 13. Oktober 2017 Grüße! Ich habe mal eine Frage zur Gestensteuerung. Habe mir folgendes Script geschrieben: public void FixedUpdate() { if (pause) { return; } // Raycasting für Objektanwahl if (mobilePlatform == true) { // Steuerung über Touch if (heySpielemenueSteuerung.hexagonAktivierungsTyp == 0) { // Gestensteuerung wischen if(Input.touchCount > 0 & Input.GetTouch(0).phase == TouchPhase.Moved) { if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.GetTouch(0).position), out hit)) { for (int hexagonNR = 0; hexagonNR < hexagonFeld.Length; hexagonNR++) { string name = "Hexagon_"; if (hit.collider.gameObject.name == (name + hexagonNR.ToString())) { // Wir haben unser Hexagon gefunden! HexagonAuswahl(hexagonNR); } } } } } else { // Gestensteuerung Tippen if (Input.touchCount > 0) { if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.GetTouch(0).position), out hit)) { for (int hexagonNR = 0; hexagonNR < hexagonFeld.Length; hexagonNR++) { string name = "Hexagon_"; if (hit.collider.gameObject.name == (name + hexagonNR.ToString())) { // Wir haben unser Hexagon gefunden! HexagonAuswahl(hexagonNR); } } } } } } else { // Steuerung mit Maus if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)) { for (int hexagonNR = 0; hexagonNR < hexagonFeld.Length; hexagonNR++) { string name = "Hexagon_"; if (hit.collider.gameObject.name == (name + hexagonNR.ToString())) { // Wir haben unser Hexagon gefunden! HexagonAuswahl(hexagonNR); } } } } } } Ich möchte gerne 3 Steuerungen haben, einmal eine Steuerung mit der Maus, diese funktioniert und können wir mal ausklammern. Dann möchte ich mit der Touchsteuerung eine "Wischsteuerung" und eine "Tippsteuerung" haben. Beide funktionieren, jedoch kann ich bei beiden das selbe machen, ich kann bei der Wischsteuerung auf Tippen und bei der Tippsteuerung auf wischen. Ich hab nun schon einiges versucht, aber entweder funktioniert es gar nicht oder beides gleich, kann man das differenzieren? Grüße von Kojote Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Oktober 2017 Melden Share Geschrieben 14. Oktober 2017 Input.touchCount > 0 & Input.GetTouch(0).phase == TouchPhase.Moved Finde den Fehler! Außerdem würde ich Touch-Code echt nicht in FixedUpdate machen, weil du da sehr leicht fehlerhafte unerwartete Werte kriegen kannst. Als nächstes würde ich den Code mal aufräumen. Pack den Maus-Code und den Touch-Code jeweils in eine Extramethode. Statt zur Laufzeit "mobilePlatform" abzufragen, kannst du Preprozessor-Direktiven benutzen: #if UNITY_ANDROID || UNITY_IOS private void UpdateInput() { // Touch-Input } #else private void UpdateInput() { // Maus-Input } #endif Dann werden beide Touch-Methoden plötzlich dieselbe, aber nur die für die richtige Plattform wird mitkompiliert. Wenn der Code erstmal aufgeräumt ist, kannst du dich viel besser auf das eigentliche Problem konzentrieren. Du willst gleichzeitig Antippen und Wischen anbieten. Mit dem Problem bist du bei weitem nicht der erste, und deshalb gibt es da schon Lösungen für. Der Standard ist, zu schauen, wie Weit vom Startpunkt des Touchs losgelassen wird. Wenn der Touch weniger als x Pixel neben dem Start wieder aufhört, gilt das als antippen, sonst als Wischen. Alternativ kannst du statt Pixel zählen auch schauen ob der Touch auf dem selben Hexagon-Feld wieder aufhärt, auf dem er begonnen hat. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 14. Oktober 2017 Autor Melden Share Geschrieben 14. Oktober 2017 Verrätst du mir den Fehler? Ich kapier das mit dem Touchscreen Count und dem Phase nicht. :-( Bisher hab ich den Touchscreen immer in Tutorials in Fixen Updates gesehen. Eben wegen dem Ray. Aber könnte erklären das die Eingabe nicht immer 100 pro erkannt wird, da ja Fixen nicht so oft ausgeführt wird wie Updates. Des weiteren gibt es einen signifikanten Unterschied zwischen der Touchscreen Abfrage Touch-Input und der Maus Abfrage Mouse-Input? Beides scheint ja auf dem Tabletten zu funktionieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Oktober 2017 Melden Share Geschrieben 14. Oktober 2017 Operator für "Und" bei booleans: && Operator für bitweises "Und": & Was Maus-Input auf Touch-Geräten angeht, weiß ich nicht genau bescheid. Müsste da nochmal experimentieren. Jedenfalls ist davon auszugehen, dass Maus weniger kann als Touch. So mehrereTouches und Touch-Phasen und so. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 14. Oktober 2017 Autor Melden Share Geschrieben 14. Oktober 2017 Ich würde da auch noch einmal nachlesen, aber rein von der Funktion wenn man nur kontrollieren will, ob ein Klicks erfolgte, müsste Mouse-Input reichen. Das da irgendwie Probleme bei der Erfassung wären, habe ich nicht bemerkt. Denke mal geht dabei eher um den Funktionsumfang. Also rein gelernt habe ich bei && und & bzw. | bzw. || das es dabei rein um Recourcensparung geht. Das bei Bitweise zu Boolean was anders wäre, wäre mir neu, würde ich aber mal nachverfolgen. :-) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Oktober 2017 Melden Share Geschrieben 14. Oktober 2017 && ist für booleans, & ist für Bitmasken. Auch wenn die Einsparung mit && bei booleans der einzige Vorteil ist - Grund genug. 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.