2016-10-16 3 views
1

Ich spiele schon seit geraumer Zeit mit Einheit, und ich habe eine App oder zwei auf Android veröffentlicht, aber ich muss noch eine wirklich wichtige Sache herausfinden, die mir immer wieder entgeht über Handy.Unity3d verschiedene Bildschirmgrößen und begrenzter Spielbereich

Ich habe mir verschiedene Tutorials zu Dingen wie der Physik von unity2d und solchen Dingen angeschaut, und ich habe Tutorials gesehen, wo die Person ein Bodensprite auf den Boden legt, dann einen Kantencollider an einer Seite anbringt und so weiter.

Nun kann ich mich damit irren, aber für mich scheint es, als ob Sie überhaupt ein Spiel machen, bei dem Sie irgendwelche Grenzen setzen müssen, oder Objekte, mit denen Sie in einem festgelegten Spielbereich kollidieren kann den Editor praktisch nie für irgendeine Art von Level-Design verwenden, und alles muss per Skript erledigt werden, da jedes Objekt, das Sie erstellen, seinen Standort und seine Größe beim Start durch ein Skript einstellen muss, um verschiedene Bildschirmgrößen zu berücksichtigen.

Bin ich falsch darin? Gibt es tatsächlich eine einfache Möglichkeit, eine Ebene mit dem Editor zu erstellen, um Sprites zu importieren und Formen und Kanten und Objekte zu erstellen und dann das Spiel automatisch skalieren zu lassen und die Objekte entsprechend der Bildschirmgröße an die richtigen Grenzen zu verschieben?

Für mich, jedes Mal, wenn ich ein Android-Spiel oder ein Handy-Spiel im Allgemeinen gemacht habe. Ich musste alle Objekte über ein Skript generieren, Komponenten per Skript hinzufügen und generell alles über ein Skript ausführen, bis zu dem Punkt, an dem mein eigentlicher Redakteur ziemlich genau das Kamera-Objekt und ein Skript hatte und das wars.

Gibt es einen einfacheren Weg? denn bisher sind alle Tutorials über 2D-Spiele, die ich gesehen habe, ziemlich nutzlos für Handys, weil sie den Editor verwenden, um Sprites und Edge Colliders manuell hinzuzufügen, was für mich scheint, dass es in 90 Prozent der Fälle nicht richtig aussehen würde.

Alle Gedanken würden geschätzt werden.

Antwort

1

Game Design heute muss in der Tat reaktiv sein.

Es ist sehr, sehr schwierig, und es gibt keine einfache oder integrierte Lösung.

Ja, das ist leider ein absoluter Grundaspekt des Spieldesigns in unserer Ära.

Es ist in der Tat sehr, sehr schwierig, 2D-Spiele auf allen verschiedenen Bildschirmformen arbeiten zu lassen.

Betrachten Sie eine Art 2D-Arcade-Spiel Landschaft - vielleicht, wo Sie gegeneinander schießen. Was bedeutet es eigentlich, wenn zwei Personen an einem Wettbewerb teilnehmen und einer einen 4: 3-Bildschirm und einer einen 16: 9-Bildschirm hat?

Sollte es tatsächlich länger dauern für einen Benutzer über den Bildschirm fliegen?!? Sollten Sie die Geschwindigkeit des Schiffes einstellen, so dass die Bildschirmlaufzeit konstant ist?!?

Sollten Sie nur mehr Zeug an den Rändern zeigen? Aber warte - bedeutet das, dass einige Spieler bekommen weit mehr Warnung von ankommenden Feind oder Landschaft ??!

Niemand hat die Antwort - es ist sehr, sehr schwierig.

es ist konzeptionell schwierig, und ein echter Schmerz zu programmieren.

Als Antwort auf Ihre Frage gibt es absolut KEINE integrierte Methode, um mit diesen Problemen in Unity (oder einer anderen Game Engine) umzugehen.

Fast alle Teams haben Code wie folgt .......

/* 
Call this dynamically, probably from SizeCare or RotationCare 

Position something in relation to the dynamic screen edges 
- reactively so to speak 

This is critical for (for example) knowing where to launch sprites from, 
knowing where to dispose of them, and so on. 
*/ 

using UnityEngine; 
using System.Collections; 

public class KeepAtScreenEdges:MonoBehaviour 
    { 
    [Header("Left and right...")] 
    public bool keepOnLeftEdge; 
    public bool keepOnRightEdge; 

    [Header("Bottom and top...")] 
    public bool keepOnBottomEdge; 
    public bool keepOnTopEdge; 

    public void ScreenMaybeChanged() 
     { 
     if (keepOnLeftEdge) gameObject.ScreenLeft(); 
     if (keepOnRightEdge) gameObject.ScreenRight(); 

     if (keepOnBottomEdge) gameObject.ScreenBottom(); 
     if (keepOnTopEdge) gameObject.ScreenTop(); 
     } 

    } 

Sie halten es nur auf einen Marker (Marker: leer Gameobject)

enter image description here

ist da noch die " oben links“one ...

enter image description here

und in der Tat haben Sie ganze Konstellationen von "reaktiven Markern" so.

Dann wird jede einzelne Sache, die Sie im Spiel tun, in Relation zu diesen positioniert.

So haben Sie zum Beispiel einen Marker für "Ort, wo Offscreen-Feinde entstehen, nur am rechten Rand des Bildschirms". Und Sie werden das ausgiebig zum Starten von Feinden oder was auch immer verwenden.

Sie können nichts im Editor tun: alles ist reaktiv. (Nun, in der Tat müssen Sie Editor-Code, so dass es auch perfekt reaktiv ist, für während der Entwicklung: Sie

Beachten Sie, dass - Gott sei Dank - Unity ist fantastisch .UI System ist natürlich reaktiv, und das, Gott sei Dank, kümmert sich um den UI-Aspekt von "modern frickin 'reactive game layout". (Wiederum ist es nicht wirklich so einfach, absolut Experte mit .UI zu sein, und das muss man sein. Und das ist absolut trivial im Vergleich zu "Game Layout Reaktivität") : /)

Noch einmal grundlegend - vergessen Sie nicht, es technisch auszuführen - gehen Sie auf eine Lösung wie "gleiche Geschwindigkeit über den Bildschirm" oder "immer mehr Bäume an der Spitze zeigen" - oder was auch immer? sehr schwierig

+0

Danke, das ist wirklich beruhigend zu wissen, dass alles basierend auf Bildschirmbreite und -höhe (wie Größe und Geschwindigkeit) und Platzierung basierend auf Kantenmarkierungen ein einigermaßen genauer Ansatz war. Ich dachte immer, dass etwas auf der Tatsache, dass alle Tutorials fehlten waren immer einfach peasy im Editor und ich dachte immer, es gäbe eine Magie, die mir fehlte. –

+0

Ja, Sie sind tatsächlich 100% richtig. Du verpasst nichts. Sie haben den Nagel auf den Kopf getroffen: Die "Hallo, Welt" -Beispiele, wie einfach es ist, "ein Spiel mit Unity zu machen", verpassen leider die Marke völlig. Deine Entdeckung ist genau richtig! Es ist einer dieser seltsamen "Elefanten im Raum", Dinge, die man einfach nie in Bezug auf Unity erwähnt. – Fattie

+0

Ich würde das vermuten: Unity hat bereits ihr (phantastisches) reaktives UI-System. Und das "neue" Spiel-2D-System von Unity (der letzten Jahre) ist ziemlich gut. Ich vermute, dass sie ein "reaktives" Konzept für das Spiel 2D-System einführen werden. Momentan hat jedes Team eine eigene Lösung - wie der obige Beispielcode, der Teil unserer "Lösungscodebasis" ist. – Fattie

Verwandte Themen