Unity C# Kollapsande plattformar.

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

Unity C# Kollapsande plattformar.

Håller på att göra ett liten spel i Unity 2D och har fastnat på ett problem som jag inte vet hur jag skall lösa.
Gör en Manic Miner kopia ( https://www.youtube.com/watch?v=BgUzteADsRI ):

Jag behöver då skapa en plattform som kollapsar när man går på den vilket är det som orsakat mig problem, har ingen aning om hur..

Hade tänkt använda mig av OnCollisionStay2D, har googlat mig galen efter nån lösning men hittar ingenting.

Någon som har nått tips ?

EDIT* Detta är det närmsta jag kommit till en faktisk lösning men det är tyvärr inte rätt.

void OnCollisionStay2D(Collision2D collision) { Invoke("ChangeSprites1", 1); if ( GetComponent<SpriteRenderer>().sprite == sprite1) { Invoke("ChangeSprites2", 1); } if (GetComponent<SpriteRenderer>().sprite == sprite2) { Invoke("ChangeSprites3", 1); } if (GetComponent<SpriteRenderer>().sprite == sprite3) { Invoke("ChangeSprites4", 1); } } private void OnCollisionExit2D(Collision2D collision) { } void ChangeSprites1() { GetComponent<SpriteRenderer>().sprite = sprite1; } void ChangeSprites2() { GetComponent<SpriteRenderer>().sprite = sprite2; } void ChangeSprites3() { GetComponent<SpriteRenderer>().sprite = sprite3; } void ChangeSprites4() { GetComponent<SpriteRenderer>().sprite = sprite4; Destroy(gameObject); }

dator: Intel Core i5 3570K | Noctua NH-D14 | MSI Z77A-GD65 ATX | Corsair 16GB 1600MHz VENGEANCE LP | XFX Core Edition 850W 80+ Bronze | Corsair Carbide 500R | Sapphire Radeon HD 7970 GHz 3GB | Samsung SSD 840 Series 250GB | 2st. 2TB Seagate Barracuda 7200rpm SATA 6Gbit/s | DVD±RW Samsung 24X DL
Kringutrustning: ASUS MX279H 27" | Microsoft sidewinder x4 | Func MS-3 v2

Trädvy Permalänk
Medlem
Plats
Stockhom
Registrerad
Jun 2004

Hej!

Jag har gjort många spel, dock mestadels i Java.

Nu svarar jag hur jag hade gjort enligt mina erfarenheter.

Jag hade skapat en lista av rektanglar för banan som ska kollapsa, och sedan placerat sprites över dessa rektanglar.

Jag hade även skapat en rektangel för spelare & sedan placerat en sprite för spelaren på denna.

Sedan tar du bara bort och lägger till block i listan för banan beroende på vilket block spelaren kolldierar med.

Jag har utvecklat mestadels i LibGdx, och där finns en del bekväma metoder för just kollision. Annars har jag en metod som fungerar för kollision oberoende av språk.

public void detect_collision(Rectangle Player, Rectangle object){ //Spelare, Objekt att kolldiera med float leftA, leftB; float rightA, rightB; float topA, topB; float bottomA, bottomB; // Spelare leftA = Player.x; rightA = Player.x + Player.width; topA = Player.y + Player.height; bottomA = Player.y; // objekt att kollidera med leftB = objectRect.x; rightB = objectRect.x + objectRect.width; topB = objectRect.y + objectRect.height; bottomB = objectRect.y; if (topA >= bottomB && bottomA <= topB && rightA >= leftB && leftA <= rightB) { // har kolliderat } }

Du behöver inte använda "Rectangle", utan kan skicka med widht & height, samt X + Y om du redan vet dessa.

VH

Ryzen 7 - 1700 @ 3.7 | 16 Gb | RX 480
--------------------------------------------------
Grundare av MaseApps. Se våra spel: www.maseapps.com. För IOS och Android.