2017-08-26 5 views
0

Ich habe einen 2D-Charakter mit einer Waffe, und ich möchte eine Explosion instanziieren, wo sein Schuss mit etwas anderem kollidiert.Einheit Raycast2D schießt nur wie 1 Einheit

Ich dachte, der beste Weg, dies zu tun wäre Raycast2D in Javascript.

var hit: RaycastHit2D = Physics2D.Raycast(transform.position, Vector2.right); 
if (hit.collider != null){ 
    boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity); 
} 

Jetzt ist das Problem, das ich Feuer und die Explosion instanziiert immer wie eine Einheit vor meinem Charakter, auch wenn es nichts gibt. Ich habe keine Idee warum.

+0

* "nstantiates immer wie eine Einheit vor meinem Charakter, auch wenn dort nichts ist." * Kannst du das mehr erklären? Vielleicht ein Screenshot von dem, worüber du sprichst ... – Programmer

+0

Es sieht so aus: CHARACTER___________ _______________ ENEMY – helpme

+0

Es wird nicht auf dem Feind instantiiert, es instanziiert nur ein paar Einheiten vor dem Zeichen – helpme

Antwort

2

Sie sollten den Ursprung von Raycast ändern. Oder Sie können eine neue Ebene für den Player erstellen. und diese Ebene beim Raycast ausschließen.

4

Das größte Problem ist, dass Sie nicht sind und sogar prüfen, welches Objekt der Raycast getroffen hat, bevor Sie etwas instanziieren. Das ist falsch. Der Raycast kann alles davor treffen. Alles mit einem Collider 2D. Es kann sogar den Charakter selbst treffen.

Erstelle ein "Feind" -Tag Setze deine Feinde in dieses Tag. Wenn der Raycast nicht null ist, stelle sicher, dass der Feind tatsächlich getroffen wird, bevor du etwas instanziierst.

if (hit.collider != null) 
{ 
    if (hit.collider.CompareTag("Enemy")) 
    { 
     boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity); 
    } 
} 

Wie ich schon sagte, kann die Raycast auch besonders betroffen selbst wenn 2D Raycast erfolgt. Sehen Sie this Post für wie dieses Problem auch zu beheben, wenn das das Problem ist.