Jump to content
Unity Insider Forum

minuschki

Members
  • Content Count

    26
  • Joined

  • Last visited

Community Reputation

0 Neutral

About minuschki

  • Rank
    Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Besten Dank für die Antwort! Das hilft mir doch schon sehr.
  2. Würde ich ja liebend gern tun, aber ich bin blutiger Anfänger! 1. Also ich hänge an jeden Curlingstein nur 1 Audio Source und das reicht um 2 Sounds abzuspielen? 2. Muss das Feld bei AudioClip leer bleiben oder gehört da entweder der "hit"-sound oder der "rollen"-Sound hinein? 3. Unten stehen zwei Schnipsel, das erste, um den "rollen"-Sound zu steuern und das zweite um den Kollisionssound "hit" zu steuern. Da habe ich zwei Probleme! a) Wie müssen die Variabeln am Anfang deklariert werden, damit ich dann in den untenstehenden Schnipseln die Sounds gezielt steuern kann? b) Wie sieht das Codemässig in den Schnipseln aus? Ich weiss, für Profis wahrscheinlich dumme Fragen, aber für mich noch nicht lösbar? Vielleicht hast du ja erbarmen! public void FixedUpdate () { if(rb.velocity.magnitude >= 1.2f) { "Wie kann ich denn hier das Volumen des "rollen"-Sounds einstellen und ihn im loop-Modus abspielen } } private void OnCollisionEnter(Collision collision) { "Wie kann ich hier den "hit"-Sound mit dem Volumen 1.0 abspielen" "Wahrscheinlich geht das dann mit PlayOneShot" }
  3. Hallo Sascha Danke für deine Antwort! Mein erster Versuch war, zwei AudioSource im Inspector dem Gameobjekt anzuhängen, war dann aber nicht in der Lage, die einzeln anzusprechen. Nach einigem Suchen bin ich dann auf das untenstehende Skript gestossen, welches hoffentlich das macht, was ich gerne möchte (Volume separat steuern). Wird das allgemein so gemacht oder kann man das auch einfacher lösen? using System.Collections; using System.Collections.Generic; using UnityEngine; public class Ton : MonoBehaviour { public AudioClip audioClip1;//Sounds in den Inspector ziehen public AudioClip audioClip2; public AudioClip audioClip3; AudioSource myAudioSource1; AudioSource myAudioSource2; AudioSource myAudioSource3; void Start() { myAudioSource1 = AddAudio (true, false, 0.4f);//loop, playAwake, volume myAudioSource2 = AddAudio (false, false, 0.8f); myAudioSource3 = AddAudio (true, false, 1.0f); StartPlayingSounds (); } public AudioSource AddAudio(bool loop, bool playAwake, float vol) { AudioSource newAudio = gameObject.AddComponent<AudioSource>(); newAudio.loop = loop; newAudio.playOnAwake = playAwake; newAudio.volume = vol; return newAudio; } void StartPlayingSounds() { myAudioSource1.clip = audioClip1; myAudioSource1.Play (); myAudioSource2.clip = audioClip2; myAudioSource2.Play (); myAudioSource3.clip = audioClip3; myAudioSource3.Play (); } }
  4. Ich habe da ein Problem bezüglich Sounds abspielen und steuern. Folgende Situation: Ein Curlingstein wird mit AddForce angeschoben und gleitet dann übers Eis. Solange er in Bewegung ist, sollte der geloopte Sound "gleiten" zu hören sein. Wenn der Stein mit einem anderen kollidiert ertönt der Sound "hit". Wenn der Stein weiter gleitet, sollte der geloopte Sound "gleiten" weiter hörbar sein, bis der Stein stillsteht. Meine Idee ist, beim Sound "gleiten" das Häkchen bei "Loop" anzumachen und beim Spielstart das Volume für diesen Sound auf 0 zu setzen. Sobald dann der Curlingstein sich fortbewegt, könnte man das Volumen in Abhängigkeit zum Tempo "aufdrehen" (auf max. 1). Wenn der Stein dann an Tempo verliert und abbremst würde auch der "gleiten"-Sound wieder leiser. 1. Ist dieser Ansatz richtig? 2. Wir kann man das Volumen des Gleitsounds steuern, ohne dass das Volumen des "hit"-Sound beeinflusst wird? 3. Da mehrere Steine im Spiel sind, kann es nicht zu einem Problem kommen, dass gleitende Steine das Volumen hochdrehen und die stillstehenden Steine das Volumen gleich wieder auf 0 setzen? Oder werden die Sounds unabhängig abgespielt? Danke für eure Hilfe! if(rb.velocity.magnitude >= 0.2f) { //Drehe das Volumen des LoopSounds "gleiten" auf oder ab, //wenn sich der Stein schneller als 0.2f fortbewegt } else { //Volumen auf 0 setzen }
  5. Yep! Jetzt funktioniert es super! Ich habe nun versucht aus der Linksdrehung eine Rechtsdrehung zu machen. Könntest du mal einen Blick drauf werfen, ob die vorgenommenen 4 Änderungen (kommentiert) korrekt sind? Ansonsten besten Dank für deine Bemühungen und den Tipp mit der Coroutine! private float remainingAngle = 0f; private float speed = 200f; private void OnMouseDown() { remainingAngle += -90f; // Hier einen negativen Winkel eingeben } private void Update() { if (remainingAngle >= 0f) return; // Hier grössergleich anstatt kleinergleich var amount = -speed * Time.deltaTime; // Hier speed auf minus setzen remainingAngle -= amount; transform.Rotate(0, 0, amount); if (remainingAngle >= 0f) // Hier grössergleich anstatt kleinergleich { remainingAngle = 0f; var euler = transform.localEulerAngles; euler.z = 90f * Mathf.Round(euler.z / 90f); transform.localEulerAngles = euler; } }
  6. Sorry Sascha Nun macht es keinen Mucks mehr. Das Bild dreht sich zwar nicht mehr von alleine, aber eben auch nicht, wenn ich auf das Bild klicke!
  7. Danke für deine Antwort! Es funktioniert aber nicht richtig! Wenn ich den Code einfüge, beginnt das Bild direkt nach dem Start von alleine an zu drehen. Ein Mausklick auf das Bild lässt es auf 0° springen und es beginnt von Neuem sich zu drehen.
  8. Hallo zusammen Unter diesem Link https://news.infernalscoop.com/ahglzz habe ich ein Interview von dem Typen gelesen, der z.B. FlowScape in Unity realisiert hat. Seine Beispielprojekte finde ich visuell ziemlich beeindruckend. Das Erstaunliche ist aber, dass er solche Projekte praktisch ohne Code erstellen kann. Nach seinen Aussagen erreicht er das mit "Visual Scripting". - Ist das nun eine neue Technik, um Programme zu entwickeln? - Ist das bereits in Unity implementiert oder muss man das extra installieren? - Ist das auch für Unity 2017 verfügbar?
  9. Hallo Sascha Ich habe das nun mal versucht so zu lösen, wie es im Code steht. Das heisst: Ein Klick startet die Coroutine nur, wenn gerade keine Drehung ausgeführt wird. Bei Beendigung der Drehung wird aktion wieder auf false gesetzt. Das hat zur Folge, dass keine "ungeraden" Winkel entstehen, sondern immer 0°, 90°, 180° oder 270°. Allerdings hat das den Nachteil, dass Klicks innerhalb der Drehbewegung ignoriert werden. Ziel wäre eigentlich, dass wenn der Anwender zum Beispiel einen Doppelklick innerhalb der 2 Sekunden ausführt, sich das Bild um 180° drehen würde, aber ohne direkten Spung auf das Ziel. So das eine fliessende Drehbewegung ablaufen würde. Meine Vermutung ist, dass man eine Art Klickzähler einbauen müsste, der dann "abgearbeitet" wird. public void OnMouseDown()// Mit linker Maustaste drehen { if (aktion == false) { StartCoroutine (drehen (-90f, 2.0f));//Drehwinkel und Dauer in Sekunden aktion = true; } }
  10. Variante 2 wäre in diesem Fall erwünscht. Will heissen: Weitere Klicks innerhalb einer laufenden Animation sollen registriert werden und zu weiteren 90°-Drehungen führen. 3 Klicks würden also eine Drehung um 270° erzeugen. Natürlich wäre es für mich auch interessant zu wissen, wie man einen Klick ignorieren könnte, falls das nicht zu viel Mühe bedeutet. Danke für die Geduld!
  11. Es gibt doch noch ein Problem! Wenn die Animation in 2 Sekunden ablaufen soll, der Anwender aber innerhalb der laufenden Animationen nochmals auf das Bild klick, wird die Coroutine neu gestartet, was zu unerwünschten Winkeln führt. Anstatt 90°, 180° oder 270° bleibt das Bild z.B. auf 127° stehen! public void OnMouseDown() { // Hier müsste noch eine Bedingung stehen, die einen Neustart der Coroutine erst erlaubt, wenn eine 90° Drehung abgeschlossen ist! if () { StartCoroutine(drehen(90f, 2f));//Drehwinkel und Dauer in Sekunden } }
  12. Besten Dank! Funktioniert wunderbar.
  13. Hallo zusammen Ich möchte ein Bild um 90° drehen lassen, sobald man es anklickt. Dabei soll die Drehung animiert sichtbar sein und nicht direkt auf 90° springen. Wenn ich die schrittweise Rotation in eine for-Schleife einbaue, wird diese wohl 90 mal durchlaufen aber man sieht die Zwischenschritte der Rotation nicht. Gibt es einen Befehl, um innerhalb der for-Schleife ein frame update zu erzwingen, damit die Animation auch tatsächlich angezeigt wird oder löst man das ganze Drehproblem anders? Danke für eure Hilfe! for (int i=0; i=<90; i++) transform.rotation = i;
  14. Hallo zusammen Ich habe inzwischen herausgefunden, wie man einzelne Materialien in einem Skinned Mesh Renderer ansprechen bzw. umfärben kann! Man erstellt eine public Materialliste und kann dann innerhalb der rechteckigen Klammer angeben, welches Material aus der Liste eingefärbt werden soll. Danke an alle, die versucht haben zu helfen! public Material[] materials; m_Renderer.materials[8].color = new Color32(0, 0, 0,255);// Torso schwarz einfärben
  15. Ich habe nun deinen Rat befolgt und alle möglichen Haken rausgemacht. In Unity werden 9 Materialien importiert aber keine UV Maps. Ich weiss leider nicht, wie man diese 9 Materialien einzeln per code anspricht! Die Einfärbung klappt demzufolge wie gehabt wiederum nur teilweise. Sobald ich dann mein Material "grau" in den Inspector ziehe, verschwinden die 9 Materialien und es verbleibt mein Material "grau" und die Figur wird wie gewünscht eingefärbt. Anscheinend ist der Mesh Renderer in mehrere Teile unterteilt, wobei mir lieber wäre, wenn der in einem Stück wäre.
×
×
  • Create New...