Jump to content
Unity Insider Forum

Heiner Müller

Members
  • Content count

    10
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Heiner Müller

  • Rank
    Member
  1. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Guten Tag, ich wollte Ihnen gestern mit einer Antwort zuvorkommen, versäumte es aber. Endlich habe ich verstanden, was und wie wichtig PPU sind. Ich konnte zuerst nichts damit anfangen, schob das Thema zu Seite und quälte mich mit diesen ominösen UNITY-Units. Nun ist mir einiges klarer, ich stochere nicht mehr so sehr im Dunkeln herum. Meine letzten Posts sind mir jetzt regelrecht peinlich, unwissendes Anfänger-Gebrabbel... >> ... dass die Einheiten innerhalb des Canvas einem Pixel entsprechen. << Danke für den Tip, war mir nicht bewusst. Das jetzige Projekt arbeitet mit Sprites, ohne Canvas. Das Problem mit dem Objekt wurde durch eine negative Z-Position durch meine Unachtsamkeit verursacht. Ich liess einen Vector durch ScreenToWorldPoint(v) umrechnen und Z war danach -9. Ich war mir sicher, dies überprüft zu haben. Ich werde mich die nächste Zeit mit dem Thema Skalierung beschäftigen müssen. Ich weiss nicht genau, wie ich das Bild/die Szene an die entsprechende Auflösung anpasse. Ich fürchte, da wird die eine oder andere Frage meinerseits and Sie auf zukommen... Tausend Dank für Ihre Zeit. Und Ihre Geduld.
  2. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Ein kurzer Nachtrag, bitte. Ich habe immer noch auftauchende Probleme mit den Koordinaten-Systemen. Ich möchte z.B. die Größe des Objekts auf 16x8 Pixel ändern und versuche es folgendermaßen: SpriteRenderer rend = g.GetComponent<SpriteRenderer>(); Vector2 vs = new Vector2(16, 8); vs = Camera.main.ScreenToWorldPoint(vs); rend.size = vs; ...und das Objekt ist riesengroß. Was mache ich falsch?
  3. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Guten Morgen, Nun stellt mich UNITY wieder vor ein Rätsel. Ich erzeuge im laufendem Programm im Script ein Objekt aus einem Prefab. Dieses Objekt ist in der Szenenansicht sichtbar, in der Gameansicht jedoch nicht. Das Objekt interagiert in der Gameview mit seiner Umwelt - Schläger, welcher einen Ball schlägt - ist aber dort nicht zu sehen. Wenn ich dieses Objekt im Editor aus dem Assetordner in die Szene ziehe, ist es in der Gameview sichtbar. Das Objekt setzt sich zusammen aus SpriteRenderer, Box-Collider 2D, Rigidbody 2D nebst einem Script. Ich habe den Sortinglayer überprüft, die Z-Order, GetComponent<Renderer>().enabled = true, xxx.setActive(true), das Objekt bleibt hartnäckig unsichtbar. Es funktioniert aber, also ist es da, nur unsichtbar. Was habe ich nun wieder übersehen? Bitte erleuchten Sie mich...
  4. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Guten Abend, Wiederholt einen schönen Dank für Ihre Hilfe. Es lag tatsächlich an dem Raycast-Target. Ich meine zwar, es damit versucht zu haben, bin mir aber dessen nicht mehr sicher. In einem Testprojekt funktioniert es jetzt wie gewünscht, in meinem Zielprojekt jedoch noch nicht, ich hatte allerdings noch keine Zeit für eine nähere Betrachtung. Vermutlich werde ich das Layout umstellen müssen, was bei einem solchen Miniprojekt keine allzu große Herausforderung darstellen dürfte. ...Spricht der UNITY-Senior-Master-Composer... Ich kann jetzt Objekte zwischen zwei Panels verschieben, wobei mir klar wurde, dass ich die gewünschte Anordnung/Abtrennung der Elemente auch auf andere Art bewerkstelligt bekommen kann. Mal sehen, wie ich das handhabe. Wenn man weiss, wo oder wonach man schauen muss, dann ist Unity eine wirkliche Schatztruhe an Helfern. Gefällt mir immer besser.
  5. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Hallo, Jetzt quält mich doch wieder etwas seit längerer Zeit. Meine Szene besteht aus einem Canvas mit zwei Paneln als Child-Objekte darunter, auf dem Screenshot zu sehen als linker und rechter Teil. Jedes Panel hat ein eigenes Script und benutzt einen eigenen Button-Prefab mit jeweils eigenem Script, also P1 -> S1 und PF1 mit PFS1, P2 -> S2 und PF2 mit PFS2. Ich schaffe es, im rechten Teil Drag and Drop zu benutzen, also z.B. die Glühbirne im rechten Teil - rechten Objekt - zu verschieben. Desgleichen funktioniert im linken Teil mit den linken Objekten. Was ich absolut nicht bewerkstelligt bekomme ist ein Bewegen eines Objekts aus der rechten Seite zu der linken oder andersherum. Ich möchte z.B. die stylische Glühbirne rechts nacht links ziehen - das funktioniert - und dort droppen mit dem Effekt, dass das betroffende Feld zu einer Glühbirne wird. Ich weiss, dass ich diese Mutation des Feldes im Script lösen muss und habe auch schon eine entsprechende Funktion nebst Variablen. Mein Problem ist nun, dass auf der linken Seite der IDropHandler nicht aufgerufen wird. Haben Sie eine Idee, woran das liegen könnte? Wonach muss ich suchen?
  6. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Guten Abend, man mag es kaum glauben, aber jetzt funktioniert es. In einem Anflug von Verzweiflung ersetzte ich die Image-Tiles durch Button-Tiles. Ich hege jedoch den Verdacht, dass die Ursache woanders lag, nämlich bei mir, ich muss da etwas wichtiges übersehen haben. Ich erstellte zuerst ein Projekt mit Button-Tiles in einer GridLayoutGroup. Dort funktionierte alles. Dann übernahm ich alles in das eigentliche Projekt und darin funktionierte wieder das Aufrufen der OnClick-Methode nicht. Ich habe alles mehrfach geprüft, ich kann den Fehler nicht finden. Es muss einer vorliegen, jedoch kann ich ihn einfach nicht finden. Egal, jetzt klappt alles, was ich zu großen Teilen Ihnen zu verdanken habe. Zur Zeit habe ich keine weiteren Fragen. Falls doch noch welche auftauchen sollten, dürfte ich diese Ihnen hier in diesem Thread stellen? Danke sehr für Ihre Hilfe.
  7. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Hallo, Mein Sprite-Prefab, besser wäre die Bezeichnung Tile-Prefab, besteht nun aus einem Image-Objekt in der Hierarchie-Ansicht nebst einem Script. Das war auch beim Verfassen meines letzten Posts so, ich hatte mich nur verschrieben. Bei UI-Elementen verwendete man Images, nicht SpriteRenderer, das weiss doch jeder... Mein Game-Container ist nun einfach ein Canvas in der Hierarchie-Ansicht mit dem Hauptscript ohne ein umfassendes GameObject. Hinzugefügt habe ich eine GridLayoutGroup und einen Content Size-Fitter. Endlich funktioniert es so wie seit Tagen gewünscht: ich lese aus einer Datei die Level-Daten ein, erzeuge Tiles im Grid und weise diesen die entsprechende Bilddatei zu. In der GameView kann ich das Grid bestaunen, die Tiles besitzen die gewünschte Größe. Fabelhaft. Jetzt würde ich nur noch gerne in Erfahrung bringen, wie ich einzelne Elemente oder alle aus der GridLayoutGroup entfernen kann. Ich habe die instantierten Objekte in einer Liste gespeichert und lösche diese vor dem Neuaufbau des Grids mittels foreach -> Destroy(obj). Die GridLayoutGroup scheint davon unberührt zu sein, da sich anschließend die doppelte Anzahl an Elementen darin befindet. Man stelle sich nur vor, dies geschähe zehn- hundert- oder gar tausendfach - der ganze Speicher wäre vollgemüllt mit diesen Tiles. Dann würde ich gerne noch in Erfahrung bringen, welches Tile angeklickt wurde. In dem Tile-Script: void Update () { if(Input.GetMouseButtonDown(0)) { GameObject selObj = EventSystem.current.currentSelectedGameObject; if (selObj == null) return; if (selObj.gameObject.tag == "TILE") mainScript.tileClicked(selObj.GetComponent<scriptTileUI>().id); } } selObj ist immer = null. Können Sie mir sagen, woran das liegt? Immer wieder Danke für Ihre Geduld mit mir... Nachtrag: void Update () { if(Input.GetMouseButtonDown(0)) { GameObject.FindGameObjectWithTag("MAIN").GetComponent<scriptMain>().tileClicked(this.id); return; } } ruft für jedes vorhandene Element die Funktion tileClicked() auf. Wie kann ich dieses auf das tatsächlich aufgerufene Element beschränken? Nachtrag Nummer zwei: Die Elemente in dem Grid lassen sich löschen, die Invasion der Tiles konnte verhindert werden. Ich suche nur noch nach einer Möglichkeit, das angeklickte Tile zu bestimmen.
  8. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Hallo, nochmal vielen Dank für Ihre Mühe. Ich vergass zu erwähnen, dass es sich um 2D-Objekte handelt. Der Canavs war es. So etwas einfaches und so viel Ärger. Ihrer Erklärung gemäß ist es auch absolut einleuchtend warum man diesen benötigt. Ein, zwei Fragen seien mir bitte noch erlaubt, danach werde ich Sie nicht mehr behelligen: Ich erstellte zwei Objekte 1. spriteContainer = GameObject + Canvas + SpriteRenderer + scriptSprite.cs 2. gameContainer = GameObject + Canvas + scriptCanvas.cs mit Verweis auf Prefab spriteContainer Ich stellte fest, dass ich bei dem gameContainer das GameObject weglassen kann. Welche der beiden Möglichkeiten wäre die bessere? In dem gameContainer würde ich gerne eine Image als Hintergrund benutzen, diese verdeckt jedoch meine Sprites. Kann ich dies über Layer lösen? Oder sollte ich die Hintergrund-Image außerhalb des gameObjects als eigenes Objekt nutzen? Das waren jetzt schon drei Fragen... GridLayoutGroup ist das Element meiner Wahl, es erspart mir einiges an Aufwand. Das kommt dabei heraus, wenn man sich nach vielen Jahren Windows-Programmen und Datenbanken in die Welt der Grafikerstellung begibt. Mein erster großer Grafikkracher wird noch lange auf sich warten lassen: Danke vielmals, Sie haben mir ein ganzes Stückchen weitergeholfen.
  9. Heiner Müller

    Objekte befinden sich außerhalb des Sichtbereichs

    Hallo, Danke für die schnelle Antwort. Sie haben mir schon geholfen, ein kleiner Schubser in die richtige Richtung. In bin als Startpunkt von der Screen-Koordinate 0,0 - links oben - ausgegangen und dachte, sie wäre immer automatisch im sichtbaren Bereich der Kamera. Offensichtlich ist dem nicht so. Kann man diesen Sichtbereich manipulieren? Falls ja, wie? Das Transform--Objekt der Kamera liefert mir die Position der Kamera in der Szene, oder? Was genau bedeuetet Viewport? Ich weiss darüber, dass er relativ zum Parent-Objekt ist und von 0,0 links oben bis 1,1 rechts oben geht. Mir muss da etwas grundsätzliches entgangen sein. Egal welche Auflösung ich einstelle, die Objekte sind nicht zu sehen. In der Szenenansicht befinden sie sich jetzt bei Programmstart - bei 300x300 Pixel Auflösung - in der Mitte, sind in der Game-View nicht zu sehen. Nun gehe ich bei selektierter Kamera in die Menüleiste auf GameObject -> "Align with view" oder "Move to view" und die Objekte sind sichtbar in der Game-View. Kann man diese Funktion auch im Programm aufrufen?
  10. Hallo, Ich plage mich jetzt seit einigen Tagen mit meinem Problem herum und suche nun hier Hilfe. Zunächst sei gesagt, dass ich über Grafikerstellung und -bearbeitung nahezu kein Wissen verfüge. Daraus resultierend ergibt sich, dass ich nicht weiss, wonach ich suchen muss, da mir die Begrifflichkeiten fehlen. Mein Problem besteht darin, dass sich von mir im C#-Code instantierte Objekte immer außerhalb des Sichtbereichs befinden. Ich schaffe es nur, bei laufendem Programm, in der UNITY-Szenen-Ansicht die Kamera - den Viewport? - zu verschieben, so dass das Objekt auch in der "Game-View" erscheint. Hierzu nun zwei Fragen: Wie kann ich Objekte im sichtbaren Bereich erzeugen oder dorthin bewegen? Wie kann ich die Kamera oder den sichtbaren Bereich so verschieben/verändern, dass das Objekt in der "Game-View" erscheint. Ich verzweifle wirklich an dieser Trivialität und hoffe sehr auf Ihre Hilfe. Bitte keine Tips der Art "lies das liebe Handbuch", ich habe in den letzten Tagen soviel gelesen, dass es mir die Brille beschlägt.
×