2016-07-18 28 views
0

Das Bild beigefügt ist eine Maske von "begehbarem Raum" für ein Spiel, das vom Spieler gemalt wird, und so könnte alles sein. Ich muss Collider erstellen, die verhindern, dass der Spieler auf die blauen Teile der Maske (Wasser) läuft. Das Spiel selbst ist im 3D-Raum, die Maske ist für die Terrain-Texturen (Unreal Engine 4).So finden Sie mehrere konkave und konvexe Formen in einem Bild

Was ich im Moment getan habe, ist die Größe der Textur von 2048x2048 auf 256x256 zu reduzieren und ich erzeuge einen Kollider im 3D-Raum für jedes blaue Pixel in der Maske. Dies funktioniert gut mit kleinen Mengen blauer Pixel, aber es wird nicht gut/überhaupt funktionieren, wenn es viele blaue Pixel (Wasser) gibt. Es würde zu viele Collider geben, die im Fluge spawnen könnten.

Und ich denke, die einzige andere Option ist es, Punkte zu finden, die die Grenzen einer Anzahl von konkaven Formen im Bild bilden. Mit dem ich Wand Colliders erstellen werde.

Hoffnung, die Sinn macht. Jede Hilfe wird sehr geschätzt.

Dank enter image description here

Antwort

1

Nachdem Sie die Größe etwas kleiner reduziert haben, einen Bool-Array mit Nullen und Einsen füllen, diejenigen, bei denen es blau ist, und Nullen, wo gibt es nicht. Von dort können Sie alle ohne Null-Nachbarn auf Nullen stellen. Das liegt daran, dass wenn eine Zelle keine leeren Nachbarn hat und sie nicht leer ist, kein Objekt mit ihr kollidieren kann und Sie dies nicht überprüfen müssen. Das sollte die Leistung erheblich verbessern, aber wenn Sie mehr benötigen, können Sie dann alle geraden Linien der gefüllten Zellen finden und auf Kollisionen mit diesen prüfen. So wäre es etwa so aussehen:

enter image description here

In diesem Fall, dass Sie am Ende mit Kollisionen zu überprüfen, mit 6 Objekten statt mit 18 und der Differenz wird größer als die Blobs größer.

+0

Danke für Ihren Vorschlag, ich schätze es wirklich. Ich werde das umsetzen und sehen, wie es funktioniert! – Dann

+0

@Dann Nun, wie hat es funktioniert? – indjev99