Jump to content
Unity Insider Forum

Umsetzungshilfe


UnityProband

Recommended Posts

Hallo liebe Unity - Freunde!

 

Ich brauche einen Rat bezueglich einer Projektumsetzung unter Unity. Ich versuche mal die grobe Funktionalitaet der Applikatione zu beschreiben. Es soll ein 3D Projekt werden bei der eine virtuelle Umgebung mit 5 virtuellen plazierten Objekte aufgebaut werden. Die Objekte besizen unterschiedliche Animationen, die ich mit dem Unity-Animationseditor umgesetzt habe. Die Idee ist es, dass ich fuer jedes Objekt einen Animator baue, der eine bestimmte Animation umsetzt. Folgendes soll die Applikation lesiten. Wenn ich z.B. auf die Leertaste druecke, dann sollen zufallig zwei Objekte ausgewahlt werde, die sich animeirend auf die virtuelle Kamera zubewegen. Anschliessend sollen jeweil zwei Sounddateien hintereinander abgespielt werden. Wenn diese Soundquellen abgespielt wurden, dann sollen sich die jeweiligen Objekte wieder zurueck bewegen. Ich habe es schon geschafft einzelne Animatoren zu erzeugen, die die einzelnen Animationen beeinhalten. Per Skript erzeuge ich zwei zufaellige Zahlen zwischen1 und 5 fuer die Auswahl der Objekte. Die einzelnen Animatoren haben eine int Variable defineiret, die ich Abfrage, um einzelne Objektanimationen zu starten. Leider funtktioniert das nicht immer, weil ich per Update und Keyboard-Trigger immer gleichzeitig mehrere Werte setze. Waere eine Umsetzung mit Hilfe eiens Triggers eine bessere Alternative

 

Wie wuerdet Ihr das realisiren? Ich druecke z.B. die Leertaste und generiere dabei zwei Zufallszahlen, die anschliessend zwei Objekte zum animieren anregen. Anschliesend sollen diese solange warten bis zwei Sounds abgespielt wurden. Diese Sounds sollen dabei hintereinander abgespielt werden. Dann sollen sich die Objekte wieder zurueck bewegen! Hat Jemand eine Idee? Ueber Vorschlaege waere ich dankbar! :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Willkommen im Forum.

 

So wie du das beschreibst, hört es sich nicht schlecht an. Ich bin mir auch nicht sicher, welche Probleme du hast.

 

Leider funtktioniert das nicht immer, weil ich per Update und Keyboard-Trigger immer gleichzeitig mehrere Werte setze.

Der Satz deutet auf Probleme hin. Hast du ein Stück Code dazu, das wir uns mal anschauen können?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

 

Die Sache ist so, wenn ich jetzt mit C# eine Taste abfrage mit einer if-Klausel , dann setze ichentsprechen eine definierte Variabel, die bei allen Animatoren vorhanden ist. Den Vorgang führe ich aber in einer Update Methode durch! Ab und an wird die Variable aber nicht nur einmal gesetzt, sondern er setzt die emntsprechenden Variablen mehrmals mit Werten. also, z.B. 1 und mit 2, und das willl ich natürlich vermeiden!

 

VG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Willkommen im Forum.

 

So wie du das beschreibst, hört es sich nicht schlecht an. Ich bin mir auch nicht sicher, welche Probleme du hast.

 

 

Der Satz deutet auf Probleme hin. Hast du ein Stück Code dazu, das wir uns mal anschauen können?

Einfach den relevanten Code hier rein posten. Benutze dazu

-Tags (ohne die Leerzeichen in den Klammern), dann wird es auch schön formatiert. Und keine Sorge, wir haben fast alles schon mal gesehen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!




Animator animator;
int randomnumber;

void Start () {

animator = GetComponent<Animator>();
randomnumber = Random.Range(1,5);
}

void Update(){

if(Input.GetKeyDown(KeyCode.Space))
{
Debug.Log(randomnumber);
animator.SetInteger("Number",randomnumber);
}
}
[/Code]

 

Was ich nicht verstehe ist, dass er mir nach einander per Debug unterschiedliche Zahlen ausgibt! Ich habe mit gleichen Zahlen gerechnet! Hast Du eine Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ne statische Klasse kann man machen, muss man aber nicht.

Zu den Sounds:

Irgendwo startest die ja die Sounds. Dort könntest du z.B. je eine boolsche Variable auf true setzen, wenn ein Sound gestartet wird.

Die beide Vars fragts du ab und wenn sie true sind, übergibst du die Info an deinen Figürchen damit sie sich wieder zurück bewegen.

Du kannst auch die Sounds mit einer int Variable zählen und bei 2 das Startsignal geben. Und du kannst auch beim 2ten Sound einfach fragen ob er zuendegespielt hat (audio.isPlaying) oder noch dran ist. Ist er fertig dann geht's los.

Eigentlich alles recht leicht und über viele Wege zu bewerkstelligen.

 

Die Frage ist aber, woran hängst du?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

 

zur Zeit habe ich folgendes Problem: Ich setze im Animator zwei int Variablen. Kann ich von einem Zustand durch mehrere Transition in einen anderen Zustand wechseln? Bei mir funktioniert das nicht richtig! Z.B. Die erste variable a = 1, jetzt gehe ich den rechten Baumzweig ab, was auch gut funktioniert! Wenn ich aber von einem Zustand mit mehreren Transition wechseln will, dann geht er den Baum nicht weiter! Was mache ich flasch! ich habe das gesetzt, bei den Transition, a Equals 1 z.B. dann Zustand T, a Equals 3 dann Zustand V, usw. Muss ich da was beachten?

VG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

 

Vielleicht habe ich mich jetzt nicht so genau ausgedrueckt! Kann ich von einem Zustand mehrere Zustandübergaene bilden, die jeweils zu einem anderen Zustand hinfuehren, oder ist nur jeweils ein Uebergang moeglich, der zu einen naechsten zustand fuehrt?

 

Ein Beispiel: Ich habe zwei Int-Variabel in einem Animator definiert, z.B. a und b. Per Zufall setze ich diese. Jetzt will ich von einem Zustand aus ueberpruefen, welchen Wert die Variable b hat. Je nach Wert gehe ich in einen anderen Zustand ueber. Für jeden Uebergang definiere ich mir dann entsprechende Transitionen (Pfeile), die den Sachverhalt beschreiben, oder bin ich auf dem Holzweg?

 

VG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

 

Danke, bei Selektion eines Game-Objekt sollte der Inspector die Animationen anzeigen, die auf dem Objekt definiert sind?

 

VG

 

Wenn du dein GameObject Selektierst, dann müsstest du eben das Animator-Component an dein GameObject angeheftet haben. Ohne dem geht's natürlich nicht. Oder was meinst du genau?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist schon recht verwirrend ausgedrückt.

Es gibt die Komponente "Animator". Auf dieser Komponente können keine Animationen liegen, sondern nur ein "AnimatorController".

Es gibt noch die veraltete Komponente "Animation", auf der tatsächlich Animationen liegen, aber ich hoffe stark, dass du die nicht in Betrieb hast.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es gibt noch die veraltete Komponente "Animation", auf der tatsächlich Animationen liegen, aber ich hoffe stark, dass du die nicht in Betrieb hast.

 

Er benutzt ja in seinem Script den Animator. Sein eigentliches Problem waren ja auch die Transitions im Animator.

 

 

@UnityProband: Oder du vermischst gerade das Alte mit dem neuen Animationssystem. Aber dafür bräuchten wir mehr Infos.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

 

Erst einmal nochmal ein großes Dankeschön für Eure Unterstützung!

 

Problem ist gelöst! Hatte fünf Animatoren auf je einem Objekt. Habe aber per Skript immer nur eine Variable gesetzt, aber jetzt funktioniert es. :rolleyes:

 

Wäre es möglich per Animator ein Soundfile abzuspielen? z.B. so was! :wub:

 

Wenn der Animator den Zustand betritt, dann soll zufällig ein Sound aus fünf Soundfiles ausgewählt werden, der dann abgespielt werden soll, dabei soll der Zustand erst verlassen werden, wenn der Sound abgespielt worden ist. Wäre das möglich? Es gibt ja unter den Animator die Möglichkeit ein Skript auszuführen! Oder? Die funf Animatoren können nicht miteinander kommunizieren?

 

VG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Problem ist gelöst! Hatte fünf Animatoren auf je einem Objekt. Habe aber per Skript immer nur eine Variable gesetzt, aber jetzt funktioniert es. :rolleyes:

Bitte sag uns, dass du jetzt nur noch einen Animator hast - und nicht fünf Variablen :)

 

Was die Sounds angeht: Da sollte sich mit einem StateMachineBehaviour was machen lassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Hallo!

 

Ich bräuchte nochmals einen Tipp bezüglich der Umsetzung! Wenn ich in der Update() Rotine eine Funktion wirklich nur einmal per Tastendruck ausführen möchte, wie müsste die Umsetzung aussehen. Dieses Codefragment funktioniert nicht!

 

void Update(){
							  if(Input.GetKeyDown(KeyCode.Space))
							 {
								 if(i==0){
									Debug.Log(randomnumber);
									animator.SetInteger("Number",randomnumber);
											}
									   i = 1;
}
}

 

Das Setzen der int Variabel findet in einer Statischen Klaase statt! Was mache ich falsch! Die if-Klausel wird ignoriert. Die int Variabl i setze ich am Anfang auf den Wert 0. :wub:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...