Ich habe mir die 3 Scripte angeschaut und bin etwas verwirrt. Mir kommt es so vor, als überschreibst du dir die Variablen gegenseitig und setzt Variablen an mehreren Stellen.
Im Sprungscript setzt du beim Knopfdruck inAir auf true. Fragst gleich danach ab, ob inAir true ist (was ja so ist, weil eben schon gesetzt).
LookRight und LookLeft ist auch in mehreren Bereichen doppelt drin.
(du fragst ab ob der Knopf für rechts gedrückt wurde. Wenn ja kommt die Abfrage ob er schon nach rechts schaut, wenn nicht drehst du ihn.
2 Abfragen weiter setzt du die Variable wieder, aber nur in einer Else....
Dann definierst du, das inAir auf false geht, wenn der Contorller isGroundet ist. Ok.
Aber in den anderen Scripten setzt du manuell inAir auf false:
if (script.inAir == true && script2.isButtonDown == false) { // nur wenn in der Luft und der andere Knopf ist nicht gedrückt
direction = transform.TransformDirection(Vector3.left); // meine Richtung geht nach links
controller.SimpleMove(direction * speed); // bewege mich nach links
Debug.Log("IN DER LUFT LINKS!");
} else { // ich bin nicht in der Luft ODER der andere Knopf ist nicht gedrückt
script.inAir = false; // ich setze mich einfach mal auf false obwohl ich in der Luft sein könnte
lookLeft = true; // linke Variable wird gesetzt. Wurde aber oben schon gesetzt!
direction = transform.TransformDirection(Vector3.left); // es wird wieder die gleiche Richtung gesetzt
controller.SimpleMove(direction * speed); // und auch in selbe Richtung bewegt
...
Das ist vielleicht nicht der Fehler, aber tortzdem nicht gut. Weil wenn du inAir UND ButtonDown abfragst, kann es ja durchaus sein, das inAir true ist und nur der Button nicht....oder umgekehrt. Jedenfalls setzt du inAir auf false, wenn eine der 2 Bedingungen nicht erfüllt ist. Aber warum?
inAir ist doch solange true, bis der Controler isGroundet ist. Und im Sprungscript wird inAir sowieso wieder auf true gesetzt solange er nicht am Boden ist.
In allen Scripten sind Doppelungen drin. Ich würde dir empfehlen diese Doppelungen ersteinmal zu beseitigen.
Außerdem würde ich die Scripte anders aufbauen. Und zwar nur die Touches der Buttons auswerten und diese Info an ein zentrales Script übergeben. In diesem Script hättest du dann alle Events vereinigt und könntest viel übersichtlicher programmieren, wann welche Animation kommt und wie sich der Controller bewegt. So musst du nicht irgendwelche Variablen eines anderen Scriptes zurück setzen.
Quasi so:
Wenn Touch auf Knopf links dann sende dem script links=true.
Wenn Touch auf Links zuende, dann sende dem Script links=false.
So auch für die anderen Buttons.
Im zentralen script fragst du alle Buttons ab und entscheidest was wann passieren soll.
Wenn links und rechts dann mache nix.
Wenn nur links und nicht inAir dann mache dies
Wenn nur rechts und nicht inAir dann mache das Andere.
Wenn Sprung und isGrounded dann springe und setzte inAir
Wenn inAir und links dann mache folgendes...
So sollest du es mal versuchen, denn dann ist die Gefahr des überschreibens der Variablen viel geringer und du weisst auch ganz genau, wann welche Bedingung abgefragt wird.
Ich hoffe, du verstehst was ich meine und es hilft dir.
EDIT: Ich habe viel zu lange gebraucht, der Thread ist ja schon viiiiel weiter!
Naja..



Meine Inhalte anzeigen
Männlich
Anzeigenamen Historie
