Jump to content
Unity Insider Forum

Brighthell96

Members
  • Gesamte Inhalte

    29
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    2

Alle erstellten Inhalte von Brighthell96

  1. Hi, mache gerade für die Weekly Game Jam ein 2d isometic Game mit einem Raster / Grid Movement. und einer tilemap. das Movement vom Boot hab ich mit folgendem Code soweit hinbekommen: void Update() { if(Input.GetKeyDown(KeyCode.LeftArrow)) { transform.position += new Vector3(-0.5f, 0.295f, 0); animator.SetFloat("Horizontal", -1f); animator.SetFloat("Vertical", 0f); } else if(Input.GetKeyDown(KeyCode.RightArrow)) { transform.position += new Vector3(0.5f, -0.295f, 0); animator.SetFloat("Horizontal", 1f); animator.SetFloat("Vertical", 0f); } else if(Input.GetKeyDown(KeyCode.UpArrow)) { transform.position += new Vector3(0.5f, 0.295f, 0); animator.SetFloat("Horizontal", 0f); animator.SetFloat("Vertical", 1f); } else if (Input.GetKeyDown(KeyCode.DownArrow)) { transform.position += new Vector3(-0.5f, -0.295f, 0); animator.SetFloat("Horizontal", 0f); animator.SetFloat("Vertical", -1f); } } aber leider kann das boot aktuell noch wilkürlich über die grasblöcke "laufen" es soll aber nur über wasser fahren können. Wie macht man bei solchen games die collision? wenn es nichtgridbased movement wäre könnt ich einfach einen tilemap colider benutzen aber das ist hier nicht wirklich möglich. vielen dank im vorraus lg Marc
  2. Hi again, oh junge ich weiß nicht so wirklich wo ich anfangen soll mit meiner Frage. Ich habe mich wiedermal dazu breitschlagen lassen ein neues Projekt anzufangen. ein platformer mit ihm als hauptcharakter: dieser Charakter soll in der lage sein, sein schwert (welches er im spielverlauf zu beginn findet) auszurüsten aber auch abzulegen: Anhand dessen ob er das Schwert equipped hat oder nicht soll er zwischen schwertkampf und faustkampf wechseln können. Diese unterscheiden sich nicht nur optisch sondern haben auch teilweise andere Eigenschaften. als Schwerkämpfer kann er z.b. so Zelda like einen Drehangriff machen oder nach vorne Dashen. Im Faustkampf hingegen kann man neben der standart 3teiligen angriffscombo auch Kicks benutzen. so viel zum Konzept aber leider bringt das einige Probleme mit sich von denen ich keine Ahnung habe wie ich sie alle sinnvoll gelöst bekomme: 1. Animation Wie schaffe ich es dass der Spieler das schwert optisch ablegt und wieder ausrüstet? ich habe das Schwert zwar in Aseprite auf einem eigenen Layer gepackt wodurch ich es innerhalb von Aseprite sichtbar und unsichtbar machen kann aber wenn ich eben diese Layer in unity übertragen will müsste ich vermutlich das Schwert als ein eigenes Childobjekt vom Char machen welches dann seine KOMPLETT eigenen animationen parallel zu denen des Hauptchars abspielen müsste was meinen arbeitsaufwand an animationen praktisch verdoppelt. Eine andere Idee wäre vermutlich nicht das Schwert einzeln zu animieren sondern den Spieler komplett die animationen wechseln lassen abhängig davon ob er das schwert an hat oder nicht aber auch hier würde wieder gelten: Doppelter Arbeitsaufwand, Doppelter Code, Doppelte Fehlerquelle, etc. Praktisch ein komplettes moveset mit schwert und eins ohne welches ich dann z.b. mit nem bool hasSword oder was weiß ich toggle. Evtl helfen mir auch Secondary Textures bei dem Problem mit dem ich das Schwert als 2. Texture festlege welches ich dann sichtbar und unsichtbar machen kann. Aber leider es gibt gefühlt garkein Tutorial auf Youtube wie diese Teile genau funktionieren. 2. Logik Das alles ist deckt aber so far nur die animation ab aber noch nicht die logik dahinter. Das behavior des Chars verändert sich ja komplett mit einem Schwert. er hat andere moves, stats, hitzones usw. Wie zur Hölle soll ich das alles in ein Script verpacken? Ich hab mich dazu auch schon online schlau gemacht und ich kam immer wieder zum Konzept von Statemachines zurück mit denen ich das behavior meines chars scheinbar komplett ändern kann wenn gewisse Kriterien erfüllt sind. Das Problem an der Geschichte ist dass die Tutorials die ich über Statemachines gefunden habe mein aktuelles Skilllevel total übersteigen. Ich fühle mich unwohl dabei, Dinge zu nutzen die ich nicht voll und ganz verstehe. Zumal sich ein Freund von mir mal gefühlt das Leben zur Hölle gemacht hat dadurch dass er Statemachines benutzt hat. Bevor ich mir das alles aneigne wüsste ich daher gerne erstmal ob ich Recht habe mit meiner Vermutung dass diese Statemachines eine gute Lösung für mein Problem wären. Evtl habe ich das Konzept auch komplett falsch verstanden und Sie haben andere Anwendungsbereiche. 3. Erweiterbarkeit Das hier aufgezählte Beispiel mit dem Schwert ist zwar bisher das Einzige aber wenn ich später noch andere Waffen/States wie bogen, zauber, oder andere RPG Elemente hinzufügen möchte? Dann stehe ich vor dem gleichen Problem. Am liebsten wäre mir daher wirklich ein "modulares" System dass ich auf weitere Fälle erweitern kann ohne alles neu machen zu müssen. z.B. wenn der Spieler wählen kann zwischen Unbewaffnet, Bewaffnet, Zauber, Fernkampf anhand der Waffe die er trägt. Ich hoffe sehr das erklärt mein Problem ausführlich und es findet sich jemand der mich versteht und eine Lösung für mich hat. ich bin leider nicht so der gute Erklärer darum weiß ich nicht ob ich es ausführlich genug erklärt habe.. der Charakter ist übrigens kostenlos erhältlich: https://rvros.itch.io/ vielen Dank im vorraus Marc
  3. Ich habe meinen Fehler dank dieser Seite hier: https://forum.unity.com/threads/learning-new-inputsystem-when-and-how-is-the-cancelled-callback-used.969501/ endlich funden. Mein Fehler war scheinbar dass ich statt Action Type: "Button" den Action Type: "Pass Through" verwenden musste. ich verstehe nicht so ganz warum aber scheinbar resettet "performed" nicht wenn man Button als action type hat. bei "Pass Through" schon. Aber damit dass passiert muss man statt "Hold" bei Pass Through wohl für den selben Effekt "Slow Tap" benutzen (Siehe Bild). ich werd niemals schlau aus dem Inputsystem... x.x Wollte jedenfalls trotzdem antworten für den Fall der Fälle das das Problem wieder jemand haben sollte.
  4. Ich habe wiedermal meine Probleme mit dem (neuen) Inputsystem wofür ich leider online keine Lösung finde. Also im ernst ich bin aktuell am überlegen das Inputsystem wieder zu wechseln. Weil fürs alte gibt es genügend spezifische Tutorials und Hilfestellungen. Und zwar bin ich aktuell an einem 2D Platformer am arbeiten. Da ich meine Jump performence ein wenig aufpolieren wollte habe ich mir ein paar Tutorials auf YT angeguckt und bin dann bei dem hier: hängen geblieben da mir das Konzept sehr gut gefällt. Nun.. leider benutzt er in seinem Video das alte InputSystem und dadurch kann ich das nicht alles so übernehmen wie ich es gern hätte. Um genau zu sein geht es um diese Stelle: if(rb.velocity.y < 0) { rb.velocity += Vector2.up * Physics2D.gravity.y * (fallMultiplier - 1) * Time.deltaTime; } else if (rb.velocity.y > 0 && !Input.GetButton("Jump")) { rb.velocity += Vector2.up * Physics2D.gravity.y * (lowJumpMutliplier - 1) * Time.deltaTime; } die ich versuche in meinem Projekt einzufügen. Es geht praktisch darum dass wenn man im laufe eines Jumps nicht mehr die Taste zum Springen drückt wird der Jump frühzeitig abgebrochen was einen High-Jump simuliert wenn man die Taste gedrückt hält. Nun aber zu meinem Setup: Wie ihr sehen könnt habe ich eine Action "Jump" mit der "Hold"-Interaction. Dies sollte es mir eigentlich ermöglichen in Folgender Funktion: public void OnJump(InputAction.CallbackContext context) { if (context.started && canMove && isGrounded && !PauseMenu.gameIsPaused && !isDead) { Debug.Log(context.phase); rb.velocity = new Vector2(rb.velocity.x, playerData.jumpForce * Time.deltaTime); } else if(context.canceled && canMove && !PauseMenu.gameIsPaused && !isDead) { Debug.Log(context.phase); rb.velocity += Vector2.up * Physics2D.gravity.y * (15f - 1) * Time.deltaTime; } else if (context.performed && canMove && !PauseMenu.gameIsPaused && !isDead) { Debug.Log(context.phase); } } welche vom folgenden Interface vererbt wird: public class Player : MonoBehaviour, InputManager.IPlayerActions die Methoden zu nutzen: context.started //Wenn Taste gedrückt wird. context.performed //Wenn die "Hold"-Duration von 0.4 sekunden erfüllt wird. context.canceled // Wenn die Taste released wird bevor "performed"erfüllt ist. performed brauche ich in dem Fall nicht. Ich hab nur testweise mal performed Debugged um zu gucken ob es überhaupt ausgeführt wird. So und jetzt zum eigentlichen Problem. Alle 3 States scheinen soweit zu funktionieren. Drücke ich die Taste kommt "started" durch das Debug.Log. Lasse ich sie frühzeitig los kommt "canceled". Lasse ich sie für 0.4 sekunden gedrückt kommt "performed" wie man hier sehen kann: allerdings hab ich nun das weirde Behavior dass die Komplette Aktion "Jump" egal welchen Button, welche Taste ich drücke komplett deaktiviert wird nachdem auch nur 1x die Phase "performed" erfüllt wird. Das bedeutet ich kann ab da nicht mehr Jumpen. Er führt die OnJump Methode scheinbar nicht mehr aus. Aber warum passiert das ? Muss ich die Phase "performed" irgendwie manuell zurücksetzen? oder hab ich evtl die komplett falsche herangehensweise gewählt? Ich bin leider total überfragt. vielen Dank im vorraus LG Marc
×
×
  • Neu erstellen...