Jump to content
Unity Insider Forum

Für eine eigene gezeichnete Karte (mit vielen Kanten) eine Border erstellen damit der Spieler nicht rauslaufen kann.


Avlu

Recommended Posts

Hallo, ich will eine Karte für mein Spiel zeichnen (2d), dabei habe ich drüber nachgedacht und mir ist aufgefallen ich weiß ja garnicht wie ich sozusagen eine Border erstellen die um die Karte geht und verhindert das ich von z.B. von einer Klippe "runterfalle". Gutes Beispiel ist die Karte von Cuphead (das Bild unten), man hat einen Spieler und kann mit ihm nicht über eine Kante gehen, wie genau macht man das? Falls etwas nicht klar ist bitte bescheid geben!

Cuphead Map.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin und Willkommen!

Naja, da gibt es verschiedene Möglichkeiten. Du könntest zum Beispiel recht stumpf überall Collider2D hinsetzen und deinem Character z.B. einen Rigidbody2D geben, mit dem er da durch navigiert. Da besteht die Gefahr, dass du irgendwo eine Lücke übersiehst, aber wenn du sonst nichts mit diesem Areal machen willst, ist das schon eine gute Lösung.

Spätestens, wenn noch andere Figuren sich da lang bewegen sollen, kann man aber auch über ein NavMesh nachdenken. Die gibt's zwar von Haus aus nur in 3D, aber wenn man z.B. seine 2D-Karte flach auf den Boden legt, kann man es trotzdem dafür benutzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,
Du könntest z.b. deinen Border in einer neuen Ebene einzeichnen z.b. Schwarz für nicht begehbar wie ein Alphakanal, und ein neues Bild daraus erstellen.
Das Bild legst du dann genau über das Original und schaltest den Sprite Renderer aus, das Bild wird zwar nicht mehr gerendert, aber mit Texture2D.GetPixel kannst du den
Farbwert an der X,Y Koordinate auslesen und Color32 übergeben. Ist der Farbwert an der Koordinate z.b. Schwartz dann bleib stehen.
Wichtig ist das bei Import Settings Read/Write Enabeld  aktiviert ist sonst sonst kannst du das Bild in Unity nicht bearbeiten.
Hier mal zur Veranschaulichung ein kleines Script das den Farbwert in der Konsole ausgibt.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pixel : MonoBehaviour
{
    public Texture2D tex;
     public Color32 farb;
    // Start is called before the first frame update
    void Start()
    {
        farb = tex.GetPixel(0, 10);
        Debug.Log(farb);
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}


Gruß Jog
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb Jog:

Du könntest z.b. deinen Border in einer neuen Ebene einzeichnen z.b. Schwarz für nicht begehbar wie ein Alphakanal, und ein neues Bild daraus erstellen.

Da fehlt jetzt aber irgendwie noch, wie das den Spieler daran hindert, über die Kante zu laufen...?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 16 Stunden schrieb Sascha:

Da fehlt jetzt aber irgendwie noch, wie das den Spieler daran hindert, über die Kante zu laufen...?

In dem ich den Wert z.b. in einer Funktion auswerte.

 void AuswertFunktion()
    {
         farb = tex.GetPixel(x,y);
       
        if (farb.a == 0 ) // Alphawert  =0
        {
           // Halte die Bewegung an
        }
    }

Soviel zur Theorie .

Dann kahm die Praxis 🙄

Habe das heute mal ausprobiert. Ist sehr kompliziert und Aufwendig dies zu Programmieren (Welt Koordinaten in Pixel Koordinaten umzurechnen usw.)

Und beim testen Bäumte sich mein PC auf und viel Tot um.😉  ( Brach auf 8 fps ein ) wahren wohl ein paar Pixelberechnungen zu viel.

Aber es hat funktioniert .😁

Also ist dieser Weg leider nicht dafür geeignet.

Gruß Jog

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...