2016-06-23 6 views
0

Ich habe verschiedene Auto Animation auf der Straße laufen, die von max importiert haben. Ich möchte ein so intelligentes System machen, dass, wenn das Auto von einem anderen Auto aus startet, es zu einem Stop wird. Bisher habe ich das versucht.Handle Auto Animation und Kollision

  1. Added vier Collider mit Tag-Namen Auto, carBack, carLeft, CarRight enter image description here

  2. Auto nach links/rechts enthält diesen Code (wie in Bild 1 sehen). Hinzugefügt diesen Skript Auto gelassen, dass rechts Collider wenn diese Collider mit dem Auto Objekt getroffen dann Stop Auto worden. (Und auf Triggerausgang es wieder aufnehmen)

    void OnTriggerEnter(Collider c) 
        { 
         if (c.tag == "Car") 
         { 
          Debug.Log("collided with : carsideTriggerScript :" + c.transform + " - object Name to stop : " + gameObject.name); 
          c.transform.gameObject.GetComponent<AnimationControlSpeed>().Speed = 0; 
          //StartCoroutine(DecreaseSpeedGradually(transform.gameObject.GetComponent<AnimationControlSpeed>())); 
         } 
        } 
    
        void OnTriggerExit(Collider c) 
        { 
         if (c.tag == "Car") 
         { 
          Debug.Log("Exi collided with : carsideTriggerScript:" + c.transform + " - object Name to resume : " + gameObject.name); 
          c.transform.gameObject.GetComponent<AnimationControlSpeed>().Speed = 1; 
         } 
        } 
    
  3. hinzugefügt Skript, das das überprüfen, ob Autostart mit carBack kollidieren Collider dann stoppen (Und am Trigger-Ausgang wird es fortgesetzt. Das gleiche Skript wie oben).

    Aber ein Szenario zu schaffen, die Sie in Abb 2.

enter image description here

ich damit umgehen werde ermöglichen sehen. Es scheint, dass ein Auto Collider schlagen CarRightCollider und die gleiche Sache mit einem anderen Auto passieren, so dass beide Auto Halt und unfähig, sich wieder zu bewegen. Wie kann ich es kontrollieren? Da zu jedem Spielobjekt dieselben Skripte mit demselben OntriggerEnter und derselben Logik hinzugefügt werden.

+0

sieht aus wie Sie brauchen eine Kugel oder Kapsel Collider – slf

+0

warum? Was ist der Grund –

+0

Sie haben Lücken zwischen Ihren Colliders, entweder erstellen Sie einen großen Collider, oder stellen Sie sicher, dass die vorhandenen Colliders überlappen – slf

Antwort

0

Also, nach dem Lesen Ihrer Frage noch ein paar Mal denke ich, dass ich jetzt verstehe. Du hast zwei Autos und wenn sie kollidieren, hören beide auf. Sie wollen nur ein Auto anhalten und ein Auto fahren.

Wenn es Ihnen egal ist, welcher zuerst geht, ist das am einfachsten. Sie benötigen eine Sammlung, die als Warteschlange für alle kollidierenden Autos dient. Nennen wir es die "Wiederaufnahme-Warteschlange". Wenn ein Auto mit einem anderen Auto kollidiert, stoppe es und füge es zur Warteschlange hinzu. Dann können Sie anhand eines Timers oder einer anderen Logik nacheinander das nächste Auto aus der Warteschlange nehmen, und wenn das Auto gestoppt ist, starten Sie es.

Wenn Sie einen "Gewinner" auswählen müssen, um zu sehen, wer loslegen soll, könnte das etwas komplizierter werden. Ein grundlegendes Beispiel hierfür könnten Rettungsfahrzeuge wie die Polizei oder Feuerwehrfahrzeuge sein, die Priorität haben, um zuerst zu gehen, und andere Autos müssen warten. In diesem Fall sollten Sie jedem Ihrer Autoobjekte eine Art Prioritätsprivilegien geben, die wie ein Würfel ist, den sie bei einer Kollision rollen können, um zu sehen, ob sie gewinnen. Dann können Sie die Zufallszahlen verwenden, die jedes Auto generiert, um sie in der Reihenfolge Ihrer Priorität in die Warteschlange für die Wiederaufnahme einzufügen.