snake bewegungs steuerung

  • moin!

    ich habe mal in den letzten tagen versucht snake nach zu bauen.

    dazu habe ich eine pawn bp erstellt und darin ein static mesh genommen, das ich mit den tasten wsad steuere. die tasten ändern eine vector variable und die werte benutze ich für x bzw y, für die bewegung.

    dann lass ich einen timer darin mit begin play ablaufen, der einen custom event abruft, der die bewe setzt.(im dem ich diesen x/y wert plus meine schrittweite bewege, meine schrittweite variable ist meine breite vom mesh, damit ich später verschiedene benutzen kann und später die grösse noch ändern kann, so mein gedanke)

    ich habe eine feste camera in der map, die ist mit einer editable variable in meiner pawn bp verknüpft.


    jetzt zu meinem problem, ich wollte nun eine 3d ansicht/steuerung mit einbauen. deswegen habe ich eine zusätzliche camera in der pawn bp schlangenkopf eingefügt, wenn ich die camera rotation nun ändere, bleiben ja bei meinen wasd variablen, die werte trotzdem auf x+1 -1 bzw y1 -1 gesetzt. das bedeutet wenn ich die camera rotation ändere, bleiben ja die x/y werte und er setzt mein mesh immer in die jeweilige richtung obwohl meine camera woanders hinzeigt. im moment habe ich praktisch eine steuerung die nur eine richtung funktioniert.


    6 screenshots und ein kleines video, damit ihr seht worum es geht.

    ich hoffe ihr habt mich halbwegs verstanden und könnt mir einen tip geben.


    das video: https://www.sendspace.com/file/x6g2xp

  • deswegen habe ich eine zusätzliche camera in der pawn bp schlangenkopf eingefügt,

    Vielleicht ist es heute zu warm aber ich sehe nur eine Kamera.

    Wenn die Kamera am Spring-Arm deine 3D Kamera ist, dann kannst du ja an der Rotation des Spring-Arm sehen wohin der Spieler schaut und dementsprechend die Bewegung übersetzen.

    Wenn der Spieler nach rechts schaut und vorwärts drückt dann muss du es so umsetzen das jetzt zB. +Y vorwärts ist und nicht +X.

    Du hast zwei Möglichkeiten, Rotation oder Forward-Vector. Nimm das was für dich mathematisch einfacher ist.


  • erstma danke für die antwort.

    ja es ist nur 1 camera in der pawn bp, die andere ist im moment einfach in die map gesetzt und mit der pawn bp verknüpft.

    es klappt mit get rotation, ich habe jetzt eine branch abfrage "mit setz mesh nur wenn die richtung stimmt" gebaut und das für alle 4 richtungen. die ich durch 3 custom events, in dem dort die jeweilige rotation neu gesetzt wird.



    das funktioniert seit heute, danke für den tip!

    noch nicht automatisch aber darum kümmer ich mich.

    ich würde gern noch wissen ob das ok ist, das die steuerung hier in der pawn bp mit drin ist? es gibt ja die player controller. ich weiss nicht genau wann man welche bp vorlage benutzen sollte.

    entspanntes wochenende

  • ich würde gern noch wissen ob das ok ist, das die steuerung hier in der pawn bp mit drin ist? es gibt ja die player controller. ich weiss nicht genau wann man welche bp vorlage benutzen sollte.

    Das hängt ganz vom Zweck ab. Wenn sich z.B. der Pawn während der Runtime ändert, ist alles aus dem vorherigen Pawn BP weg. Wechselt also dein Pawn des Öfteren würde es sich anbieten die Mechaniken in den PlayerController zu schreiben, da der meist gleich bleibt. Außerdem würde ich darauf verzichten komplexe Mechaniken in den Pawn selber zu schreiben, und dann eher den Controller zu benutzten. Da Snake jetzt aber kein sonderlich komplexes Spiel ist (zumindest in der Grundvariante), ist das auch voll in Ordnung die Steuerung direkt in den Pawn zu schreiben.

    Look behind you! A three-headed monkey!

  • moin,

    hier mal ein kleines update, von meinem versuch eines snakes.

    mittlerweile funktioniert auch die steuerung in der ego perspektive.(nur links und rechts möglich, gelöst mit get rotation) bild 1

    ich habe 2 widgets eingebaut, eines das die aktuelle anzahl der eingesammelten anhänge und die abgelaufene zeit anzeigt(die zeit hat sekunden, minuten und stunden, wobei stunden vielleicht übertrieben sind..) und ein zweites wigdet erscheint nur wenn mein würfel blueprint /der spieler, die todeszone bp oder die anhänge bp beruht, mein spielende.(mit neustart oder spiel beenden) bild 2 bild 3


    materialien, licht usw ist noch nicht viel verändert worden, ausser einem verlauf über die kompletten bodenplatten und 1-2 mesh änderungen.(mit licht habe ich auch noch relativ wenig erfahrung und erstmal sollten die grundfunktionen laufen) bild 4


    mein problem bei dem ich keine lösung gefunden habe. ich möchte das der erste würfel (meine pawn bp und der kopf der schlange) immer 1 mal pro bewegung, eine animation oder eine timeline abspielt! die schneller abläuft/spielt, wenn sich bei einem timer der zeit wert ändert/abnimmt.

    das ist der timer, der für das bewegen der würfel bp/spieler zuständig ist. der timer hat einen wert zwischen 0-1. (warum die animation/timeline, ich erhoffe mir dadurch eine flüssigere bewegung wenn er seine position ändert. im endeffekt wollte ich das sie immer am anfang und am ende der schlange abspielt)


    meine herangehensweise, ich habe mir einen custom event gebaut, damit der timer abnimmt, immer wenn meine einsammel blueprint overlappt wird. ich habe für mich zum einfacheren arbeiten aber nicht mit den 0-1 werten des timers gearbeitet. sondern mir 2 funktionen erstellt, die aus dem wert eine zahl zwischen 0-100 erstellen und zurück. ich wollte das der timer wert, anfangs grösser und später sehr viel langsamer fällt. weil anfangs kaum unterschiede aber später (unter 0,2-0,1 /durch meine funktion 20-10) grosse schnelligkeits unterschiede bemerkbar sind.(ich glaube das hier ist nicht gut umgesetzt und daran liegt es) bild 5


    das müsste jetzt mit der animation/timline gekoppelt werden.

    also habe ich eine simple animation mit einem würfel erstellt, der seine grösse verändert.(die timeline macht genau das gleiche.) bild 6

    nun müsste die playrate schneller werden. ich weiss wenn der timer den wert 0,5 hat denn müsste die playrate von der animation 2 sein, bei 0,25 = playrate 4 usw. aber das kriege ich ja nicht mit meinen abnehmenden werten zusammen. der custom event, wo ich den timer zeit weniger lassen werd.

    daran knapper ich seit längerem.

    ganz schön langer text geworden..


    wenn ihr tips, änderungs/verbesserungsvorschläge habt oder der code einfach stümperhaft gebaut worden ist, schreibt es mir bitte.