Jump to content
Unity Insider Forum

Spherecast triggert nicht


Tiles

Recommended Posts

Ich fluche mich immer noch durch mein Schussproblem. Und kriege noch nicht mal den doowen Spherecast zum Laufen. Der triggert einfach nichts. distanceToObstacle ist immer Null.

 

Die Bullet ist inzwischen Kinematic, dessen Spherecollider auf Trigger. Ich bewege sie per Transform.Translate. Und die Coins haben natürlich auch alle einen Spherecollider drauf.

 

Wo liege ich denn hier falsch?

 

var radius:float=0.48; // the radius of our casted sphere

var distanceToObstacle:float=0.0; // distance to hit object

var speed:float=5.0;

 

function FixedUpdate () {

var hit:RaycastHit;

 

if (Physics.SphereCast (transform.position, radius, Vector3.forward, hit, 10.0f)) {

distanceToObstacle = hit.distance;

}

 

Debug.Log(distanceToObstacle.ToString("F6"));

transform.Translate(Vector3.forward * speed*Time.deltaTime);

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

1.2345678.ToString(); //1.2
1.2345678.ToString("F6"); //1.234567

 

Ganz doofe Frage, nur um sicher zu sein: Du benutzt für das Spiel 3D-Physik? Wäre jedenfalls komisch. Und wenn du 2D-Physik benutzt, funktioniert SphereCast nicht, da es eine 3D-Physik-Funktion ist. Für Casts in 2D-Physik brauchst du Physics2D.Blub.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schönes Video zum Thema. Leider bin ich auch da nicht fündig geworden.

 

Okay, jetzt wirds heiss. Mit Vector3.up und Vector3.right triggerte es was. Aber nicht mit Vector3.forward. Dabei bewege ich meine Kugel doch forward. Und meine Coins liegen doch auch in forward Richtung.

 

Beim weiteren Basteln habe ich leider einen Teil zu viel entsorgt. Im Projectview gibts ja leider kein Undo. Deswegen habe ich das Projekt einfach mal eingestampft, ein Backup geschnappt, obigen Code reingepastet. Dadurch ist Projekt gleich, Code gleich, hab ja nun den Code vom kaputten Projekt reingepastet, Einstellungen gleich. Und jetzt tuts was es soll. Now go figure ... O_O

 

Das sind immer die gemeinsten Fehler !

 

Problem gelöst wies aussieht. Aber danke fürs Mitdenken :)

 

Was bedeutet denn ("F6") ?

 

Damit kannst du im Debug.Log angeben wieviele Nachkommastellen ausgedruckt werden sollen. Sehr praktisch das ;)

 

Crossposting, ja ich benutze 3D fürs Spiel :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tja, zu früh gefreut. An der Bande triggerts überhaupt nicht. Die Coins triggern aber tadellos. Dabei ist alles gleich. Gleicher Layer, etc. .

 

Bevor ich das jetzt als Bugreport rausjage der dann die nächsten 5 Jahre eh nicht gefixt wird, wäre von euch jemand so Nett im Projektfile nachzuschauen ob ich nicht doch irgendwo eine Einstellung verhauen habe? Das Projektfile ist 400 Kb.

 

http://www.reinersti...statborders.rar

 

EDIT sagt, Und dann war da noch ... GAH! Schon wieder nix. Auch die Methode ist unzuverlässig. Mir gehn echt die Optionen aus -.-

post-744-0-18673600-1433842222_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kann mir das nachher mal anschauen.

Aber wie ich ja schon woanders erwähnt habe, ist das Raycasten oder Spherecasten zu jedem Frame nicht gut, weil bei bewegten Objekten immer auf das nächste FixedUpdate gewartet wird und da dann die Tabelle der ganzen Collider neu generiert wird. Oder so ähnlich.

 

Du kannst also eh nur beim Abschießen den Sperecast senden und schauen wo er was trifft. Trifft er eine Kugel ist alles geritzt und du kannst schon jetzt bestimmen, in welchen Slot die Kugel fallen soll.

Trifft er nur die Bande, musst du wissen in welchem Winkelt er die Bande Trifft und im entsprechenden Ausfallwinkel an dem Hitpoint der Bande einen neuen Spherecast schicken, der dann wahrscheinlich eine Kugel trifft.

 

Der abgeschossene Bullet fliegt dann ganz normal, seinen Weg, bis er eine Kollision mit einer Kugel hat und dann setzt er sich einfach in den vorbestimmten Slot.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke Malzbie :)

 

Aber wie ich ja schon woanders erwähnt habe, ist das Raycasten oder Spherecasten zu jedem Frame nicht gut, weil bei bewegten Objekten immer auf das nächste FixedUpdate gewartet wird und da dann die Tabelle der ganzen Collider neu generiert wird. Oder so ähnlich.

 

Ah, verdammt, das würde mein Problem vom anderen Thread erklären. Die überlappenden Bullets ...

 

Nur um Missverständnissen vorzubeugen, hier gehts nur darum wieso die Bullet durch die Bande fliegt. Ich finde den Fehler einfach nicht. Das muss irgendwo im Setup klemmen.

 

Ich habe da aber noch mal einen Thread aufgemacht wegen den überlappenden Bullets ... http://forum.unity-c...__fromsearch__1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe eben kurz mal dein Projekt drin gehabt und konnte feststellen, dass du nicht in die richtige Richtung castest.

Du musst transform.forward anstatt Vector3.Up nehmen.

Die Wänder werden auch erkannt. Kannst du ja selber mal mit print(hit.collider.name); ausgeben lassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du bist der Beste. Ich wusste es is nur ne Kleinigkeit. Aber ich habe es einfach nicht gesehen ^^

 

Aber wieso geht die Kugel immer noch durch die Wand? Die Bullet müsste doch an der Wand genauso anhalten wie an den Coins. EDIT, ah verdammt, oben vergessen den Spherecast auch auf transform.forward zu stellen. Purrfect \o/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...