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

1

21.11.2014, 09:51

Unity C# Script Variable

Hallo Leute ich stehe vor dem Problem, dass ich gerne einem Script über den Editor ein Script zuweisen würde. So das ich also eine Variable habe. Dieses Script soll Später dann ausgeführt werden.

DeathStorm

Frischling

Beiträge: 63

Wohnort: Warendorf

Beruf: Fachinformatiker - Anwendungsentwicklung

  • Private Nachricht senden

2

21.11.2014, 10:00

Wenn du in Unity über den Inspektor einem Script das an nem Gameobject hängt, ein Script eines anderen GameObjects hängen möchtest, dann musst du einfach eine Public Variable der anzuhängenden Klasse erstellen und das Gameobject das das Script enthält da rein ziehen. Dann sollte er nur das Script bzw. die Instanz der Klasse verweisen.

Sollte das nicht deine Frage beantworten, dann wäre es super wenn du das genauer formulierst ;)
Besucht meinen neuen Blog auf Weird Mind :)

Neue kreative Köpfe sind immer gern gesehen :thumbsup:

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

21.11.2014, 10:19

DeathStorm hat bereits eine Möglichkeit genannt, die sehr wahrscheinlich auch das ist, was du haben willst. (Allerdings muss es kein public-Member sein, es kann auch ein private-Member mit dem SerializeField-Attribut sein. Letzteres würde ich grundsätzlich empfehlen.)

Je nachdem, was in deinem Fall genau mit "Skript" gemeint ist, könnte es evtl. auch einen anderen Ansatz geben. Bei der oberen Herangehensweise hat man streng genommen nicht einfach nur ein Script (also ein wenig Code, der ausgeführt werden soll), sondern ein Objekt (einen Spieler, einen Feind, ein Stück Mauer, ...), von dem wiederum ein bestimmtes Verhalten angeregt wird.
Wenn allerdings eher das Verhalten des Objekts selbst über die Auswahl des richtigen Codes beeinflusst werden soll, könnte bspw. eine Enumeration für die unterschiedlichen Möglichkeiten angelegt werden oder ggf. der Editor so erweitert werden, dass einem eine Auswahlliste anhand der vorhandenen Klassen (die bestimmte Voraussetzungen erfüllen) erzeugt wird.
Weiterhin gäbe es die Möglichkeit, dass das von dir gewünschte Script dem Objekt angehangen wird und so die richtige Funktionalität aufgerufen wird. (Das Script könnte wieder über Variable zugewiesen oder über GetComponent abgerufen werden. Für letzteren Fall könnte sich das RequireComponent-Attribut eignen.)

Was in deinem konkreten Fall nun geeignet ist, kommt darauf an, was du eigentlich machen möchtest.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

DeathStorm

Frischling

Beiträge: 63

Wohnort: Warendorf

Beruf: Fachinformatiker - Anwendungsentwicklung

  • Private Nachricht senden

4

21.11.2014, 10:25

Sign @Sacaldur

Mehr Input von dir MrTee dann können wir spezifischer helfen ;)
Besucht meinen neuen Blog auf Weird Mind :)

Neue kreative Köpfe sind immer gern gesehen :thumbsup:

5

21.11.2014, 11:08

Ich mag über Unity zur Entwicklungszeit ein Skript einer Variable zuweisen. ABER wenn ich das Skript in das Feld Ziehe geht das nicht.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

21.11.2014, 11:23

MonoBehaviour besitzt die Funktion GetComponent. Damit kannst du dir eine Komponente des Objektes holen. Du hast also dein Objekt/Prefab oder was auch immer. Da ziehst du jetzt beide Skripte drauf. Wenn du von dem einen Script auf das andere zugreifen möchtest kannst du das jetzt über GetComponent machen.
In Script1:

C#-Quelltext

1
2
Script2 script = GetComponent<Script2>();
script.doSomething();

Ich glaube das ist es was du vor hast.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

7

21.11.2014, 11:32

Jein, mit getComponent wusste ich. Ich hatte es anders vor. Habe es nun aber so Gelöst. Danke Sehr euch allen.

DeathStorm

Frischling

Beiträge: 63

Wohnort: Warendorf

Beruf: Fachinformatiker - Anwendungsentwicklung

  • Private Nachricht senden

8

21.11.2014, 12:06

Wie gesagt du kannst es auch direkt über den Inspector mache, Du musst nur in das ScriptFeld das übergeordnete GameObject reiniziehen. Dann zieht er sich nur die Referenz zum Script und nicht komplett zum GameObject.

Die alle Möglichkeiten zum referenzieren auf andere GameObjects:

https://docs.unity3d.com/352/Documentati…me_Objects.html
Besucht meinen neuen Blog auf Weird Mind :)

Neue kreative Köpfe sind immer gern gesehen :thumbsup:

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

21.11.2014, 12:07

Muss das aufgerufene Skript denn überhaupt von Monobehaviour abgeleitet werden? Soll heißen, wird das Skript bei irgendeinem Objekt als Komponente benötigt? Oder stecken da im Endeffekt nur Funktionen drin die von deinem Skript aufgerufen werden sollen?
Interessant wäre ob du auch ohne Unity schon programmiert hast. Diese Skripte sind an sich ja nur Klassen. Du kannst im ersten Skript ja auch einfach eine Instanz des zweiten Skripts erstellen.

edit: DeathStorm ich glaube das Script kommt nicht aus einem anderen Objekt sondern aus dem selben. Und außerdem glaube ich dass das Script an sich nicht mal Komponente von dem Objekt sein muss/soll.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

21.11.2014, 12:20

@MrTree:
Es wäre gut, wenn du auch auf die Beiträge eingehen würdest. Vor allem wäre die folgende Frage wichtig: Was hast du eigentlich vor? _Wofür_ willst du die Zuweisung durchführen?
Du hast eine bestimmte Problemstellung und das Zuweisen eines Scripts ist dein Lösungsansatz. Statt jetzt einfach nur den Lösungsansatz so hinzubiegen, dass es irgendwie funktioniert, wollen wir sehen, ob der Lösungsansatz an sich für das ursprüngliche Problem gut gewählt ist. Dafür brauchen wir Informationen über das ursprüngliche Problem, nicht nur über deinen Lösungsansatz.

Ich habe, wenn auch nicht direkt, gefragt, ob du mit "Script" einfach nur die Quellcode-Datei bzw. die Klasse meinst oder ob du eine konkrete "Instanz" an einem Objekt meinst. Für letzteres hatte bereits DeathStorm eine Möglichkeit genannt, im ersten Fall gäbe es aber auch andere Wege, um das Ziel zu erreichen.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige