C Sharp – die besten Beiträge

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

WPF: DataGridTextColumn basierend auf ViewModel-Eigenschaft ausblenden – wie geht das?

Hallo zusammen,

ich arbeite an einer WPF-Anwendung und habe ein DataGrid, in dem ich eine bestimmte Spalte ausblenden möchte, wenn eine boolesche Eigenschaft (IstPM) im ViewModel true ist.

<DataGridTextColumn Header="Länge"
    Binding="{Binding Laenge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat=N1}"
    Visibility="{Binding IstNichtPM, Converter={StaticResource booleanToVisibilityConverter}}"
    Width="70"/>

Dabei ist IstNichtPM eine bool-Eigenschaft im ViewModel, die true sein sollte, wenn die Spalte sichtbar sein soll.

Ich verwende einen BooleanToVisibilityConverter, der true zu Visible und false zu Collapsed konvertiert.

Problem:

Die Spalte bleibt immer sichtbar oder wird nicht korrekt aktualisiert.

Ich habe auch versucht, es in Code-Behind zu ändern, aber das geht auch nicht, da man kein x-Name geben kann

„Der Wert „colLaenge“ des Name-Attributs kann für das Element „DataGridTextColumn“ nicht festgelegt werden.“

die IstPM und istNichtPM funktioniert aufjedenfall, da ich damit auch Tabs ausgeblendet habe in der Page. Das hat ohne Probleme funktioniert

=>

ausblenden bei IstNichtPM

<TabItem Header="Allgemein" Visibility="{Binding IstNichtPM, Converter={StaticResource booleanToVisibilityConverter}}">

einblenden bei IstPM

<TabItem Header="Allgemein" Visibility="{Binding IstPM, Converter={StaticResource booleanToVisibilityConverter}}">

beim DGV bin ich so langsam echt am verzweifeln.

Hat jemand eine funktionierende Lösung, wie ich eine DataGridTextColumn in WPF dynamisch ausblenden kann?

Bin für jeden Tipp dankbar!

C Sharp, Windows Presentation Foundation

Warum endet die Schleife nicht?

Hallo an Alle!

Ich versuch mich im Moment in Unity da ich großes Interesse am Spiele Entwickeln habe.

Mein Unity Editor hängt sich die ganze Zeit auf, wenn ich eine while-Schleife einbaue. Ich vermute mal, dass die while-Schleife nie endet und sich daher Unity aufhängt.

Was denkt ihr?

Hier noch mein Script-Code:

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UIElements;


public class Movement : MonoBehaviour
{
    public LayerMask ground;
    public float jumpforce = 8f;
    public float accel = 8f;
    public float maxSpeed;
    public bool isGroundTouched = false;
    public Rigidbody2D rb;


    public void Update()
    {


        if (GetComponent<Collider2D>().IsTouchingLayers(ground))
        {
            isGroundTouched = true;
        }
        else{


            isGroundTouched = false;
        }


        if (Input.GetKeyDown(KeyCode.R))
        {
            Jump();
        }


        if (Input.GetKey(KeyCode.D))
        {
            Move(accel);
        }
        else
        {
            while (rb.linearVelocity.magnitude > 0)
            {
                Move(-accel);
            }
        }
        
        if (Input.GetKey(KeyCode.A))
        {
            Move(-accel);
        }
        else
        {
            while (rb.linearVelocity.magnitude > 0)
            {
                Move(accel);
            }
        }
    }
    void FixedUpdate()
    {
        if (rb.linearVelocity.magnitude > maxSpeed)
        {
            rb.linearVelocity = rb.linearVelocity.normalized * maxSpeed;
        }
    }
    public void Move(float direction)
    {
            rb.AddForce(new Vector2(direction, 0));
    }
    public void Jump()
    {
        if (isGroundTouched)
        {
            rb.AddForce(new Vector2(rb.linearVelocity.x, jumpforce));
        }
    }
}

PS. Ich habe nicht viel Erfahrung mit C# doch mit ein paar anderen Programmiersprachen schon. Vor allem mit Objekt-Orientierten habe ich nicht viel Erfahrung.

C Sharp, Unity2D

Meistgelesene Beiträge zum Thema C Sharp