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

19.08.2015, 12:53

(Unity5) C# - Größe eines Rect

Hi@all
ich bin neu hier und hoffe auf ein bisschen Hilfe - Thx.
Ich habe ein kleines Mal & Zeichenprogramm - nix besonderes bzw. aufregendes, aber:
Das zeichnen erfolgt auf einem Rect
Dieses wiederum liegt über einem Paper-Sprite (eine Maltafel)
Wie bekomme ich es jetzt hin, das mein rect immer die Größe des Papers annimmt, damit ich die ggfls. tauschen kann.
Ich hab es über den Boxcollider des Sprites versucht - allerdings stimmen die Größenangaben nicht - naja, sie stimmen schon aber sind viel zu klein.
Der BoxCollider gibt eine Größe (Scale) von 15.5x8,5 zurück und wird auch so auf das Rect übertragen - ist aber viel zu klein im Verhältnis zum Paper 1024x768
Das Rect muss sich immer automatisch der Bildschirmgröße und dem Papier anpassen.
Hoffe es ist verständlich :-)
Hier mal mein Snippet an Code:
public Rect board;
public GameObject paper;

publicvoid initBoard()
{
//print (paper.GetComponent<BoxCollider2D>().size);
board.size = paper.GetComponent<BoxCollider2D> ().size;

board.x = Screen.width / 2 - board.size.x / 2;

board.y = Screen.height / 2 - board.size.y / 2;
}
Thx@all

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

19.08.2015, 13:07

Hallo!
Ich verstehe dein Problem nicht, und den Anderen wird es wohl ähnlich ergehen.
Kannst du bitte einen Screenshot bzw. ein erklärendes Bild hochladen?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

19.08.2015, 13:25

Ich kann bei der Beschreibung auch nur wild raten:

Was man häufig übersieht ist die Umrechnung von Pixel -> World Scale. Wenn man sich das Sprite bei den Assets anschaut, gibt es dort einen Pixel to World factor, der standardmäßig auf 100 steht. Bei 1024x768 wäre das von dem Sprite erzeugte Game Object 10,24x7,68 Einheiten groß (bei Skalirungsfaktor 1 auf allen Achsen).

4

19.08.2015, 13:47

Ich kann grad kein Bild direkt einfügen bzw. hochladen.

@Tobiking
Ich denke das ist es - muss ich mal prüfen, also quasi meine BoxCollider-Werte * 100.
Thx

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

19.08.2015, 13:56

Vergiss deinen BoxCollider. Solltest du mit den UI-Komponenten des neuen UI Systems arbeiten, dann hast du einen RectTransform an dem jeweiligen GameObject und dieses wiederum besitzt Breite und Höhe.
Im Zweifelsfall kannst du über die Sprite/Textur an Skalierung und "PixelToWorld"-Faktor kommen, um die Auflösung zu berechnen.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

6

19.08.2015, 14:20

Soweit so gut,
meld mich nochmal, muss grad los.
Thx

7

19.08.2015, 15:15


(Link)


Der kleine schwarze Bereich im CameraView ist das rect mit Größenwerten vom BoxCollider des Papers (grüne Linie)
Das Rect muss immer abhängig vom Sprite sein, da diese unterschiedlich sein können(sollen)
Hier eben dieses Papier, Die Papiergröße kann hier allerdinggs nicht genommen werden, da ja nicht bemalbare bereiche vorhanden sind, slo dacht eich mir ich könnte das über BoxCollider einstellen.
Wenn ich jetzt aber die Werte des BoxCollider*100 nehme funktioniert das nur in der Vollbildansicht, mache ich ddas Viewfenster kleiner bleibt die die Größe des RECt auf voller größer, was natürlich auch nicht geht.
???
Verstanden ?
Thx für Hilfe

8

20.08.2015, 22:58

Oder anders gefragt :-)
Wie bekomme ich es hin, das nur auf der Tafel (innerer Bereich) gemalt werden kann (leicht abgerundete Ecken bachten) ???

(Link)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

21.08.2015, 00:15

Du arbeitest mit dem neuen UI System, oder? Die Tafel selbst wäre dabei ein Bereich, der über sein RectTransform richtig positioniert und skaliert wird. Genauso wird innerhalb des Bemalbaren Bereichs ein Objekt platziert, welches über das richtige Setzen der Anker skaliert wird. Das 2. Objekt (oder eher dessen RectTransform) hat dadurch die richtige Größe, die, sofern erforderlich, per Code ausgewertet werden kann.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

10

21.08.2015, 21:09

Hi@all,
bin fast am verzweifeln, krieg es einfach nicht hin.
Hab jetzt schon googlerunde Augen und Ohren, doch nichts führte bisher zum Ziel.
Entweder ist die Zeichenfläche zu groß oder zu klein, dann, wenn ich den Viewport ändere verschiebt sich das Rect und bleibt nicht in der Mitte.
Es muss doch irgendwie möglich sein dieses blöde Rect so zu definieren, das es immer in der mittig ist und sich dem Viewport anpasst bzw. sich dem Zeichenobjekt (hier die Tafel bzw. das Papier) anpasst.
Bitte, wenn möglich mal ein bisschen Scriptcode als Denkanstoß, ich komm nicht weiter.
Thx@all

Werbeanzeige