Unity GameObject deaktivieren?

Ich habe ein Einstellungsmenü. Wenn ich in dieses Menü komme, möchte ich das, dass Panel sound sichtbar wird und das Panel keybinds unsichtbar. Das Problem ist allerdings, dass es nicht funktioniert. Es funktioniert nur wenn ich zB. auf den Button Sound oder Keybinds drücke, dann wird das eine sichtbar und das andere unsichtbar. (Wenn ich auf den Button Sound klicke, dann wird show_hide_sound() ausgeführt).

Allerdings werden mir so, am Anfang beide Panels angezeigt, obwohl ich bei der start() funktion das eine "deaktiviere".

Was könnte da der Fehler sein?

public GameObject sound;
public GameObject keybinds;

public int sound_zahl = 1;
public int keybind_zahl = 0;

void start()
   {
       keybinds.SetActive(false);
       sound.SetActive(true);
   }
public void show_hide_sound()
   {
       keybind_zahl = 0;
       if (sound_zahl == 0)
       {
           sound.SetActive(true);
           keybinds.SetActive(false);
           sound_zahl++;
       }
   }

public void show_hide_keybinds()
   {
           sound_zahl = 0;
           if (keybind_zahl == 0)
           {
               keybinds.SetActive(true);
               sound.SetActive(false);
               keybind_zahl++;
           }
       }
Computer, programmieren, Unity
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
Wie behebe ich in Unity den Fehler CS1061 ('Player' does not contain a definition for 'GetPosition' ...)?

Ich programmiere erst seit ein paar Wochen und habe mithilfe von YouTube und dem Internet mich durch Stunden des Codens und ähnlichem geboxt.

Doch nun, nachdem ich mein erstes wirkliches Projekt gestartet habe, stoppt mich nun der Fehler

CS1061:Assets/LevelGenerator.cs(28,45): error CS1061: 'Player' does not contain a definition for 'GetPosition' and no accessible extension method 'GetPosition' accepting a first argument of type 'Player' could be found (are you missing a using directive or an assembly reference?).

Es wäre superduper megamäßig cool, wenn sich jemand meganettes meinen Code ansehen könnte, um mir zu sagen was mein Fehler ist.

Dankeschön an jeden, der sich die Zeit nimmt, um mir zu helfen. Dankeschön. 😃

Hier nun mein Code (er soll eine unendliche Welt generieren):

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

public class LevelGenerator : MonoBehaviour {
  private const float PLAYER_DISTANCE_SPAWN_LEVEL_PART = 200f;

  [SerializeField]
  private Transform levelPart_1;

  [SerializeField]
  private Transform levelPart_Start;

  [SerializeField]
  private Player player;

  private Vector3 lastEndPosition;

  private void awake()
  {
    lastEndPosition = levelPart_Start.Find("EndPosition").position;
    int startingSpawnLevelParts = 5;

    for (int i = 0; i < startingSpawnLevelParts; i++)
    {
    }
  }

  private void Update()
  {
    if (Vector3.Distance(player.GetPosition(), lastEndPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART)
    {
      // Spawn another level part
      SpawnLevelPart();
    }
  }

  private void SpawnLevelPart()
  {
    Transform lastLevelPartTransform = SpawnLevelPart(lastEndPosition);
    lastEndPosition = lastLevelPartTransform.Find("EndPosition").position;
  }

  private Transform SpawnLevelPart(Vector3 spawnPosition)
  {
    Transform levelPartTransform = Instantiate(levelPart_1, spawnPosition, Quaternion.identity);
    return levelPartTransform;
  }
}

PS.: Danke an jeden, der hilft oder sich das hier auch nur wenigstens durchliest. 😃

programmieren, Unity

Meistgelesene Beiträge zum Thema Unity