Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Djeurissen

unregistriert

1

29.04.2012, 18:49

[C#] Variablen werden zu Namen der Klasse hinzugefügt.

Hallo,

ich benutze Unity 3D mit C# und bin dadrin noch ziemlicher Anfänger, spiele aber schon gerne mit den mir gegebenen Mitteln rum.
Ich wollte nun einen einfach Tastendruck abfragen.

Allerdings wird mir bei bei diesem Skript

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using UnityEngine;
using System.Collections;


public class ErstesSkript : MonoBehaviour {
    bool test = false;
    
    void Start () {
    
    }
    
    void Update () {
    if (Input.GetKeyDown (KeyCode.UpArrow)){
        if (test = false){
        Debug.Log ("Du drückst gerade die Pfeiltaste Hoch :D");
        test = true;
        
        }
    }
    
    }
}


folgende Fehlermeldung angezeigt:
"Assets/Skripte/Erstes Skript.cs(6,14): warning CS0414: The private field `ErstesSkript.test' is assigned but its value is never used"

Zudem kann ich das Skript zu keinen Objekten in Unity3D hinzufügen, da mir sonst das hier gesagt wird (und ja ich weiß was da steht^^):
Cant add Script

Can't add Script behaviour Erstes Skript. The Scripts
file name does not match the name of the class
defined in the script!

Die 1 Fehlermeldung ist nicht schlimm, aber sie erklärt warum die 2 Fehlermeldung entsteht. Man kann dem Boolian jeden beliebigen Namen geben und es passiert immer das gleiche nur mit dem anderen Namen. Das selbe ist bei Int, String, usw.. Es nützt auch nichts wenn ich ein neues Skript erstelle es passiert immer das selbe, dabei hat es mal funktioniert. Aber wenn ich nun mein funktionierendes Skript einfüge, passiert das selbe. Ich verstehe nicht was ich kaputt gemacht habe.

Und ja ich weiß, man sollte nur 1 Frage pro Thread machen, aber 3 Threads aufzumachen ist wohl eher Spam :pinch: ...
Naja, ich lerne zwar C# allerdings habe ich bis jetzt nichts gefunden wo man die Befehle findet um in C# zb. auf ein Objekt in Unity3D zuzugreifen...
Zudem schaffe ich es nicht auf Klassen zuzugreifen. Mir wurde beigebracht das ich einfach nur das hier eingeben muss :

C#-Quelltext

1
NamederKlasse Test = new NamederKlasse();

Allerdings klappt das bei mir nicht wirklich :( .

Ich hoffe mir kann einer helfen und das meine Fragen nicht viel zu blöd sind ;( .

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Djeurissen« (29.04.2012, 19:00)


2

29.04.2012, 19:12


"Assets/Skripte/Erstes Skript.cs(6,14): warning CS0414: The private field `ErstesSkript.test' is assigned but its value is never used"


Ist nicht schlimm, heißt nicht anderes als das du unnötige Variablen im Quelltext hast. Der fehler sagt aber auch aus das die Variable nur Zugewiesen aber nie der eigentliche Wert abgefragt wird, dass liegt daran das du in deiner If Abfrage eine Zuweisung vornimmst und keinen vergleich.
Zuweisung: '='
Vergleich: '=='


Zudem kann ich das Skript zu keinen Objekten in Unity3D hinzufügen, da mir sonst das hier gesagt wird (und ja ich weiß was da steht^^):
Cant add Script

Can't add Script behaviour Erstes Skript. The Scripts
file name does not match the name of the class
defined in the script!


Die Fehlermeldung sagt eigentlich alles aus was du wissen musst. Deine datei heißt "Erstes Script" und die Klasse in der Datei heißt "ErstesScript" da man in C# keine Klassennamen mit Leerzeichen vergeben darf würde ich dir raten deine Datei in "ErstesScript.cs" umzubennen damit ist das Problem gelöst.
greate minds discuss ideas;
average minds discuss events;
small minds discuss people.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

3

29.04.2012, 19:13

versuche es mal mit

C-/C++-Quelltext

1
if(test == false) 

test = false ist eine Zuweisung. Vergleiche macht man in C# mit ==

PS: Zu spaet ;)

Djeurissen

unregistriert

4

29.04.2012, 19:52

Vielen danke für die schnelle Antwort :).
Hat geholfen, habe nicht gewusst das man keine Leerzeichen benutzen darf. Und das == habe ich ausversehen vergessen und übersehen :S .

Hat den noch einer eine Antwort auf meine 2 letzten Fragen^^? Soll jetzt keine Aufforderung sein, aber ohne eine Lösung komme ich mit meinem Tutorial nicht weiter :D .

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

5

29.04.2012, 20:12

Zudem schaffe ich es nicht auf Klassen zuzugreifen. Mir wurde beigebracht das ich einfach nur das hier eingeben muss :

C#-Quelltext

1
NamederKlasse Test = new NamederKlasse();

Allerdings klappt das bei mir nicht wirklich :( .
Ja, vorsicht. Vom Prinzip her ist das schon nicht verkehrt. Aber es gibt zwei Dinge, die du noch beachten musst:

a) Sichtbarkeiten
b) Namespaces

Zu a), diese werden über das public/internal/private vor dem Klassennamen gesteuert und regeln, von wo aus du auf eine Klasse zugreifen darfst.
Ist deine Klasse nicht public, kannst du von einer anderen Assembly nicht auf diese Klasse zugreifen.

Zu b), Klassen können noch in Namespaces gruppiert werden. Deine Klasse liegt jetzt in keinem Namespace, aber du benutzt schon Klassen aus anderen Namespaces, du importierst nämlich die Namespaces UnityEngine und System.Collections, damit du diese Klassen benutzen kannst, ohne ihren kompletten Namen auszuschreiben. Der komplette Name würde aus Namespace + Klassenname bestehen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Djeurissen

unregistriert

6

29.04.2012, 22:51

Also wenn ich a richtig verstanden habe, muss ich meine "class Haus" einfach nur in "public class Haus" umändern?
Naja und b habe ich nicht wirklich verstanden...

Zudem habe ich wieder den Fehler, das mein Skript wieder nicht vollständig ist... Ich glaube ich stelle mich grade echt blöd an :/

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using UnityEngine;
using System.Collections;

public class Testsktript : MonoBehaviour {
    void Start () { 
    
    }
    
    void Update () {
    Haus MeinHaus = new Haus();
    }
}

public class Haus
{
    int i = 1;  
    
}

Werbeanzeige