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

28.01.2014, 18:29

Unity: Schalter(Tor öffnen) programmieren [Anfänger]

Hallo zusammen,

Ich möchte gerne mit unity ein 2d spiel erstellen. Leider hab ich noch nie mit c# gearbeitet und komme daher bei der programmierung von einem Schalter, der ein Tor öffnen soll nicht weiter. Die Animationen habe ich schon erstellt, aber jetzt schaffe ich es nicht, dass wenn ich den Schalter drücke, dass dann auch die Tür aufgeht. Ich habe es mit Component.SendMessage("tueroeffnen"); probiert, aber dann spuckt er mir die compilermeldung:


error CS0120: An object reference is required to access non-static member `UnityEngine.Component.SendMessage(string, object, UnityEngine.SendMessageOptions)'


Das was mir also Probleme bereitet ist, dass die scripte sich auf anderen objekten befinden und eine referenz bruachen. Das bekomm ich nicht hin.


Hier noch meine 2 scripte:


Der Schalter:


C#-Quelltext

1
2
3
4
5
using UnityEngine;using System.Collections;
public class Trigger : MonoBehaviour {
    bool open= false;
    void OnTriggerStay()    { if (Input.GetKeyDown("e")) {                  if (!open) {                                                            animation ["trigger"].speed = 1;    animation.Play ();      open = true;
                    } else {                            animation ["trigger"].normalizedTime = 1;    animation ["trigger"].speed = -1; animation.Play ();    open = false;                                          }    }  }}




und die türanimation:


C#-Quelltext

1
2
3
4
5
6
using UnityEngine;using System.Collections;
public class opendoor : MonoBehaviour {

    public void oeffnen () {
        animation ["gate"].normalizedTime = 1  animation ["gate"].speed = 1; animation.Play (); }
    void schliessen () {                animation ["gate"].normalizedTime = 1; animation ["gate"].speed = -1;    animation.Play (); }}



Ich würde mich sehr über Hilfe freuen. :D

Joelle

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

28.01.2014, 18:55

Die Scripte eines Objekts werden als Komponente hinzugefügt. Versuchs mal mit door.GetComponent<opendoor>().ChangeStatus();
Wobei "door" das Tranform der Tür sein sollte. Der Zustand ob die Tür geöffnet ist oder nicht sollte nur an einer Stelle gespeichert und verwaltet werden. Daher würde ich die "oeffnen/schließen" Methoden durch einen einfachen Statuswechselbefehl ersetzen, der sich selbst darum kümmert ob die Tür geöffnet oder geschlossen wird.

Allerdings stellt sich mir die Frage, wieso du das nicht in einem Script erledigst.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

28.01.2014, 19:05

Vielen Dank für die Antwort. Ich werde es gleich ausprobieren.
Nunja, ich habe je zwei unterschiedliche Objekte, die unterschiedliche Animationen haben. Ich wüsste nicht, wie ich dass dann in einen Script packen kann. Aber wie in der Überschrift angedeutet. Ich bin in unity noch blutiger Anfänger und hab bisher nur Java in der Schule gelernt! :D

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

28.01.2014, 19:17

Wenn du einen Schalter an der Wand hast wäre es doch besser, wenn man diesen nur betätigen kann, wenn man ihn ansieht.
Was sind das für Schalter? Eher Elektronisch oder Mechanisch? Wäre es von Vorteil, die Animation der Schalter zu Synchroniseren? Du wirst ja in der Regel zwei Schalter pro Tür haben :vain:
Sind die Schalter Childs von der Tür oder unabhängig?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

28.01.2014, 19:32

Zur verdeutlichung ein Bild:
Also zwei unabhängige Objekte. Wenn man in dem Triggersteht und "e" drückt soll sich zum einen der Schalterumlegen und zum anderen die Tür öffnen:

http://www.directupload.net/file/d/3516/sm7mcerb_png.htm

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

28.01.2014, 20:00

Ups sorry, bin von einer Art FPS/TPS ausgegangen.
Baust die die Maps im Editor als Scenen zusammen?
Wenn ja ist es ziemlich einfach. Du gibst dem Schalter ein "public tranform door;", dort kannst du über den Inspektor die Tür für den Schalter hereinziehen. Dann kannst du mit GetComponent auf das Script in der Tür zugreifen, ihr Mitteilen, dass sie ihren Status ändern soll und dir anschließend die Information holen, ob die Tür geöffnet ist oder nicht. Ein und den selben Zustand an zwei verschiedenen Orten zu speichern geht fast immer schief.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige