Warum kann ich den Typ "InputManager" in Unity nicht nutzen ohne Error?

Hallo an alle,

ich bin sehr neu im Bereich Spieleentwicklung mit Unity und möchte ein simples Spiel programmieren, in dem man verschiedene Räume gestalten kann. also hab ich mir ein Tutorial herausgesucht ( https://www.youtube.com/watch?v=l0emsAHIBjU&list=PLcRSafycjWFepsLiAHxxi8D_5GGvu6arf ) in dem dies erklärt wird. Bei 3:47 benutzt er den Typ "InputManager" im zweiten SerializeField.

Wenn ich jedoch das Script so kopiere wie er es im Video schreibt, zeigt mir Unity einen Fehler bei "InputManager" an. Da er im Video sagt, dass er das alte Input System nutzt hab ich dieses auch eingestellt.

Da ich nicht wirklich viel Ahnung von dem habe was er da schreibt, hab ich im Internet nach einer Lösung gesucht, doch scheinbar nutzt niemand diesen Typ. Vielen Dank im Voraus für die Antwort

P.S.: Ich habe ein Bild von Visual Studio eingefügt in dem auch der Error zu sehen ist.

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


public class PlacementSystem : MonoBehaviour
{
    [SerializeField]
    private GameObject mouseIndicator;
    [SerializeField]
    private InputManager inputManager;


    private void Update()
    {
        Vector3 mousePosition = inputManager.GetSelectedMapPosition();
        mouseIndicator.transform.position = mousePosition;
    }
}
Bild zu Frage
Software, C Sharp, Code, Error, Fehlerbehebung, Programmiersprache, Spieleentwicklung, Unity 3D, Visual Studio, Fehlermeldung, input, Unity
Was ist falsch mit diesem Script (Unity, C#)?

Hallo,

ich bin im Moment dabei, mir selbst Unity bei zu bringen. Wie man sieht habe ich aber Probleme.

Was ich machen möchte ist eigentlich recht simple - Ich möchte eine Intro-Sequenz am Anfang des Spiels haben, die 3 Texte nacheinander Visible macht und dann am Ende kann man dann drücken um das Spiel zu starten, sprich den Intro Frame unsichtbar zu machen. Ich habe aber nur Probleme mit dem "wait" Befehl, da dieser hier komischerweise sehr unnötog kompliziert gemacht wurde. Anstatt eines einfachen "wait()-Befehls" oder so muss man ja irgendwas mit diesen "IEnumeratorn" machen. Ich habe mir auch schon Tutorials angeschaut, komme hier aber nicht zu irgendeinem guten Ergebnis, sobald ich die wait Funktion nutze.

Kennt sich hier vielleicht irgendjemand aus? Wäre sehr cool wenn ihr mir helft.

Nur zu Info: Ich bin kein Profi, also bitte hatet mich nicht wenn es sehr offensichtlich ist oder so.

Hier mein Script:

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;

public class Script1 : MonoBehaviour
{
  public GameObject Intro;
  public GameObject StartText;
  public GameObject Text1;
  public GameObject Text2;
  public GameObject Text3;
  public bool IsEnabled = false;
   
  // Start is called before the first frame update
  void Start()
  {
    Text1.SetActive(false);
    Text2.SetActive(false);
    Text3.SetActive(false);
    StartText.SetActive(false);
    Initialise();
  }

  IEnumerator Initialise()
  {
    Text1.SetActive(true);
    yield return new WaitForSeconds(2f);
    Text2.SetActive(true);
    yield return new WaitForSeconds(2f);
    Text3.SetActive(true);
    yield return new WaitForSeconds(2f);
    StartText.SetActive(true);
    IsEnabled = true;
  }

  // Update is called once per frame
  void Update()
  {
    if (IsEnabled == true)
    {
       
      if (Input.GetKeyDown(KeyCode.Mouse0))
      {
        Intro.SetActive(false);
        IsEnabled = false;
      }
    }
  }
}

Hier nochmal als Bild aus Visual Studio falls es jemand braucht:

Bild zu Frage
C Sharp, Code, Programmiersprache, Spieleentwicklung, UI, Unity 3D, Unity
Könnt ihr mir bei meinem Skript helfen?

Hallo, ich habe die letzten Stunden ein Skript programmiert, aber es funktioniert nicht. Mir wird GetComponent<ShootingAi> falsch angezeigt. Die letzten Male hat es noch funktioniert, aber jetzt nicht mehr.

Hier ist das Skript. Der Fehler ist bei // RayCast:

using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;
using TMPro;

public class GunSystem : MonoBehaviour
{
  // Werte
  public int damage;
  public float timeBetweenShooting;
  public float spread;
  public float range;
  public float reloadTime;
  public float timeBetweenShots;
  public int magazineSize;
  public int bulletsPerTap;
  public bool allowButtonHold;
  private int bulletsLeft;
  private int bulletsShot;

  // Bool
  bool shooting;
  bool readyToShoot;
  bool reloading;

  // Referenz
  public Camera fpsCam;
  public Transform attackpoint;
  public RaycastHit rayHit;
  public LayerMask whatIsEnemy;

  // Grafik
  public GameObject muzzleFlash;
  public GameObject bulletHoleGraphic;
  public float camShakeMagnitude;
  public float camShakeDuration;
  public TextMeshProUGUI text;

  private void Awake()
  {
    bulletsLeft = magazineSize;
    readyToShoot = true;
  }

  private void Update()
  {
    MyInput();
    text.SetText(bulletsLeft + "/" + magazineSize);
  }

  private void MyInput()
  {
    if (allowButtonHold)
    {
      shooting = Input.GetKey(KeyCode.Mouse0);
    }
    else
    {
      shooting = Input.GetKeyDown(KeyCode.Mouse0);
    }

    if (Input.GetKeyDown(KeyCode.R) && bulletsLeft < magazineSize && !reloading)
    {
      Reload();
    }

    // Shoot
    if (readyToShoot && shooting && !reloading && bulletsLeft > 0)
    {
      bulletsShot = bulletsPerTap;
      Shoot();
    }
  }

  private void Shoot()
  {
    readyToShoot = false;
    // Spread
    float x = Random.Range(-spread, spread);
    float y = Random.Range(-spread, spread);

    // Calculate Direction with Spread
    Vector3 direction = fpsCam.transform.forward + new Vector3(x, y, 0);

    // RayCast
    if (Physics.Raycast(fpsCam.transform.position, direction,  out rayHit, range, whatIsEnemy))
    {
      Debug.Log(rayHit.collider.name);

      if (rayHit.collider.CompareTag("Enemy"))
      {
        rayHit.collider.GetComponent<ShootingAi>().TakeDamage(damage);
      }
    }

    // Graphics
    Instantiate(bulletHoleGraphic, rayHit.point, Quaternion.Euler(0, 180, 0));
    Instantiate(muzzleFlash,attackpoint.position, Quaternion.identity);

    bulletsLeft--;
    bulletsShot--;

    Invoke("ResetShot", timeBetweenShooting);

    if (bulletsShot > 0 && bulletsLeft > 0)
    {
      Invoke("Shoot", timeBetweenShots);
    }
  }

  private void ResetShot()
  {
    readyToShoot = true;
  }

  private void Reload()
  {
    reloading = true;
    Invoke("ReloadFinished", reloadTime);
  }

  private void ReloadFinished()
  {
    bulletsLeft = magazineSize;
    reloading = false;
  }
}

Ich komme echt nicht mehr weiter und bräuchte etwas Hilfe.

C Sharp, Visual Studio, Unity
An alle C# & Visual Studio Programmierer?

Hey Developers,

hier mal etwas Hate mit einer wichtigen Frage.

Ich versuch zurzeit ASP.Net Core mit C# für Web Backend zu lernen. Ich kann bisher HTML, CSS, JavaScript, React, Python (Django) und etwas Java (Spring Boot) sowie etwas C++ (Arduino).

Das war alles ganz entspannt zu lernen, aber C# mit Visual Studio gibt mir den Rest, ich schaffe es einfach nicht ein Projekt zu erstellen.

Mein Problem dabei ist, dass alle Dokus und YT Videos auf "vorgefertigte" Projektvorlagen setzten, allerdings schein Microsoft durchgehend an der UI von Visual Studio und an den Vorlagen etwas zu ändern und das macht mich nach meinem 20. Anlauf wahnsinnig. Egal welches Video ich anschauen (selbst wenn es nur 6 Monate alt ist) das komplette Projekte hat im Video eine ganz andere Struktur (und ja ich habe genau die selbe Vorlage mit der selben Version von .NET) und wenn ich halt keine Ahnung von der Umgebung habe kann ich das auch schlecht irgendwie nachbauen.

Daher mal ne Frage: Mach ich hier etwa irgendwas falsch (ne falsche Einstellung im Installer) oder ändert Microsoft wirklich alle paar Monate etwas an der Umgebung oder an Visual Studio?

Ich stelle mir das später auch einfach nur nervig vor, wenn man mal die Sprache & Umgebung kann, aber bei jedem neuem Projekt eine andere Projektstruktur hat.

Nutzt ihr die Vorlagen überhaupt, oder macht das einfach nur jeder, um seine Videos einfacher zu halten?

Erstellt ihr bei einem neuem Projekt einfach ein leeres .NET Projekt und erstellt dort selbst die Grundstruktur, oder verwendet ihr wirklich die vorgefertigten Projekte wie z.B. "React and ASP.NET Core" (welche euch eine Wetter-Seite erstellt) und löscht dann erstmal sämtlichen Code von der Wetter-Seite aus den Dateien und fangt dann mit eurem Projekt an?

ASP.NET, C Sharp, Programmiersprache, Visual Studio
MySQL: Fehlerhafte Suchanfrage?

Hallo,

ich stehe vor einer Herausforderung mit einer Windows Forms-Anwendung, die ich entwickelt habe, um Tageszeitraumstatistiken für Benutzer anzuzeigen. In dieser Anwendung gibt es ein Formular mit dem Namen TagesZeitraumStatistik, das darauf ausgelegt ist, Benutzern ihre Umsätze basierend auf ihnen zugewiesenen PIDs (Produkt-IDs) anzuzeigen.

Jedoch stieß ich auf ein Problem: Das Programm lädt nicht alle PIDs korrekt. Insbesondere scheinen einige Unter-PIDs übersprungen zu werden.

Bei der Fehlersuche mittels Debugging und Setzen von Breakpoints konnte ich beobachten, dass initial alle PIDs korrekt erfasst werden. Allerdings überspringt das Programm im weiteren Verlauf bestimmte PIDs, ohne dass ein offensichtlicher Grund dafür erkennbar ist. Leider komme ich bei dem Problem nicht wirklich weiter. Vielleicht kann mir ja hier jemand helfen.

Hier die Codeausschnitte:

public TagesZeitraumStatistik(string username, bool isAdmin, List<string> userPIDs)
{
  InitializeComponent();
  InitializeDataGridView();
  FillYearComboBox();

  this.username = username;
  this.isAdmin = isAdmin;
  this.userPIDs = userPIDs;
  this.Load += new EventHandler(TagesZeitraumStatistik_Load);

  monthCalendar1.DateSelected += MonthCalendar1_DateSelected;
  comboBoxYear.SelectedIndexChanged += ComboBoxYear_SelectedIndexChanged;
  printDocument1.PrintPage += new PrintPageEventHandler(PrintDocument1_PrintPage);

  // TextBox für den PID-Filter erstellen und konfigurieren
  textBoxPidFilter = new TextBox();
  textBoxPidFilter.Location = new Point(10, 10);
  textBoxPidFilter.Size = new Size(150, 20);
  this.Controls.Add(textBoxPidFilter);

  // LoadData-Methode aufrufen, um die Daten zu laden
  LoadData();
}

private void LoadData(DateTime? startDate = null, DateTime? endDate = null, string pidStartsWith = null)
{
  try
  {
    List<string> pidFilterList = new List<string>();

    if (!string.IsNullOrEmpty(pidStartsWith))
    {
      pidFilterList.Add(pidStartsWith);
    }

    DataTable statistikData = dbManager.GetTageszeitraumStatistikData(startDate, endDate, pidFilterList, userPIDs);
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = statistikData;
    UpdateTotalSales(statistikData);
    UpdateSalesLabel(startDate, endDate);
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }
}

public DataTable GetTageszeitraumStatistikData(DateTime? startDate = null, DateTime? endDate = null, List<string> pidPrefixes = null, List<string> userPids = null)
{
  DataTable dt = new DataTable();

  using (MySqlConnection conn = new MySqlConnection(connectionString))
  {
    try
    {
      conn.Open();
      string query = @"
        SELECT Datum, FreierText1 AS PID, Name AS Nachname, EuroNetto, Belegnummer
        FROM BELEG 
        WHERE 1=1";

      if (startDate.HasValue)
      {
        query += " AND Datum >= @StartDate";
      }

      if (endDate.HasValue)
      {
        query += " AND Datum <= @EndDate";
      }

      if (pidPrefixes != null && pidPrefixes.Any())
      {
        query += " AND (";

        for (int i = 0; i < pidPrefixes.Count; i++)
        {
          query += $"FreierText1 LIKE @Pid{i}";

          if (i < pidPrefixes.Count - 1)
          {
            query += " OR ";
          }
        }

        query += ")";
      }

      if (userPids != null && userPids.Count > 0)
      {
        string pidsCondition = string.Join(",", userPids.Select(pid => $"'{pid}'"));
        query += $" AND FreierText1 IN ({pidsCondition})";
      }

      using (MySqlCommand cmd = new MySqlCommand(query, conn))
      {
        if (startDate.HasValue)
        {
          cmd.Parameters.AddWithValue("@StartDate", startDate.Value.Date);
        }

        if (endDate.HasValue)
        {
          cmd.Parameters.AddWithValue("@EndDate", endDate.Value.Date);
        }

        if (pidPrefixes != null && pidPrefixes.Any())
        {
          for (int i = 0; i < pidPrefixes.Count; i++)
          {
            cmd.Parameters.AddWithValue($"@Pid{i}", $"{pidPrefixes[i]}%");
          }
        }

        using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
        {
          da.Fill(dt);
        }
      }
    }
    catch (MySqlException ex)
    {
      throw new Exception($"Fehler beim Abrufen der Daten: {ex.Message}", ex);
    }
  }

  return dt;
}
C Sharp, Code, Datenbank, MySQL, Programmiersprache, Visual Studio, Algorithmus
Statische Interface Member?

Hallo,

Ich habe mal einwenig im Code der .NET-Standart Bibliothek gestöbert und bin dabei auf dieses Interface gestoßen

//
// Zusammenfassung:
//     Defines a mechanism for parsing a string to a value.
//
// Typparameter:
//   TSelf:
//     The type that implements this interface.
public interface IParsable<TSelf> where TSelf : IParsable<TSelf>?
{
    //
    // Zusammenfassung:
    //     Parses a string into a value.
    //
    // Parameter:
    //   s:
    //     The string to parse.
    //
    //   provider:
    //     An object that provides culture-specific formatting information about s.
    //
    // Rückgabewerte:
    //     The result of parsing s.
    //
    // Ausnahmen:
    //   T:System.ArgumentNullException:
    //     s is null.
    //
    //   T:System.FormatException:
    //     s is not in the correct format.
    //
    //   T:System.OverflowException:
    //     s is not representable by TSelf.
    static abstract TSelf Parse(string s, IFormatProvider? provider);
    //
    // Zusammenfassung:
    //     Tries to parse a string into a value.
    //
    // Parameter:
    //   s:
    //     The string to parse.
    //
    //   provider:
    //     An object that provides culture-specific formatting information about s.
    //
    //   result:
    //     When this method returns, contains the result of successfully parsing s or an
    //     undefined value on failure.
    //
    // Rückgabewerte:
    //     true if s was successfully parsed; otherwise, false.
    static abstract bool TryParse([NotNullWhen(true)] string? s, IFormatProvider? provider, [MaybeNullWhen(false)] out TSelf result);
}

Kommt es nur mir so vor oder kommt es euch auch einfach falsch vor das ein Interface statische und abstrakte Member vorschreibt und dazu noch das der abstrakte Member statisch ist (Wenn ich versuche einen statischen Member einer Klasse als abstrakt zu deklarieren kommt ein Compilerfehler).

Falls jemand eine Idee hat wozu das gut sein kann, dann bitte eine Antwort schreiben.

C Sharp, dotNet, Programmiersprache
Warum ist C# ziemlich gewöhnungsbedüftnigt?

Hallo, ich lerne in der Schule C# und verstehe es immer noch nicht wirklich nach 3 Jahren. Im Unterricht sind sowieso nur wenige bei mir wirklich gut mit der Sprache vertraut und werden auch bei diesen Fach logischerweise maturieren.

Die anderen sehen ein Grund nach der Matura niemals etwas mit Programmieren zu tun zu haben im Studium. Ich denke noch nach, da ich nach der Matura wahrscheinlich ein andere Sprache lernen möchte wie Python (habe zum Glück Zeit wegen Zivildienst), da die Sprache zu C# ähnlich aber etwas einfacher ist. Jedoch habe ich von einem Professor erzählt bekommen, dass wenn man Programmieren studieren möchte, dass man überall positiv sein muss (sonst schafft man das Semester und Studium nicht) und die Tests daraus bestehen, mit einem Schreiber und Papier ein Programm zu schreiben.

Wir verwenden dort Visual Studio 2019 oder 2022 und machen zurzeit Windows Forms mit ADO.NET und GDI. Wir haben auch Basics, Objektorientiertes Programmieren und Algorithmen gelernt, aber die Aufgaben, die wir bekommen haben, haben wir nie schnell verstanden und der Professor will die Aufgabe so schnell wie möglich fertig haben.

Ich merke auch besonders, dass man hier kein Programmieren lernt, sondern dass man sich den Stoff hineinhämmert und die Mitarbeit ist der Person nicht wichtig, sondern nur die Testnote zählt, wo man erlaubt wird, dass man alle Programmier Aufgaben auf eine Mappe ausdrucken darf.

Ich finde das auch schade, weil ich würde schon gerne Sachen programmieren können und vor Dezember 2022 hätte ich auch das Programmieren fast aufgegeben.

Schule, Programmierer, programmieren, C Sharp, Programmiersprache, Visual Studio

Meistgelesene Fragen zum Thema C Sharp