SyntaxTalkstoMe Geschrieben 26. November 2018 Melden Share Geschrieben 26. November 2018 Hi, ich habe jetzt doch mal wieder eine Frage. Und zwar möchte ich gerne, dass wenn man auf der linken Seite des Touchbildschirmes drückt das eine passiert und auf der anderen Hälfte, soll etwas anderes passieren. Das funktioniert auch so wie ich es mir vorgestellt habe. Allerdings gibt es kleines Steuerungsproblem. Beim gedrückt halten auf der linken seite des Screens soll der Character steigen. Das heißt man muss den Finger auf dem Display halten. Auf der rechten Seite soll ein einzelner Touchclick abgefragt werden zum schießen eines Feuerballs. Allerdings vertragen sich irgendwie zwei "gleichzeitige" Befehle auf dem Touchdisplay irgendwie nicht. Die Eingabe auf der rechten Seite des Screens, hebt irgendwie die Eingabe des linken Touches auf. Gibts da irgendein Kniff? Hab zwar gegoogelt, allerdings finde ich nur Einträge, zu Multitouch Sachen, also bestimmte nacheinander folgende Touchbewegungen. Das Input.MultitouchEnabled ist auf true. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. November 2018 Melden Share Geschrieben 26. November 2018 Ich rate jetzt einfach mal blind, dass du Input.GetTouch und dergleichen benutzt. Denke mal, etwas Code hilft da mehr als tausend Worte: private void Update() { for (var touchIndex = 0; touchIndex < Input.touchCount; touchIndex++) { var touch = Input.GetTouch(touchIndex); // If touch is on left screen half if (touch.position.x <= Screen.width / 2) { MoveCharacterUpwards(); } else { if (touch.phase == TouchPhase.Began) { ShootFireball(); } } } } Wenn das nicht funktionieren sollte, würde ich stark darauf tippen, dass dein Testgerät extrem alt ist und gar kein Multitouch unterstützt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
SyntaxTalkstoMe Geschrieben 26. November 2018 Autor Melden Share Geschrieben 26. November 2018 Mein Code sieht folgendermaßen aus: Für die rechte Seite des Bildschirms: Für den FEuerball // die Mitte des aktuellen Kameraauschnittes float mitteDesBildschirms = Camera.main.pixelWidth * 0.5f; if (Input.GetTouch(1).position.x > mitteDesBildschirms) { //Up and Down if (GameLogic.gameStartet) { if (Input.touchCount > 0) { Touch touch = Input.touches[0]; float count = touch.tapCount; if (touch.phase == TouchPhase.Stationary) { if (canFire) { StartCoroutine(Shoot()); } } } } } Für die linke Seite des Bildschirms: float mitteDesBildschirms = Camera.main.pixelWidth * 0.5f; //Ist die Touch Position kleiner als die mitte des Bildschirmes, fliegt der Charakter //nach oben. Befindet sich die Position größer als die Mitte des Bildschirms, wird ein Feuerball //geschossen. if (Input.GetTouch(0).position.x < mitteDesBildschirms) { //Up and Down if (!dead && !gameOver && GameLogic.gameStartet) { if (Input.touchCount > 0) { Touch touch = Input.touches[0]; float count = touch.tapCount; if (touch.phase == TouchPhase.Stationary) { rb2d.AddForce(new Vector2(0, 80), ForceMode2D.Force); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. November 2018 Melden Share Geschrieben 26. November 2018 Da haben wir's ja. Du schaust immer, ob Touch 1 rechts is und Touch 0 links. Da der Index aber neu vergeben wird, je nach dem, welcher Touch zuerst da war, klappt das gerne mal nicht. Hinzu kommt, dass mann mit seinen Patschehändchen durchaus versehentlich mal einen dritten Touch hat oder so. Gehe deshalb wie bei meinem Code mit einer Schleife durch alle Touches durch, und jeder Touch kann, unabhängig vom Index, alles auslösen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
SyntaxTalkstoMe Geschrieben 26. November 2018 Autor Melden Share Geschrieben 26. November 2018 Ja ich muss mir das nochmal genauer angucken. Das mit den Schleifen bei den Toucheingaben habe ich noch nicht wirklich verstanden warum das so gemacht wird. Aber ich weiß jetzt wo der Fehler liegt und kann dementsprechend schauen. Danke dir 👍 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. November 2018 Melden Share Geschrieben 26. November 2018 Die Schleife ist eben dafür da, durch alle Touches durchzugehen und sie alle gleich zu behandeln, da der Index eines Touches so gut wie nie Einfluss auf die Interpretation des Touches haben sollte. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
SyntaxTalkstoMe Geschrieben 26. November 2018 Autor Melden Share Geschrieben 26. November 2018 Ah. Ok. Verstanden. Also mit anderen Worten gesagt, werden die Touches erstmal in Form vom Count gespeichert und dann sauber per Schleife abgearbeitet. Ich denke ich hab es verstanden. Meine oben genannten Codeschnipsel sind aus zwei verschiedenen Skripten. Wäre es sinnvoller, diese dann zusammenzuführen und über einen Count, bzw die gleichen Variablen laufen zu lassen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. November 2018 Melden Share Geschrieben 26. November 2018 vor 4 Stunden schrieb SyntaxTalkstoMe: werden die Touches erstmal in Form vom Count gespeichert Uff... naja, nicht so wirklich. Da wird einfach hochgezählt und dann wird GetTouch mit der hochgezählten Zahl aufgerufen. vor 4 Stunden schrieb SyntaxTalkstoMe: Meine oben genannten Codeschnipsel sind aus zwei verschiedenen Skripten. Wäre es sinnvoller, diese dann zusammenzuführen und über einen Count, bzw die gleichen Variablen laufen zu lassen? Kommt immer darauf an. Modulare Herangehensweisen sind immer erstmal gut - ist zum Beispiel eine schöne Sache, wenn dein "Linke Seite"-Script drinbleiben kann, wenn du das "Rechte Seite"-Script deaktivierst. Zweimal oder sogar öfter eine Schleife zu haben, die GetTouch aufruft, ist auch kein Problem. Eine Aufteilung wird immer weniger sinnvoll, je mehr sie bedeutet, denselben Code doppelt zu haben. Da das hier nicht wirklich der Fall ist, kann man das schon getrennt lassen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
SyntaxTalkstoMe Geschrieben 26. November 2018 Autor Melden Share Geschrieben 26. November 2018 Danke Sascha. Die letzten Unklarheiten wurden beseitigt und es funktioniert gut. 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.