Jump to content
Unity Insider Forum

Globale Variablen


Sir_Mathew

Recommended Posts

Hallo,

bin neu in Unity und probiere noch rum.

Aus 3D Gamestudio kenne ich, das man Scripte in anderen Scripten einbinden kann und man somit ganz leicht Variablen von überall zugreifen kann.

Versuche das gerade in Unity, aber denke das es so wie ich es denke, garnicht geht. Hoffe da auf eine kleine Hilfe

Script 1:

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

public class Main : MonoBehaviour
{
    void Update()
    {
        int i_global_walk = i_global_walk+34;

        Debug.Log(i_global_walk);
    }
}

Script 2:

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

public class Globale_Variablen : MonoBehaviour
{
    int i_global_walk = 0;
}

---------------------

Also ich dachte mit using Script hab ich die möglichkeit auf eine Variable aus dem zweiten Script zuzugreifen.

Oder Globale_Variablen.i_global_walk  wäre auch was feines.

vieleicht habt ihr Lösungen dafür?

1 Script was für alle Variablen, Strings etc. ist doch das beste, alles zentral ebend.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

vor 28 Minuten schrieb Sir_Mathew:

1 Script was für alle Variablen, Strings etc. ist doch das beste, alles zentral ebend.

Ne... das ist das schlimmste! :) (Also.. ehrlich jetzt)

Ganz allgemein gilt beim Programmieren: Dinge sollten so wenig wie möglich von allen anderen Dingen wissen. Stell dir vor, du hast eine Tür, die nicht im richtigen Moment aufgeht. Wäre es dann nicht besser, wenn du nur die Tür nach dem Fehler durchsuchen müsstest, als dass potentiell der gesamte Rest der Codebase noch verantwortlich sein kann?

"So wenig wie möglich" heißt aber nicht "gar nichts" - Manche Dinge müssen voneinander wissen. Ein Knopf muss wissen, welche Tür er öffnet. Aber wenn man eine Beziehung zwischen zwei Klassen vermeiden kann, dann sollte man das auch tun.

Was also hast du genau vor? Auf die Frage "wie weiß das eine Ding die richtige Sache von dem anderen Ding" gibt es nämlich gleich mehrere Antworten, die alle von Fall zu Fall die beste sein können.

Der Vollständigkeit halber aber in aller Kürze: In C# gibt es das Keyword "static". Damit hebst du die Bindung eines Feldes an Instanzen auf, und es gibt das Feld nur noch einmalig im Programm, an die Klasse selbst gebunden. Wenn du dein i_global_walk also statisch machst, kann jeder andere Teil des Programms über Globale_Variablen.i_global_walk darauf zugreifen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Alles sehr interessant.

Hab noch schnell in einen kindle-buch gewälzt und die beispiele waren etwas verwirrend aber mit

public static int i_global_walk = 0;

hat es dann funktioniert,danke.

Muss wohl nochmal genauer lesen was static und public genau macht. Will das natürlich auch verstehen was da passiert.😄

Das mit walk war ja nur ein Beispiel. Aber ich möchte dennoch alle Variablen, Strings etc. zentral haben und das hat dann nix mit Fehlersuche zu tun.

Ich meine nach deinen Beispiel, muss der Knopf ja schließlich eine Variable z.b. auf true Schalten um die Tür zu öffnen. Und diese Variable kann doch in Globale_Variable 

gespeichert werden.

Die Fehlersuche bleibt auch dann eigentlich nur im Tür/Knopf Script.

Und in diesen Script kommen dann auch alle Resourcen Quellen wie Stings z.b.

STRING* str_gl_taschenlampe="objekt_/lampen_/taschenlampe_1.mdl"; // aus lite-C

so lassen sich sehr einfach Modelle Pfade oder Texturen anpassen usw.

Naja wie gesagt, Unity ist Neuland für mich und vielleicht merk ich den ein oder anderen Fehler noch, kann hier aber nur Positives sehen für die Handhabung dieser Art.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Stunden schrieb Sir_Mathew:

Aber ich möchte dennoch alle Variablen, Strings etc. zentral haben und das hat dann nix mit Fehlersuche zu tun.

Oh doch, das hat es :)

Aber ich habe inzwischen die Erfahrung gemacht, dass Leute meistens selber in den Abgrund schauen müssen, um solche Sachen einzusehen. Ich nehm's dir also nicht übel, wenn du mir das jetzt nicht glaubst :D

vor 8 Stunden schrieb Sir_Mathew:

Und diese Variable kann doch in Globale_Variable 

gespeichert werden.

Geht schon, aber muss halt nicht. Findest du es nicht auch immerhin eleganter (unabhängig von den Spätfolgen), wenn der Knopf zur Tür geht und sie öffnet anstatt dass er zu einem abstrakten Konstrukt läuft, dort irgendetwas ändert das erstmal strukturell nix mit Türen zu tun hat, und die Tür sich das da abholt?

vor 8 Stunden schrieb Sir_Mathew:

so lassen sich sehr einfach Modelle Pfade oder Texturen anpassen usw.

Jo, das geht mit Unity auch - Resources.Load. Benutze ich exakt niemals in meinen Projekten, und das hat auch seine Gründe :)

Aber wie gesagt... bist nicht der erste der da skeptisch ist und erstmal selber ein paar mal auf die Nase fallen muss.

vor 8 Stunden schrieb Sir_Mathew:

Muss wohl nochmal genauer lesen was static und public genau macht. Will das natürlich auch verstehen was da passiert.😄

Im Zweifelsfall immer gerne fragen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 21.12.2020 um 21:45 schrieb Sascha:

Ganz allgemein gilt beim Programmieren: Dinge sollten so wenig wie möglich von allen anderen Dingen wissen. Stell dir vor, du hast eine Tür, die nicht im richtigen Moment aufgeht. Wäre es dann nicht besser, wenn du nur die Tür nach dem Fehler durchsuchen müsstest, als dass potentiell der gesamte Rest der Codebase noch verantwortlich sein kann?

Geniales Beispiel 😆😆 mir fällt es immer sehr schwer mich daran zu halten. Natürlich achte ich sehr darauf immer alles private zu machen was auch private sein sollte. aber solche Referenzen auf andere Objekte benutze ich leider viel zu oft. in meinem aktuellen Projekt (2d Platformer) habe ich z.b. einen Spieler dessen leben (int health) static und public ist damit auch bloß jeder darauf zugreifen kann. zufrieden bin ich damit absolut nicht. Leider weiß ich nie so recht wie ich sowas anstellen soll. oder wie man es allgemein machen sollte. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...