Warum kann ich Random nicht nutzen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallihalo,

Du hast hier im Grunde zwei Fehler, wobei einer ein Folgefehler ist.

1.
Ohne genauere Angabe nutzt erstmal standardmäßig die Random( ) Klasse aus der UnityEngine. Diese wird oben mit "using UnityEngine;" automatisch bei jedem Script in deinem Spiel eingebunden und hat die höchste Priorität bei der Suche nach den Klassen die du nutzt. Das kannst du überprüfen indem du einfach mal mit deiner Maus über den Klassennamen in deinem Code gehst. Dann zeigt die das Intellisense von Visual Studio wo die Klasse herkommt.
Du willst aber wahrscheinlich eher die Random( ) Funktion aus dem .NET Framework. Dazu musst du spezifisch angeben wo sich die Klasse genau befindet. Das geht so:

System.Random rand = new System.Random();

Durch das "System." vor der Klasse Random( ) zeigst du dem Compiler genau wo er nach einer Random( ) Klasse suchen soll, bzw. in welcher Bibliothek.

2.
Zudem ist die Random( ) Klasse aus der UnityEngine im Gegensatz zu der aus dem .NET Framework auch noch "static". Das bedeutet sie ist ohne das Erzeugen eines Objektes nutzbar. Dementsprechend sagt dir dein Compiler hier auch das du von der statischen Klasse Random( ) keine Instanz mit "new" erzeugen kannst.

Ich hoffe das dir das weiterhilft. Falls du mit den Begriffen Bibliothek, Objekte, Instanzen und Funktionen nicht viel anfangen kannst empfehle ich dir zunächst C# Grundkurse zu machen um die Basics zu lernen. Die UnityEngine ist für komplette Programmier-Neulinge ungeeignet, weil sie die Grundkenntnisse voraussetzt.

LG Knom

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾

Klar wird sie erkannt. Der Compiler sagt dir, dass man von einer statischen Klasse keine Instanz anlegen kann.

Die Klasse Random ist statisch. Statische Klassen werden automatisch in Speicher geladen, wenn sie verwendet werden und existieren auch nur ein mal global und geteilt für alle.

Du brauchst also gar nicht "new Random()" machen. Du kannst direkt auf die Methoden zugreifen, die in Random definiert sind:

Random.Range(2, 5); // zufälliges float zwischen 2 und 5 

Hier mehr: https://docs.unity3d.com/ScriptReference/Random.html

Die C#-Standardbibliotheks-Klasse Random funktioniert anders als die von Unity. Vielleicht meinst du die und willst diese nutzen?

Google die Fehlermeldung, dann findest du die Lösung. Hier: https://stackoverflow.com/a/69115961/10686377

C# verwendet beim "new Random()" die Klasse UnityEngine.Random, da du die UnityEngine importest. Du willst jedoch System.Random.

Also folgenden Import ergänzen, um dem Compiler klarzustellen, dass du System.Random willst:

using Random = System.Random;

Oder alternativ einfach im Code immer "System." davor schreiben:

... = new System.Random();
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf