deciphers Geschrieben 25. Mai 2016 Melden Share Geschrieben 25. Mai 2016 Hallo liebe Leute, Ich habe einen 2D Sprite als Spieler und dieser bewegt sich nun aus Top-Down Perspektive per Tastatur eingabe. Ich möchte nun das der Spieler nur auf "untergrund" mit dem Tag "walkable ground" gehen kann. foreach (GameObject walkable_ground in GameObject.FindGameObjectsWithTag("walkable_ground")) { if (!(walkable_ground.GetComponent<BoxCollider2D> ().bounds.Contains (transform.position))) transform.position = walkable_ground.GetComponent<BoxCollider2D> ().bounds.ClosestPoint (transform.position); } Ich prüfe für jedes Tile ob der Spieler sich darauf befindet und wenn nicht dann soll er an der nächsten Position im Box Collider stehen bleiben. klappt soweit auch ganz gut wenn ich nur ein einziges Tile verwende. Sobald ich ein weiteres hinzufüge mit dem enstprechenden Tag, hängt der Spieler an einer Ecke des colliders und man kann sich nicht mehr bewegen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. Mai 2016 Melden Share Geschrieben 25. Mai 2016 Du prüfst halt echt jeden Frame alle Tiles durch und suchst sie dafür mit einer aufwändigen Funktion heraus. Das wird ziemlich schnell ziemlich hässlich werden. Nimm doch einfach Collider und setze Wände neben die begehbaren Tiles. Unity hat Box2D als 2D-Physikengine eingebaut; die solltest du nutzen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
deciphers Geschrieben 25. Mai 2016 Autor Melden Share Geschrieben 25. Mai 2016 Hab ich auch schon überlegt es so zu machen. aber muss ich dann nicht auch einen Code schreiben der jede Collision mit einem Collider in jedem Frame prüft? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. Mai 2016 Melden Share Geschrieben 25. Mai 2016 Nein. Unity hat zwei komplette Physik-Engines (PhysX für 3D, Box2D für 2D) eingebaut die das für dich machen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
deciphers Geschrieben 26. Mai 2016 Autor Melden Share Geschrieben 26. Mai 2016 danke habe mich ein bisschen mit Collidern und Rigidbody befasst und jetzt klappt alles wunderbar! habs mir wohl zu kompliziert gemacht. using UnityEngine; using System.Collections; using System.Collections.Generic; public class Create_Colliders_Edges : MonoBehaviour { public List<Vector2> newVerticies = new List<Vector2>(); private EdgeCollider2D col; Vector2 down_left,down_right,up_left,up_right; public bool left,right,up,down; void Start () { down_left = new Vector2 (-GetComponent<SpriteRenderer> ().bounds.extents.x, -GetComponent<SpriteRenderer> ().bounds.extents.y); down_right = new Vector2 (GetComponent<SpriteRenderer> ().bounds.extents.x, -GetComponent<SpriteRenderer> ().bounds.extents.y); up_left = new Vector2 (-GetComponent<SpriteRenderer> ().bounds.extents.x, GetComponent<SpriteRenderer> ().bounds.extents.y); up_right = new Vector2 (GetComponent<SpriteRenderer> ().bounds.extents.x, GetComponent<SpriteRenderer> ().bounds.extents.y); if (down) { /*down*/ newVerticies.Add (down_left); newVerticies.Add (down_right); } if (left) { /*left*/ newVerticies.Add (down_left); newVerticies.Add (up_left); } if (up) { /*up*/ newVerticies.Add (up_left); newVerticies.Add (up_right); } if (right) { /*right*/ newVerticies.Add (down_right); newVerticies.Add (up_right); } gameObject.AddComponent<EdgeCollider2D> (); col = GetComponent<EdgeCollider2D>(); } // Update is called once per frame void Update () { col.points = newVerticies.ToArray(); } } der Code erstellt mir nun Edge Collider an jeder Seite des Tiles. (funktioniert nur leider nicht ganz korrekt wenn ich die Skalierung des Transforms verändere) freue mich über Feedback und Verbesserungsvorschläge Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. Mai 2016 Melden Share Geschrieben 26. Mai 2016 Öh... einfach einen BoxCollider2D benutzen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
deciphers Geschrieben 26. Mai 2016 Autor Melden Share Geschrieben 26. Mai 2016 naja aber so kann ich dann ganz einfach per Mausklick sagen, dass nur links ein Collider sein soll oder nur oben und rechts. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.