Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.05.2014, 13:50

[Unity] Verschiedene Auflösungen

Hallo liebe community,

ich hab folgendes Problem:

Ich habe für mein Game einen Background(1530 x 1020 px) und füge diesen in meiner Szene als Sprite ein, weil ich ja einen Background haben möchte.
Nun möchte ich natürlich, dass der Background im Full Screen modus ist unabhängig von der gerade gewählten Auflösung.

Ich habe auch schon stundenlang gegooglet und selber versucht, aber es funktioniert nie, dass er unter verschiedenen Ratio's den gleichen Background zeigt. Wenn ich die Ratio umstelle von 16:9 auf 4:3 zum Beispiel dann ergeben sich blaue Ränder oder dergleichen. Gleiches Spiel, wenn ich es im Standalone(1024 x 768 px) laufen lasse, dann sehe ich zwar keine Ränder sondern nur einen Teil des Backgrounds. Im Prinzip versteh ich nur nicht wie ich meine Sprites in Unity allgemein so skalieren kann, dass sie unter verschiedenen Auflösungen und Ratios immer die gleiche Form und Aussehen haben(abgesehen von Verzerrungen o.ä. bei zu hoher Skalierung etc.).

Wäre echt Klasse, wenn jemand dazu eine Idee hätte, würde mich riesig freuen, thx :)

Gruß,
ProgFrog

2

27.05.2014, 14:34

Gestern erst ein, meiner Meinung nach, sehr gutes Video dazu gefunden: hier
Ist zwar nicht direkt auf Unity bezogen, aber das Verfahren ist das selbe ;)
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mirac« (27.05.2014, 14:54)


Invius

Frischling

Beiträge: 23

Beruf: IT Fritze

  • Private Nachricht senden

3

27.05.2014, 15:10

also da gibt es gleich mehrere Möglichkeiten aber die hängen davon ab wie du das Sprite anzeigst ... ?

GuiTexture, GuiLayout Element oder wie halt.
Ein bisschen code wäre hilfreich.
GuiSkin Grafiken werden normalerweise genauso skaliert wie das zugehörige Element ....

aber warum soll das mit GUI Texture nicht gehen ?

GUI.DrawTexture(new Rect((posx,posy,Screen.width,Screen.height),Texture);
bzw:
GUI.DrawTexture(new Rect((0,0,Screen.width,Screen.height),Texture);

http://answers.unity3d.com/questions/613…texture-in.html

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Invius« (27.05.2014, 15:22)


4

27.05.2014, 15:34

Ich habe die Sprites unter GameObject->CreateOther->Sprites erstellt. Ich möchte nicht GUITexture verwenden, weil ich mir nicht sicher bin, ob man da Animationen einbauen kann. Außerdem lese ich überall, dass Unity die Sprites extra für 2D Gameplay eingebaut hat. Aber ich weiss, dass es mit GUITextures einfacher wäre, vor allem, weil sie mit dem ViewPort arbeiten und auch eine Pixel Inset Eigenschaft haben, aber ich glaube nicht, dass es der richtige Weg ist jedes GameObjekt als GUITexture darzustellen.

Was ich probiert hatte:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
var spriteRenderer = GetComponent<SpriteRenderer>();
    if (spriteRenderer == null)
            return;

transform.localScale = new Vector3(1, 1, 1);

var width = spriteRenderer.sprite.bounds.size.x;
var height = spriteRenderer.sprite.bounds.size.y;

var worldScreenHeight = myCamera.orthographicSize * 2.0;
var worldScreenWidth = myCamera.aspect * worldScreenHeight;

transform.localScale = new Vector3((float)worldScreenWidth / width, (float)worldScreenHeight / height, 1.0f);


Meine Idee dahinter war, dass ich mir die jeweilige Screenhöhe speichere und die Screenbreite in Abhängigkeit von der Höhe und Ratio ausrechne - beides jeweils in World Coord.
Dann skaliere ich damit mein Sprite, aber natürlich aus dem Verhältnis zwischen tatsächlicher Screenhöhe/-breite und tatsächlicher Spritehöhe/-breite.

@Mirac: Danke, aber das ist viel zu allgemein gehalten für mich.

Invius

Frischling

Beiträge: 23

Beruf: IT Fritze

  • Private Nachricht senden

5

27.05.2014, 16:10

ok vielleicht verstehe ich dein Szenario nicht ganz wundern tut mich das hier:

var worldScreenHeight = myCamera.orthographicSize * 2.0;
var worldScreenWidth = myCamera.aspect * worldScreenHeight;

orthographic size ist ja die Hälfte des erfassten Screens von daher OK
Camera Aspect erscheint mir da jetzt irgendwie unnötig kompliziert.
Ich nehme an du hast:

var worldScreenHeight = Screen.height;
var worldScreenWidth = Screen.width;

bzw

transform.localScale = new Vector3(Screen.width / width, Screen.height / height, 1.0f);

ausprobiert ?

6

27.05.2014, 16:27

Naja,

der Gedanke hinter myCamera.aspect * worldScreenHeight ist einfach, dass falls sich das Seitenverhältnis zum Beispiel von 16:9 auf 4:3 ändert er das mit berücksichtigen soll, klappt aber iwie nicht und ich verstehe einfach nicht warum.

Und deinen Vorschlag habe ich noch nicht ausprobiert, weil ich vor allem dachte, dass transform.localScale einen Vector3 in WorldCoord. erfordert und nicht in Screen Coord.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

27.05.2014, 16:47

Gestern erst ein, meiner Meinung nach, sehr gutes Video dazu gefunden: hier
Ist zwar nicht direkt auf Unity bezogen, aber das Verfahren ist das selbe ;)
Gott, ich fand das Video furchtbar. Schlechte Witze, wenig Grafiken zur Veranschaulichung. Und seine Lösung? Ja was nun, schneidet er was weg, bzw. blendet er was zusätzlich ein oder verzerrt er das Seitenverhältnis? Es bleiben nur diese beiden Möglichkeiten. Kam jetzt irgendwie nicht wirklich klar rüber. Die Aussprache des Worts "Ratio" ist ebenfalls furchtbar. Ich glaube davon werde ich schlecht träumen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

27.05.2014, 17:23

Mal kurz zum Verständnis:

Wenn ich eine .png file habe mit 600x1200 Maße und portiere diese in meine Assets rein und erstelle dann ein Sprite auf Basis dieser .png-file, hat das Sprite dann immer noch die Maße 600x1200 oder komplett andere. Weil ich bei transform.localScale immer Werte eingeben muss, die gar nicht logisch sind um das richtig zu skalieren.

Ich habe gerade einen Bildschirm mit 480x800 px Auflösung und wenn ich meinen Background mit 600x1200 draufpacke, dann füllt der Background trotzdem nicht den Bildschirm vollkommen aus wieso??

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ProgFrog« (27.05.2014, 17:38)


9

27.05.2014, 20:18

Okay, erstes Problem gefunden^^. Beim Arbeiten mit Sprites sollte man unbedingt auf die ImportSettings achten, bei mir war Max Size zu gering eingestellt, sodass er mein Image einfach herunter skaliert hat.
Allerdings versuche ich nach wie vor herauszufinden, wie man verschiedene Ratios und Resolutions handhaben kann. Denn ich habe zwar jetzt eine Ratio auf der mein Ergebnis ganz gut aussieht, wenn ich jedoch die Ratio ändere, tauchen direkt Ränder auf. Hoffe jemand kann mir weiterhelfen,

10

27.05.2014, 21:18

Gestern erst ein, meiner Meinung nach, sehr gutes Video dazu gefunden: hier
Ist zwar nicht direkt auf Unity bezogen, aber das Verfahren ist das selbe ;)
Gott, ich fand das Video furchtbar. Schlechte Witze, wenig Grafiken zur Veranschaulichung. Und seine Lösung? Ja was nun, schneidet er was weg, bzw. blendet er was zusätzlich ein oder verzerrt er das Seitenverhältnis? Es bleiben nur diese beiden Möglichkeiten. Kam jetzt irgendwie nicht wirklich klar rüber. Die Aussprache des Worts "Ratio" ist ebenfalls furchtbar. Ich glaube davon werde ich schlecht träumen.

Das tut mir leid, wollte jetzt nicht deine Träume verderben :whistling:
Ansonsten ja du hast recht die Witze sind mehr als flach, allerdings fand ich es schon verständlich
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Werbeanzeige