Wie kriege ich dieses Unity2D Touch/Swipe-Jump-Movement-Problem gelöst?

Hallo,

ich programmiere zur Zeit ein Unity2D-Spiel jedoch ist gerade ein Problem aufgetreten, welches ich vermutlich nicht allein lösen kann.

Und zwar habe ich in meinem Spiel eine Swipe-Mechanik eingebaut, die mit einem Rigidbody sowie einem Vector2 funktioniert und eine Sprungmechanik, wo der Charakter konstant am Springen ist.

Das Problem ist aber, dass beides mit einem Rigidbody und einem Vector2 nicht/funktioniert. Dies führt dazu, dass, wenn ich die Swipe-Mechanik, der Character so unschön nach unten gezogen wird.

Ich füge mal den Code für ein besseres Verständnis ein:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
  public float jumpForce;
  float currentJumpForce;
  private bool isGrounded;
  Vector2 startPos;
  Vector2 movedPos;
  Vector2 endPos;
  public float speed;
  public Rigidbody2D rb;
  bool isTouch;

  // Start is called before the first frame update
  void Start()
  {
    currentJumpForce = jumpForce;
  }

  // Update is called once per frame
  void Update()
  {
    if (Input.touchCount > 0)
    {
      Touch touch = Input.GetTouch(0);
      
      switch(touch.phase)
      {
        case TouchPhase.Began:
          startPos = touch.position;
          isTouch = false;
          break;
        case TouchPhase.Moved:
          movedPos = touch.position;
          print(movedPos - startPos);
          isTouch = true;
          break;
      }
    }
  }

  void FixedUpdate()
  {
      if (isGrounded) <----- Sprung-Mechanik
      {
        rb.velocity = Vector2.up * currentJumpForce;
        isGrounded= false;
      }

      if (isTouch) <------ Swipe-Mechanik
      {
        if (startPos.x < movedPos.x)
        {
          rb.velocity = new Vector2(speed, 0); <----- Hier muss ich eine x- und y-Achse angeben. Jedoch führt der "0"-Wert dazu, dass der Character nach unten gedrückt wird (sehr langsam nach unten fällt)(Das liegt daran dass die Sprung-Machnik ebenfalls mit einem Rigidbody und Vector2 funktioniert und somit dann der Sprungwert auf "0" gesetzt wird!
        }
        else if (startPos.x > movedPos.x)
        {
          rb.velocity = new Vector2(-speed, 0);
        }

        isTouch = false;
      }
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
      istap = true;
    }
  }

Könnte mir jemand bitte eine Alternative zu der Sprung- oder Swipe-Mechanik schreiben?

PS: PhysicsMaterial2D klappt nicht, da der Charakter immer höher Springt.

Computer, Schule, programmieren, C Sharp, Spieleentwicklung, Unity, Unity2D
C# 2D Array erste Zeile entfernen?

Guten Tag ich bin zurzeit an einem Projekt und die erste zeile soll aus dem Array gelöscht werden.

das ist meine Ausgabe und die erste zeile soll komplett gelöscht werden.

und das ist ein teil meines Codes:

for (int i = 0; i < sArrEinkauf.GetLength(0)-1; i++)
            {
                if (sArrEinkauf[i, 0] == sArrEinkauf[i + 1, 0]) 
                {
                    int summe = 0;
                    int temp = 0;
                    int temp2 = 0;

                    temp = Convert.ToInt32(sArrEinkauf[i, 4]);                     temp2 = Convert.ToInt32(sArrEinkauf[i + 1, 4]);                     summe = temp + temp2;                     sArrEinkauf[i + 1, 4] = summe.ToString();                     sArrEinkauf[i, 0] = "X";                 }

            }             string[,] tmparray = new string[0,0];             string[] temparray = new string[5];             for (int i = 0; i < sArrEinkauf.GetLength(0); i++)             {                 Console.WriteLine("\n");                 for (int j = 0; j < sArrEinkauf.GetLength(1); j++)                 {                                          sArrEinkauf[i, 0] = "A" + sArrEinkauf[i, 0];

                    Console.Write(sArrEinkauf[i, j] + "\t");
                }
            }

Bild zum Beitrag
Computer, Schule, programmieren, Array, C Sharp, Informatik

Meistgelesene Fragen zum Thema C Sharp