Jump to content
Unity Insider Forum

Kontakt zwischen zwei Spieler durch Collider


Damian izz back

Recommended Posts

Guten Abend

Ich befinde mich zurzeit in der Endphase meines Projekts und brauche noch einmal eure Hilfe. Ich habe für meine zwei Spielfiguren je einen BoxCollider erstellt. Ich habe auch die Animationen, welche die Figur abspielen sollte vorbereitet. Mein Anliegen ist jedoch, falls die eine Spielfigur meine Schubsanimieung abspielt und die Hände der Spielfigur in Kontakt mit der zweiten Spielfigur bzw. dem Collider tritt, sollte die zweite Spielfigur eine andere Animation abspielen, nun die Frage, wie kann man dies erstellen? Gibt es einen gewissen Code bzw. einen Befehl, der dies ermöglicht oder etwas anderes?

Wäre wirklich um jede Antwort dankbar

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist eigentlich recht simpel. Ich nehme an du hast bereits ColliderBoxen auf den Händen der Jeweiligen Spielfiguren, diese setzt du auf isTrigger. Dann machst du ein Skript welches auf die Boxen welches abfragt onTriggerEnter, damit du nicht alles Triggerst kannst du entweder separate Layers verwenden oder das ganze über Tags regeln.

Jetzt geh ich mal davon aus, dass dort wo die Box von deiner Spielfigur auch die Animationskomponente drauf ist. Dann kannst du dir diese einfach holen und über den animationsTrigger oder bool, je nach dem wie du die Animation steuerst das ganze triggern.

Etwa so:

public class HandSkript : MonoBehaviour
{
    public string Spielfigur = "a";


    private void OnTriggerEnter(Collider other)
    {
        if (other.tag ==  Spielfigur)
        {
            Animator animator = other.GetComponent<Animator>();
            animator.SetTrigger("Schubsen");
        }
    }
}

im public string Spielfigur kannst du dann im Inspektor eintragen ob es SpielfigurA oder SpielfigurB ist. Dann setzt du noch einen Tag mit a oder b bei den entsprechenden Spielfiguren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

Ich habe es nach deinen Angaben versucht, leider hat dies nicht geklappt. Was du geschrieben hast: Jetzt geh ich mal davon aus, dass dort wo die Box von deiner Spielfigur auch die Animationskomponente drauf ist. 

Ich verstehe nicht genau, was du mit diesem Satz meinst. Ich habe die Animationen nicht in den BoxCollider, wüsste nicht wie das gehen sollte, oder ich verstehe dich falsch XD

Ich habe alle Animationen mit je einem Script eingerichtet. Ich habe zwar noch einen Animator Controller, wo auch die Animationen drauf sind, aber den habe ich gar nicht verwendet. 

 

Kannst du mit diesem Satz genauer schildern was du damit meinst? 

 

So habe ich die Animationen aufgebaut: 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Animations2 : MonoBehaviour
{
    public Animator anim;


    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.O))
        {
            anim.Play("block");

        }
        if (Input.GetKeyDown(KeyCode.K))
        {
            anim.Play("high kick");
        }

        if (Input.GetKeyDown(KeyCode.L))
        {
            anim.Play("attack");
        }

    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast ein GameObjekt namens Spielfigur, richtig? Darauf ist eine Komponente mit dem BoxCollider? Das meinte ich nur damit, dass sich beides auf dem selben GameObjekt befindet. Du kannst statt dem animator auch dein eigenes Animationsskript holen, ist kein Problem und dort dann die Animation triggern. Weiss hald nicht wie das Skript heisst, mit dem du die Animationen steuerst. Aber bleibt sich vom Sprinzip her gleich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe mir es so gedacht, dass du deine SpielfigurA mit dem Boxcollider den Tag "a" gibst, oder wie immer du das nennen möchtest, bei den beiden Sphere Collider würde ich den Tag weglassen, damit du die Animation nicht auch triggerst wenn sich die Händer der beiden Spieler berühren.
Das gleiche machst du mit SpielfigurB.

Und auf die SphereCollider bzw. auf das entsprechende GameObjekt wo die drauf sind, machst du das Skript mit drauf und setzt die Spielfigur Variable darin entsprechend dem anderen Spieler, also bei SpielfigurA auf b, und bei SpielfigurB auf a.

Bei den Füssen kannst du natürlich das gleiche machen, wenn du das nicht separieren möchtest.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Entweder hast du nicht ganz verstanden was mein Ziel bzw. was ich machen möchte oder ich bin einfach blöd... Habe das Gefühl wir reden uns einander vorbei. 

 

Deswegen folgen poste ich nun e inpaar Screenshots damit es ein wenig verständlicher ist.

Wenn die erste Animation, welche auf dem ersten Screenshot erkennbar ist abgespielt wird und die Hitbox des anderen trifft, sollte die Animation im zweiten Screenshot abgespielt werden.

Evtl hast du mich schon richtig verstanden und ich kann deine Tipp einfach nicht umsetzen, weil ich etwas nicht verstehe...

 

Screenshot1.thumb.JPG.884f55287e8f2c6c70e11a272163e39c.JPG

screenshot2.JPG.4be5aaea744f34e533b60e1c2190d578.JPG

Screenshot1.JPG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Fällt mir gerade etwas schwer dir zu helfen 🙃


Also ich sehe bei "Zweiter Charkter" keine SphereCollider bei den Händen. Also weiss ich nicht wie du das triggern möchtest.


Ich gehe mal davon aus, dass du einfach eine "Attack" Animation(Zweiter Charakter) möchtest, welche die dann bei "Spielfigur1" die Animation "foot Back" triggert, wenn Spielfigur1 davon getroffen wird, seh ich das richtig?


Wenn dem so ist, bleibt sich mein Code gleich.
Ansonsten hab ich dein Problem wohl falsch verstanden.
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ich immer noch keine Ahnung habe wie du deine Animationen managest, würde ich einfach beim Start der Animtion eine coroutine setzen, welche die gleiche Zeit hat wie deine Animation.
 

vor 5 Minuten schrieb Damian izz back:

Ja guuuuut, welchen Code bzw. Befehl eignet sich denn dafür gut weisst du das? :)

🙃

Ich denke dein Problem ist zu spezifisch, wenn du willst, kannst du mir dein Project als pm schicken, ansonsten weiss ich auch nicht weiter..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn es dir nichts ausmacht würde ich es dir gerne senden, aber habe nun ein anderes Problem :(

Ich wollte mir Unity erneut installieren, da es mir nicht gelungen ist mein Projekt für Mac kompartibel zu machen durch building, und jetzt startet sich Unity nicht mehr D; Muss erstmal Unity wieder zum laufen bringen

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...