Jump to content
Unity Insider Forum

Rangliste

Beliebte Inhalte

Showing content with the highest reputation since 19.03.2023 in allen Bereichen

  1. Hallo, Ich wünsche euch allen ein Rundumsorglospaket .🔔🔔🔔🔔 ! Frohe Weihnachten! Gruß Jog
    3 points
  2. So, hier für euch einmal das Update von gestern in aller Kürze zusammen gefasst: Man kann sich jetzt aussuchen, ob man 2.5% RevShare bezahlt oder doch wie ursprünglich geplant pro Installation. Unity misst nicht mehr selber die Installationen. Will man nach Installationen bezahlen, übermittelt man die Zahlen selber. Es wird erneut in die TOS geschrieben, dass immer die TOS einer Engine-Version gültig bleibt. TOS-Updates gelten also nur für dich, wenn du auch ein Engine-Update machst. Wer auf 2022 LTS oder früher bleibt, ist von den Änderungen nicht betroffen. Ein paar kleinere Anpassungen, wie dass die Grenze, ab der man Pro kaufen muss, angehoben wird. Und der Unity Spash Screen wird jetzt auch für Personal-User optional. Ich finde das Modell für meinen Teil ganz gut. Also insofern, dass es, wäre es initial so angekündigt worden, insgesamt gut angenommen worden wäre. Der Vertrauensbruch ist damit aber leider nicht wirklich wieder gut gemacht. Punkt 3. ist enorm wichtig, aber eigentlich ist die ursprünglich geplante rückwirkende Änderung sowieso rechtlich mehr als fragwürdig gewesen. Und genau so einen Absatz hatten sie eben schon in der TOS, die sie klangheimlich versucht haben verschwinden zu lassen. Unity bleibt also ein Risikofaktor. Das letzte Mal haben sie sowas in der Art 2019 schonmal versucht, wenn ich mich recht erinnere. Es ist also durchaus möglich, dass sie etwas ähnlich blödes in vier Jahren nochmal durchziehen wollen. Und der Schaden ist halt auch schon da. Eine halbe Stunde vor dem Announcement der Änderungen hatte ich das hier im Postfach: Ob man also bei Unity bleiben will, muss jeder für sich selbst entscheiden. Ist halt immer noch eine unfassbar gute Engine. Mit unfassbar blöden Entscheidungen an der Spitze.
    3 points
  3. Moin an alle! Ich bin seit gestern in diesem Forum aktiv und moechte mein erstes (fast fertiges) Projekt in Unity vorstellen. Link zu einem youtube Video. Den Wuerfel habe ich mit Blender erstellt.
    3 points
  4. Die Alpha-Version vom ersten Boss ist fertig. Die Grafik für den Boss habe ich selber erstellt, aus bestehenden Grafiken aus dem Internet. Der Boss wird noch mehr Hitpoints bekommen als im Video:
    2 points
  5. Die Lösung ist trivial_ SoundAnButtonText.GetComponent<TextMeshPro>().color = gameController.colorViolet; Es hat nur das Pro gefehlt.
    2 points
  6. hallo Leute Ich konnte das Problem inzwischen selber lösen. Der Fehler war in der Hilfsfunktion, welche gleiche Parzellennamen finden sollte. Jetzt siehts so aus... Gruss, peachplayer
    2 points
  7. Okay, dann erkläre ich es dir halt. Meine Güte. Du hast nach einem Bereich gefragt, in dem man Teammitglieder finden kann. Eine Suche von weniger als 15 Sekunden auf der Forenhauptseite hätte dir die Antwort gegeben. Stattdessen machst du einen Thread auf, damit irgendjemand anders das für dich tun kann. Als Begründung dafür führst du an, dass der Bereich irgendwie nicht so aktiv aussähe. Ich bin nicht so ganz sicher, was du mit dieser Begründung aussagen willst - es sei denn, du bist auf der Suche nach einer Art VIP-Bereich, wo du dein Gesuch einem geheimen, aktiveren Zirkel vorstellen kannst. Daraus schließe ich, dass du entweder noch nicht ganz wach warst oder mich irgendwie verarschen willst. Und wie ich bereits sagte, wäre es ein leichtes gewesen, anhand der Forenregeln abzuleiten, warum in den Threads wenig Antworten zu finden sind. Also schließe ich des weiteren aus deiner fragwürdigen Begründung, dass du entweder dir die Forenregeln nicht durchgelesen hast (was immer einen tollen Eindruck macht) oder 1 und 1 nicht zusammenzählen kannst. Ob du es glaubst oder nicht: Ich bin kein Service-Mitarbeiter. Keine Ahnung, woher du den Eindruck gewinnst, als Mod müsse man ständig immer brav lächeln. Als Mod hat man genau eine Aufgabe: Dass Forenregeln eingehalten werden und Leute einander ein Mindestmaß an Respekt zeigen. Klar waren meine Antworten sarkastisch, aber das erlaube ich mir nun einmal bei Leuten mit Anfragen, bei denen ich mich fragen muss, ob da ein Scherzkeks oder ein drittes Feierabendbier spricht. Aber sind wir doch mal für einen Moment ehrlich: Wir wissen beide, wovon du dich wirklich angegriffen fühlst. Web3 ist schließlich die Zukunft, und jeder, der was anderes behauptet, ist ein dummer Hater. Deswegen bin ich ja auch einfach nur zu blöd, dein Genie zu verstehen, und es würde viel zu lange dauern, mir die Vorteile einer Technologie zu erklären, die nach all der Zeit nun wirklich jeder halbwegs Interessierte mit grundlegenden Lesekenntnissen verstanden hat. Die Möglichkeit, dass du einem Trend aufgesessen bist, der sich heutzutage nur noch über Wasser hält durch das restliche bisschen Unwissen von Leuten, die wirklich keine Ahnung von der Technologie haben, kann ja gar nicht sein. Ich sehe nirgendwo, dass du gebannt oder auch nur verwarnt wurdest. Ich mache mich nur gerne über Crypto-Bros lustig. Vor allem jene, die bis heute nicht verstanden haben, welche realen Vorteile Web3 in Spielen bringt: Gar keine.
    2 points
  8. Viele von euch werden es wohl mitbekommen haben. Unity ändert seine Preispolitik. Ab 2024 will Unity etwas vom Kuchen ab haben. Momentan ist es so: Man nutzt die Free Version von Unity. Bis zu einem Firmenverdienst von 100.000$ ist alles ok. Verdient man mehr, muss man eine Kaufversion erwerben. Man nutzt die Plus Version (kostet ~ 300€). Hier hat man bis zu 200.000$ keine Probleme. Verdient man mehr, muss man sich die Pro kaufen. Man nutzt gleich die Pro Version. Ab 2024 wird es so sein: Die Einnahmen sind jetzt nicht mehr auf die Firma bezogen, sondern auf das Spiel selbst. Egal welche Version man nutzt, die Einnahmen, die man mit einen Spiel generiert werden jetzt wichtig! Bei der Free Version gibt es eine Einnahmengrenze von 200.000$ (in den letzten 12 Monaten pro Spiel). Bei der Pro sind ein 1.000.000$ (in den letzten 12 Monaten pro Spiel). Zusätzlich zu den Einnahmen werden auch die Verkäufe des Spiels gezählt. Diese werden erst ab 2024 gezähl. Alles was davor Verkauft worden ist, soll nicht berücksichtigt werden. Es gibt ab dann keine Plus Version mehr. Nur noch die Free Version und die Pro bzw. Enterprise Version. Bei beiden Versionen gibt es einen Schwellenwert der verkauften Spiele, ab dem es überhaupt erst dazu kommen kann, dass Unity an dir mitverdienen wird. Die Free Version hat einen Schwellenwert von 200.000 Die Pro einen Wert von 1.000.000 Einheiten. Gezählt wird, wie gesagt ab dem Januar 2024 ab dann für immer. Was bedeutet das jetzt? Wenn ihr ein Spiel erstellt habt und es verkauft, dann wird jeder Verkauf gezählt. Sobald dieses Spiel irgendwann den Schwellenwert überschritten hat, ist eine Bedingung für den mitverdienst erfüllt. Ab jetzt wird geschaut ob ihr in den letzten 12 Monaten mehr als die Obergrenze verdient habt. Wenn nicht, müsst ihr auch nichts abgeben. Wenn es aber so ist, wird geschaut, wie viele Spiele ihr den letzten Monat verkauft habt. Und für jedes Spiel will Unity dann etwas von euch haben. Habt ihr die Free Version, dann müsst ihr (pro verkauftem Spiel im letzten Monat) 20 Cent bezahlen. Habt ihr die Pro Version, dann ist der Preis gestaffelt. Es fängt mit 15 Cent für die ersten 100.000 Spiele an und verringert sich dann auf 7 Cent und dann noch weiter. Die Enterprise hat noch billigere Tarife. Siehe Tabelle. Hier ein kleines Beispiel: Ihr habt die Free Version. Euer Spiel wurde insgesamt 210.000 mal verkauft. - Bedingung 1 ist erfüllt. Ihr habt damit in den letzten 12 Monaten 350.000$ eingenommen. - Bedingung 2 ist erfüllt. Im letzten Monat habt ihr 10.000 Spiele verkauft. Dann müsst ihr 10.000 * 0.2 = 2.000$ an Unity bezahlen. Im nächsten Monat wird wieder geschaut, wieviel ihr in den letzten 12 Monaten eingenommen habt. Seid ihr dann wieder über der Grenze, dann wird wieder geschaut, wieviele Einheiten verkauft wurden und von diesen Einheiten bekommt dann Unity wieder seinen Anteil. Fallt ihr aber aus der Obergrenze raus, weil die starken Verkaufsmonate jetzt länger als ein Jahr her sind, braucht ihr für dieses Spiel auch nichts mehr bezahlen. Ist das jetzt gut oder schlecht? Zum einen ist es gut, weil man jetzt pro Spiel berechnet wird und die Grenze nach oben geschoben wurde. Die meisten von uns werden niemals 200.000$ mit einem Spiel in einem Jahr einnehmen. Es ist aber auch schlecht, denn wenn man wirklich mal einen Glückswurf haben sollte und ein Spiel richtig abgeht, denn dann kann es richtig teuer werden. Den es ist ja so, dass Spiele von kleinen Studios für viel weniger Geld verkauft werden als die Spiele von den großen Studios. Es macht einen Unterschied, ob man die Einkommensgrenze mit ganz vielen billigen Verkäufen überschreitet, oder mit wenigen teuren. Wenn das Spiel 10$ kostete, dann sind 20 Cent pro Verkauf 2%. Bei 60$ sind es aber nur 0,3% ! Um die Einnahmengrenze zu sprengen muss man aber bei 10 Euro 6 Mal soviel EInheiten verkaufen. Und dies würde sich dann auch in der Kalkulation niederschlagen. Es ist also ein unfaires Prinzip, weil es nicht um den Preis einer Einheit geht, sondern nur um Summen. Was mich persönlich ärgert ist der Wegfall der Plus Version. Ich habe die eigentlich nur, weil ich das Unity Logo nicht im Intro haben wollte. 300€ waren ok. Aber knappe 2000€ für ne Pro zahle ich nicht. Jedenfalls nicht, wenn ich nicht an die Einnahmengrenze ran komme. Wenn ich da ran käme, dann würde ich die Pro kaufen, denn dann hätte ich die Grenze auf ne Million angehoben und da muss man erst mal hin kommen. Es gibt noch viele Unklarheiten, denn Unity sagt nicht, wie sie an die Zahlen der Einheiten kommt. Es ist klar, dass jedes Spiel an Unity was sendet. Aber was das alles beinhaltet weiß nur Unity selbst. Demoversionen sollen nicht mit einberechnet werden. Mehrfach installationen sollen auch nicht mit einberechnet werden. Wir werden sehen, was die Zukunft bringt.
    2 points
  9. Für alle, die sich immer noch wundern, warum der Backlash so groß ist: Ein Spiel zu entwickeln, vor allem eines, das Geld verdienen soll, ist oft eine Angelegenheit von mehreren Jahren. Manchmal eines, manchmal mehrere, manchmal sogar zweistellig. Wenn man ein Spieleprojekt anfängt, und sogar noch mehr wenn man ein Studio aufbaut, das man dann nach und nach mit Menschen bestückt, die Spiele entwickeln können, dann ist die Wahl der Engine ein extremes Committment. Man geht, auch wenn man zuerst vielleicht nix bezahlt, eine Partnerschaft mit der Engine ein. Sollte Unity morgen nicht mehr existieren, würden dadurch in sehr vielen Studios überall auf der Welt jahrelange Arbeit und unfassbare Mengen an Geld über Nacht einfach weg sein. Deshalb ist die Wahl einer Engine für ein Spiel oder ein Studio etwas, das extrem auf Vertrauen basiert. Egal, wie gut die Engine ist - wenn die Firma dahinter nicht vertrauenswürdig ist, erhöht sich dadurch das Risiko, dass dein Projekt in die Brüche geht. Du setzt deine Existenz und/oder die deines Teams aufs Spiel. Was Unity diese Woche gemacht hat, ist ein unfassbarer Vertrauensbruch. Sie haben eine dumme Änderung angekündigt. Eine gute Metrik für die Bezahlung einer Middleware wie Unity ist immer "wenn du gewinnst, gewinnen wir mit dir". Auch wenn es sich um einen Randfall handelt (laut Unity selbst aber immerhin stolze 10% aller Entwickler!), dass man auf viele Installationen und niedrige ARPU (average revenue per user) setzt, hat das Unity-Management hier bewiesen, dass sie diesen Grundgedanken nicht verfolgen. Wer diese valide Schiene bisher gefahren ist, kann mit Unity schlicht keinen Gewinn mehr erzielen. Diese Entscheidung ist ein Beweis dafür, dass Unity die Unterstützung aller Entwickler nicht als Priorität versteht. Das Vertrauen, dass Unity Einsicht zeigen sollte, sollten sie irgendwann mal dir mit ihrer Idiotie Schaden zufügen, ist damit weg. die Änderung extrem schwach kommuniziert. Die Veränderungen warn sehr unklar und auch jetzt sind noch entscheidende Fragen offen. Die technische Umsetzung unterliegt der Geheimhaltung. Und wie zum Geier eine vermutlich nach Hause telefonierende Engine überhaupt unter europäischem Datenschutz funktionieren soll, versteht auch keiner. intern von vielen Mitarbeitern schon vor der Veröffentlichung große Kritik geerntet. Es heißt, dass vieles von dem, was Leute jetzt entrüstet schreiben, bereits vor Dienstag intern angemerkt wurde. Es hieß wohl "Antworten kommen". Stattdessen wurde der Plan einfach umgesetzt. Viele Unity-Entwickler kündigen jetzt. bereits auf Twitter angekündigt, dass sie jedes Jahr die Preise re-evaluieren und anpassen wollen. Das Committment, unvorhersehbar und unzuverlässig zu sein, ist stark. angekündigt, dass diese Änderung auch Leute betrifft, die sich schon von Jahren für Unity entschieden haben. eine ältere Version der TOS (terms of service) auf Github klangheimlich gelöscht, die besagt, dass man eine neuere TOS-Version ablehnen kann, wenn man auf der entsprechenden Engine-Version bleibt. Sie halten sich also nach Möglichkeit nicht an ihr eigenes Wort. Wenn das nicht illegal ist, weiß ich auch nicht weiter. Um das einmal klipp und klar zu sagen: Unfgefähr niemand beschwert sich darüber, Unity mehr Geld geben zu müssen. Das Problem, das wir hier haben ist, dass Unitys Chef-Etage der Welt bewiesen hat, dass sie weder die Fähigkeit, noch das Interesse haben, vertrauenswürdig zu sein. Und diese Vertrauenswürdigkeit ist, wie gesagt, extrem wichtig für eine Engine. Selbst, wenn Unity alles morgen wieder zurück nehmen würde, würde mir jeder, der professionell in der Spielebranche arbeitet, unterschreiben, dass Unity seit dieser Woche einfach einen unfassbaren Risikofaktor darstellt. Das hat dann auch nix mehr mit beleidigt oder wütend zu tun - das ist einfach eine ganz übliche wirtschaftliche Kalkulation. Dass Unity für viele Anwendungszwecke immer noch einfach die beste Engine ist, wird sie auf lange Sicht nicht davor retten, jetzt zunehmend in der Versenkung zu verschwinden. Mehr und mehr Studios kehren Unity den Rücken zu, also werden weniger und weniger Unity-Entwickler gesucht. Wer heute in die Spieleentwicklung will, kann sich gerne Unity anschauen, aber tut gut daran, mindestens noch eine andere Engine kennen zu lernen. Auch nicht zuletzt, weil Unity im Gegensatz zu mehreren Konkurrenten in den letzten Jahren technisch ziemlich stagniert ist. Glaubt mir bitte, dass ich hier nicht irgendwie leichtfertig Unity schlecht Rede. Ich benutze diese Engine seit 2008. 15 Jahre. Seit Version 2.3. Wenn Leute sich öffentlich entrüstet von Unity abwenden, dürft ihr davon ausgehen, dass hier nicht einfach nur die Gefühle hochkochen. Wegen wütend werden wirft man nicht 5, 10, 15 Jahre Erfahrungen über Bord. Ich schaue mir für mein aktuelles Hobbyprojekt gerade Godot an. Das passt ganz gut zum Projekt. Ansonsten warte ich ab, was mein neuer Arbeitgeber für das Studio entscheidet. Vielleicht bleibe ich ja dann dort bei Unity. Aber ein gutes Wort für sie einlegen werde ich, abgesehen von Fakten, in dieser Sache nicht.
    2 points
  10. Hi, meinst du sowas? Vector3 direction = mousePosition - origin; Vector3 target = origin + Mathf.Min(targetLength, direction.magnitude) * direction.normalized;
    2 points
  11. Hallo, ich beende erstmal meinen Retro-Plattformer. Es sollten insgesamt 10 Level werden. Allerdings sind mir jetzt keine vernünftigen Maps mehr eingefallen. Somit sind es sieben unterschiedliche Maps geworden. Ich denke das reicht um es als „fertig“ spielbar zu bezeichnen. Wenn ich noch ein paar zündende Ideen für weitere Level habe, dann setze ich die einfach dazu und gibt eine neue Version. Das Spiel ist mit Tastatur und Gamepad (empfohlen) spielbar. Die Tastaturbelegung habe ich von ADWS auf die Pfeiltasten geändert. Somit kann dann mit beiden Händen gespielt werden. Das war bei der ersten Version noch nicht der Fall. Hier der Download zum Spiel: Cunning Fox 1.0.0
    2 points
  12. Ohne eine halbwegs brauchbare Beschreibung des Problems wird das nix.
    2 points
  13. Aaaalso... Vererbung würde so aussehen: public abstract class AbstractMenu { public abstract void show(); } public class BookMenu extends AbstractMenu { @Override public void show() { System.out.println("Bücher"); System.out.println("======"); System.out.println("Gib den Namen eines Buches ein."); } } Und dann nutzt man das so: AbstractMenu menu = new BookMenu(); menu.show(); Das ist halt Polymorphie - du hast irgendein Objekt, dessen Klasse von einer Superklasse erbt. Aber du hast im Zweifelsfall keine Ahnung, welche der erbenden Klassen es ist. Du weißt nur die Superklasse (AbstractMenu) und weißt deshalb, dass du eine Methode "getName" hast, die du aufrufen kannst. Du baust dir also eine Variable, die irgendein Menü referenziert, und sagt diesem Menü, dass es sich anzeigen oder auf einen Input reagieren soll. Das implementierst du dann auf dir beliebige Weise anstatt von "getName". Weiß ja nicht, wie das aussehen soll. public class Game { private AbstractMenu currentMenu; public void openMenu(AbstractMenu menu) { currentMenu = menu; currentMenu.show(); } } Das geht ganz gut und ist, wenn man den Dreh erst mal raus hat, auch ziemlich intuitiv. In der echten Welt haben wir ja auch immer Dinge, die einer übergeordneten Klasse angehören: Feuerwehrautos, Polizeiautos und Sportwagen sind alles Autos. Und deshalb weißt du, dass du ein Lenkrad vorfinden wirst, egal, in welche Art von Auto du einsteigst. Komposition lässt dieses Konzept erst einmal links liegen und sagt "es gibt halt ne Klasse und die enthält Daten, und diese Daten bestimmen dann das Verhalten. Das ist das, was Unity mit GameObjects und Komponenten macht, aber es müssen nicht immer gleich Komponenten sein. public final class Menu { private string openText; public Menu(string openText) { this.openText = openText; } public void show() { System.out.println(openText); } } Hier hast du eine Menu-Klasse. Sie ist nicht abstract, und es wird nicht davon geerbt (darum auch gleich final). Du fütterst sie einfach mit Daten, und dann macht sie damit etwas. Anstatt sowas zu machen: AbstractMenu mainMenu = new MainMenu(); AbstractMenu bookMenu = new BookMenu(); machst du dann: Menu mainMenu = new Menu(mainMenuText); Menu bookMenu = new Menu(bookMenuText); Natürlich muss man die Daten nicht unbedingt über einen Konstruktor rein füttern, sondern könnte das Objekt sich Sachen aus einer Datenbank/Datei auslesen lassen oder mehrere Setter-Methoden aufrufen oder so. Komposition ist manchmal besser, weil es Fälle gibt, wo Vererbung auf seine Grenzen stößt. Wenn du z.B. zwei sehr ähnliche Menüs hast, bei denen sich ein spürbarer Teil ihres Codes überschneidet, dann kannst du eine gemeinsame Superklasse machen: public abstract class MediaMenu extends AbstractMenu { // Hier kommt das Zeug hin, das alle MediaMenus gemeinsam haben } public class BookMenu extends MediaMenu { // Nur das Buch-spezifische Zeug } public class DVDMenu extends MediaMenu { // Nur das DVD-spezifische Zeug } Wenn dann aber die Überschneidungen anfangen, kreuz und quer zu gehen, oder sogar innerhalb einer Hierarchie Konflikte sind, dann wird's eklig. Z.B. könntest du eine Hierarchie haben wie ... > InteractableEntity > Vehicle > FlyingVehicle > Helicopter > ApacheHelicopter und jetzt merkste aber, dass du einen ApacheHelicopter haben willst, mit dem man nicht interagieren kann, weil er als Deko in einer gescripteten Sequenz funktionieren (aber sonst alles noch können) soll. Dann würdest du am liebsten die InteractableEntity aus dieser Kette heraus nehmen, kannst es aber nicht. Also musst du ein bool oder so in InteractableEntity einbauen, mit dem du alles, was diese Klasse macht, ausschalten kannst. Ist auch irgendwo Käse. Wenn du jetzt mal an Unity denkst: Da kannst du alle diese voneinander erbenden Klassen als einzelne Komponenten anlegen. Und wenn dein Code sauber ist, kannst du die Interactable-Komponente einfach vom GameObject löschen und poof! - du hast genau, was du willst. Das ist ein bisschen eine Zusammenfassung von diesem Artikel. Wenn du jetzt Komposition benutzen willst, dann ist das natürlich knuffig und nett, da Strings reinzustecken, aber Klassen können sich ja auch komplett in ihrem Verhalten unterscheiden. Das mit Komposition zu machen, da wird's überhaupt erst interessant. Du kannst z.B. Objekte mit bestimmten Verhalten in deine Menu-Objekte stopfen. Das kann dann sehr ähnlich zu Unitys Komponenten sein. Und man kann dann auch sehen, dass Vererbung trotzdem noch eine Rolle spielen kann, auch wenn es nicht mehr das "Leitkonzept" ist. In Unity gilt ja auch, dass MonoBehaviour von Behaviour von Component von Object erbt. Aber mal ein Beispiel. Du bist ja in der Konsole. Das heißt wohl, dass du string-Inputs hast und dann darauf reagierst, richtig? Das könnte man so machen: public final class Menu { private final Dictionary<string, AbstractReaction> reactions = new Dictionary<>(); public void addReaction(string input, AbstractReaction reaction) { reactions.add(input, reaction); } public void reactToInput(string input) { AbstractReaction reaction = reactions.get(input); if (reaction != null) { reaction.invoke(); } } } Dann kannst du dir deine Menüs so zusammensetzen (oder eben "komponieren"): Menu mainMenu = new Menu(); mainMenu.addRection("Bücher", new Reaction( ... )); Wie du jetzt Reactions baust, ist dir überlassen. Java kann ja seit ner ganzen Weile funktionale Dinge machen. Das wäre so ein grober Überblick
    2 points
  14. Dein Problem könnte sein, dass ein Destroy nicht sofort passiert, sondern erst nach ablauf des Update-Loops. Du zerstörst also den letzten Level, welcher aber bis zum Ende des Loops noch da ist, instanzierst einen neuen Level, hast jetzt also 2 Level gleichzeitig drin, suchst nach deinen Punkten, die jetzt 2 Mal drin sind, und findest die alten, schon gefundenen, Punkte. Jetzt erst wird der alte Level aus der Szene raus genommen und deine gefundenen Punkte sind weg. Was dir helfen könnte, wäre ein DestroyImmediate. Das wird aber ausdrücklich nicht empfohlen! https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html Suchen die Punkte doch einfach mal im LateUpdate und guck ob dann alles in Ordnung ist.
    2 points
  15. Leveldesign und Programmierung von mir, Grafiken sind aus dem Asset-Store.
    1 point
  16. Musik muss man nicht im Assetstore kaufen. Da ist die Auswahl eigentlich zu gering, denn Musiker sind nicht auf Gameengines spezialisiert. Ich kenne eine Musikerin aus GB, die unheimlich vielseitig ist und auch speziell für Inidieentwickler Musik produziert. Ihre Musik, wenn gekauft, ist Roaylity-free und kann dann überall genutzt werden. Hier mal der Link zu ihrer Pond5 Seite: https://www.pond5.com/de/artist/nicolemariet_
    1 point
  17. Hallo, mir gefällt dein Projekt schon recht gut. Für ein erstes Spiel kommst du ganz gut voran. Was du auf jeden Fall noch benötigst ist ein Schadensbalken für den Boss. So hofft man immer "hat er jetzt genug?". Ich finde aber auch, das die Anzahl der Hitpoints mehr als ausreichend ist.
    1 point
  18. Hallo, ich habe jetzt mein Projekt fertiggestellt. Tauche ein in die aufregende Welt des Einbruchs mit Ghostly Heist! Spiele als raffinierter Dieb, der zusammen mit seinem Partner "Karl Langfinger" vier riskante Missionen absolvieren muss. Navigiere durch vier spannende Locations, umgehe geschickt die Wachen und überwinde knifflige Hindernisse, die sich dir in den Weg stellen. Mit insgesamt vier Levels und drei aufregenden Spielmodi bietet Ghostly Heist Spielspaß und Nervenkitzel! Wage dich in die Dunkelheit und erlebe das Abenteuer deines Lebens. Hol dir jetzt Ghostly Heist und zeige, dass du das Zeug zum erfolgreichsten Einbrecher hast! - Vier unterschiedliche Umgebungen - 12 Missionen - Spieldauer etwa 1,5 Stunden Download und weitere Infos: https://grinseengel.itch.io/ghostly-heist
    1 point
  19. Ja! Das fügt sich besser ein und hat trotzdem kaum an Qualität verloren. Ob es mit den Skys vom Assetstore besser wäre? Weiss ich nicht. Denn dein Spiel, so wie es jetzt aussieht, ist ja "nicht" auf eine kleine Farbpalette ausgelegt. Wenn du da jetzt einen Sky einfügst, der nur wenige Farbabstufungen beinhaltet, würde sich das wahrscheinlich mit dem Rest beißen...vielleicht aber auch nicht... Andererseits hast du bei den Paralax-Skys, die im Paket mit drin sind, noch mal ein paar Ebenen mehr. Und das könnte wiederum noch mehr Tiefe bringen. Tja, ich bin da wohl keine große Hilfe!
    1 point
  20. Ok, gelöst. Das habe ich richtig verstanden, in NGO können NetworkVariablen nur angepasst werden, wenn der Spawn erfolgt ist. Aber über das OnValueChangeEvent kann man auch Client-Seitig nach dem Spawn auf die Anpassung des Wertes reagieren, so dass ich dieses Event als Trigger für die Visuals nutzen kann. Etwas umständlich und zunächst nicht ersichtlich, aber machbar... Viele Grüße Hellhound
    1 point
  21. Ich habe etwas an der Qualität gearbeitet. Der Spielercharakter ist ein Platzhalter. Bei den Feinden ist es noch nicht sicher. Der diagonale Boden ist nicht endgültig. Die Grafiken sind vom Asset Store. Was meint ihr? Ist die Qualität ok?
    1 point
  22. Hallo, Wünsche euch allen ein Kreatives, erfolgreiches und Stressfreies 2024.🥂🥂 Möge Unity den Ball flach halten.😉 Gruß Jog
    1 point
  23. Moin! Ich habe endlich die überarbeitete Version meines Unity-Singleton-Artikels fertig. Wer Singletons nicht kennt, sich fragt, was das eigentlich genau ist oder einfach nur potentiell seinen Horizont erweitern will, darf gerne Mal einen Blick riskieren. Und wer meint, dass man Singletons nicht benutzen sollte, erst recht http://blog.13pixels.de/2023/unity-and-the-mysterious-singleton/ Ich hatte 2019 schon einen Artikel darüber geschrieben, aber meine Ansichten zu dem Thema haben sich seitdem ein bisschen verändert. Der neue Artikel ist ein ganzes Stück objektiver und klarer in seinen Inhalten.
    1 point
  24. Grüß dich... ...da kann ich nur sagen "Boah". Schwer zu sagen, wo dein Problem liegt. Ich rate jetzt mal wild rum. Solltest du mal Langeweile haben, richte dir doch mal Git ein. Damit kannst du dann dein Projekt teilen und jeder kann es sich ansehen. Das macht es viel einfacher, setzt aber voraus, dass du dein Projekt halt, teilst. Das will nicht unbedingt jeder, aber in so einer Situation wäre es einfacher. Vor allem bei Dingen, die sich nicht nur auf Scripte beziehen ist das sinnvoll. Vielleicht hast du irgendwo einen Hacken vergessen, dich bei einem Parameter verschieben etc. 04:59 - eine Kondition für den Übergang gesetzt? Wechselt deine Animation von selbst von Default (orange) auf den Blendtree (grau)? Stimmt der Wert des Parameters? 06:47 - Threshold richtig eingestellt? Script - animator.SetFloat("horizontal", Input.GetAxis("Horizo")); "Horizontal" muss das heißen. Außer du hast deine Achsen umbenannt. Du kannst dir auch mal das Animations-Fenster auf einen zweiten Bildschirm legen und es beim Spielstart beobachten. Da kannst du schon einmal ablesen wann und wie das System in die nächsten Animation geht. Läuft der blaue Balken mehrmals durch, läuft er überhaupt einmal gesamt durch oder wechselt die Animation bevor der blaue Balken durchgelaufen ist?. Etc.
    1 point
  25. Donnerwetter, echt unglaublich, alle Probleme aufgelöst im Nichts. Alle Logik klappt, das Ratespiel kann ausgeführt werden. Habe intensiv studiert, um alle Abläufe zu verstehen und die Neuerungen richtig einzubauen. Besonders erstaunlich finde ich, dass nun plötzlich die Teilbilder richtig platziert sind, was wohl darin begründet sein könnte, dass das Programm die Teilbilder 0 bis 8 automatisch auf dem Display richtig verteilt, wenn man sie alle mit Schleife aufruft und, wie in Deiner Lösung, dann auf Buttonklick einzeln aktiviert (SetActive(true)). Das ist in dieser Form natürlich alles noch zig Nummern zu hoch, um selbständig zu solchen Lösungen zu kommen. Dennoch zeigt sich an diesem Dialog mit Sascha, wie wichtig so ein Forum und die damit aktiven Helfer, für einen Anfänger sind. Ohne dies wäre ich frustriert in der Sackgasse hängen geblieben und hätte resignierend abgebrochen. Habe so dabei nicht nur ein Projekt beenden können, sondern auch sehr viel gelernt, was bei nächsten Versuchen Anwendung finden kann. Also, habe tausend Dank, Sascha, für Geduld und Ausdauer, mit mir hierbei zu einem guten Ende gekommen zu sein. Bis zu einer nächsten Gelegenheit Peter
    1 point
  26. Wenn du dir jetzt noch die Regeln dieses Forenbereiches durchlesen würdest, wüsstest du vielleicht sogar, warum da keine Antworten stehen. Und nein, ich weiß nicht, wo man gut Leute für ein Web3-Projekt finden kann. Vor allem nicht heutzutage, wo dieser Trend zum Glück weitestgehend ausgestorben ist.
    1 point
  27. Ich habe es hingekriegt, ein Skript, das die Map kopiert und an die Tilemap angehängt ist. Die Position und die Ränder der Map stelle ich manuell ein. using UnityEngine; using UnityEngine.Tilemaps; public class GroundTilemapScript : MonoBehaviour { public GameObject tileMapPreflab; protected Tilemap tileMapComponent; protected Tilemap[] tileMapClone = new Tilemap[8]; public Vector2Int tileMapPosition; public Vector2Int tileMapSize; protected static bool hasDone = false; public Grid grid; public float tileMapBorderLeftPosition; public float tileMapBorderRightPosition; public float tileMapBorderTopPosition; public float tileMapBorderBottomPosition; // Start is called before the first frame update void Awake() { tileMapBorderLeftPosition = (float)tileMapPosition.x - (((float)tileMapSize.x) / 2f); tileMapBorderRightPosition = (float)tileMapPosition.x + (((float)tileMapSize.x) / 2f); tileMapBorderTopPosition = (float)tileMapPosition.y + (((float)tileMapSize.y) / 2f); ; tileMapBorderBottomPosition = (float)tileMapPosition.y - (((float)tileMapSize.y) / 2f); ; } void Start() { if(!hasDone) { tileMapComponent = tileMapPreflab.GetComponent<Tilemap>(); tileMapClone[0] = Tilemap.Instantiate(tileMapComponent); tileMapClone[0].transform.SetParent(grid.gameObject.transform); tileMapClone[0].transform.position = Vector2.left * tileMapSize.x + Vector2.up * tileMapSize.y; tileMapClone[0].transform.position += tileMapComponent.transform.position; tileMapClone[1] = Tilemap.Instantiate(tileMapComponent); tileMapClone[1].transform.SetParent(grid.gameObject.transform); tileMapClone[1].transform.position = Vector2.left * tileMapSize.x; tileMapClone[1].transform.position += tileMapComponent.transform.position; tileMapClone[2] = Tilemap.Instantiate(tileMapComponent); tileMapClone[2].transform.SetParent(grid.gameObject.transform); tileMapClone[2].transform.position = Vector2.left * tileMapSize.x + Vector2.down * tileMapSize.y; tileMapClone[2].transform.position += tileMapComponent.transform.position; tileMapClone[3] = Tilemap.Instantiate(tileMapComponent); tileMapClone[3].transform.SetParent(grid.gameObject.transform); tileMapClone[3].transform.position = Vector2.up * tileMapSize.y; tileMapClone[3].transform.position += tileMapComponent.transform.position; tileMapClone[4] = Tilemap.Instantiate(tileMapComponent); tileMapClone[4].transform.SetParent(grid.gameObject.transform); tileMapClone[4].transform.position = Vector2.down * tileMapSize.y; tileMapClone[4].transform.position += tileMapComponent.transform.position; tileMapClone[5] = Tilemap.Instantiate(tileMapComponent); tileMapClone[5].transform.SetParent(grid.gameObject.transform); tileMapClone[5].transform.position = Vector2.right * tileMapSize.x + Vector2.up * tileMapSize.y; tileMapClone[5].transform.position += tileMapComponent.transform.position; tileMapClone[6] = Tilemap.Instantiate(tileMapComponent); tileMapClone[6].transform.SetParent(grid.gameObject.transform); tileMapClone[6].transform.position = Vector2.right * tileMapSize.x; tileMapClone[6].transform.position += tileMapComponent.transform.position; tileMapClone[7] = Tilemap.Instantiate(tileMapComponent); tileMapClone[7].transform.SetParent(grid.gameObject.transform); tileMapClone[7].transform.position = Vector2.right * tileMapSize.x + Vector2.down * tileMapSize.y; tileMapClone[7].transform.position += tileMapComponent.transform.position; hasDone = true; } } private void OnDrawGizmosSelected() { Gizmos.color = Color.blue; Gizmos.DrawWireCube((Vector2)tileMapPosition, (Vector2)tileMapSize); Gizmos.DrawWireSphere((Vector2)tileMapPosition, 10f); } } Das an die GameObjects (Feinde, Kugeln und andere) angehängte Skript. Es berechnet die kürzeste Entfernung zum Spieler aus den möglichen Transportpositionen und nutzt diese Position für den Transport: using UnityEngine; public class CheckObjectPositionScript : MonoBehaviour { protected GameObject player; protected SupanthaPaul.PlayerController playerCheck; private Vector3 objectPosition; private Vector3 playerPosition; // Start is called before the first frame update protected virtual void Start() { player = FindAnyObjectByType<SupanthaPaul.PlayerController>().gameObject; playerCheck = player.GetComponent<SupanthaPaul.PlayerController>(); } // Update is called once per frame protected virtual void FixedUpdate() { bool change = false; objectPosition = transform.position; playerPosition = player.transform.position; float distanceObjectX = Mathf.Abs(objectPosition.x - playerPosition.x); float distanceObjectXRight = Mathf.Abs((objectPosition.x + playerCheck.tileMapSize.x) - playerPosition.x); float distanceObjectXLeft = Mathf.Abs((objectPosition.x - playerCheck.tileMapSize.x) - playerPosition.x); float distanceObjectY = Mathf.Abs(objectPosition.y - playerPosition.y); float distanceObjectYTop = Mathf.Abs((objectPosition.y + playerCheck.tileMapSize.y) - playerPosition.y); float distanceObjectYBottom = Mathf.Abs((objectPosition.y - playerCheck.tileMapSize.y) - playerPosition.y); if (distanceObjectX < distanceObjectXRight && distanceObjectX < distanceObjectXLeft) { } else if (distanceObjectXRight < distanceObjectXLeft) { change = true; objectPosition.x += (float)playerCheck.tileMapSize.x; } else { change = true; objectPosition.x -= (float)playerCheck.tileMapSize.x; } if (distanceObjectY < distanceObjectYTop && distanceObjectY < distanceObjectYBottom) { } else if (distanceObjectYTop < distanceObjectYBottom) { change = true; objectPosition.y += (float)playerCheck.tileMapSize.y; } else { change = true; objectPosition.y -= (float)playerCheck.tileMapSize.y; } transform.position = objectPosition; if (change) Debug.Log(gameObject.name +" "); } } Das dem Player beigefügte Skript: playerPosition = transform.position; if (playerPosition.x > tileMapBorderRightPosition) { playerPosition.x -= (float)tileMapSize.x; } else if (playerPosition.x < tileMapBorderLeftPosition) { playerPosition.x += (float)tileMapSize.x; } if (playerPosition.y > tileMapBorderTopPosition) { playerPosition.y -= (float)tileMapSize.y; } else if (playerPosition.y < tileMapBorderBottomPosition) { playerPosition.y += (float)tileMapSize.y; } transform.position = playerPosition;
    1 point
  28. Hallo Ich finde es echt gut, dass ihr das hier so begleitet. Für mich, der das wirklich nur zum Spaß für sich macht, ist das alles nicht so wichtig, aber interessant ist es natürlich trotzdem! Christoph
    1 point
  29. Jein. Aktuell nicht, aber da sie ja bereits gesagt haben, dass sie die ToS jederzeit nach Lust und Laune ändern wollen, kann immer noch alles passieren. Was nach dem aktuellen Stand (der sich durchaus wieder ändern kann) passiert ist, dass der Play Store dein Spiel zusammen mit allen anderen Unity-Spielen irgendwann einfach raus schmeißt, weil Unity-Apps gegen deren Regeln verstoßen. Aktuell sollen ja offenbar die Vertreiber, also Play Store, App Store, Steam usw. den Kram bezahlen. Das werden die ziemlich sicher nicht einfach so mit sich machen lassen. Ob existierende Apps, die z.B. seit dieser Woche auch keine Updates mehr kriegen, irgendwie geschützt sind... und sowieso alles andere... steht in den Sternen.
    1 point
  30. Hier ist noch ein älteres Projekt basierend auf Raycast:
    1 point
  31. Alles klar. Beim Installieren wird mit Unityhub ein "Standard Assets Example Project" angelegt. Das funktioniert nicht mit meiner Version, aber die Grafiken sind vorhanden. MfG
    1 point
  32. war ein böser Denkfehler. Sorry Christoph
    1 point
  33. Es gibt noch Vector3.ClampMagnitude, welches einmal das Berechnen der Quadratwurzel einspart. Ist vielleicht auch minimal lesbarer. Aber das sind nur minimale Optimierungen gegenüber @Antragons Lösung.
    1 point
  34. Vielen Dank für den Gedankenanstoß in Sachen Maskieren. Ich habe es mit einer Maske, die die in einer coroutine skaliert wird, umgesetzt. Eine Maske hat den Vorteil, dass ich nur eine einzige, unabhängig von der Farbe des Blocks, benötige. Nun entspricht der visuelle Effekt genau meinen Vorstellungen, also dem Original.
    1 point
  35. Moin! Beide Links 404en. Ist dein Repo privat?
    1 point
  36. Da mir das mit dem Highscoremodus zu aufwändig ist, habe ich diesen durch ein Erfolgssystem ersetzt. Hier fünf der zu erreichenden Erfolge. Es kommen noch weitere dazu.
    1 point
  37. Danke für die Infos, aber ich sehe da irgendwie keine Frage, auf die ich antworten könnte. Das einzige, was ich raten könnte: Den Inhalt von Input-Feldern kannste mit ".text = wasauchimmer;" ändern.
    1 point
  38. Hallo, irgendwann muss man loslassen. Mein kleines Siedlerspiel ist jetzt final. Ich hoffe ich habe die meisten Bugs gefunden und beseitigt. Jedenfalls stehen dem Spieler jetzt acht Missionen zur Verfügung in denen er seine Dörfer und Städte aufbauen und weiter entwickeln lassen kann. Ein Sandkastenmodus steht noch nicht zur Verfügung. Den werde ich aber noch nachschieben. Hier der Link zum Download der Version 1.0.0: http://www.pchobbyspieleschmiede.de/besiedlung/OrfayasBesiedlung_1.0.0.rar
    1 point
  39. Ach, in der Softwareentwicklung muss einem nichts peinlich sein Zu oft sieht man den Wald vor lauter Bäumen nicht, und dann kommt ein Kollege, wirft einen Blick drauf und findet den Fehler^^
    1 point
  40. Moin! Du hast halt den Knopf, mit dem man das Licht an macht, sogar rot markiert...?
    1 point
  41. Ich wünsche euch ein schönes Osterfest. In diesem Zusammenhang habe ich ein kleines Spielprojekt erstellt. Der Osterhase hoppelt durch die Stadt, sucht eifrig nach den Eiern matt. Doch überall sind Absperrungen, die seine Suche nur noch erschweren. Er hüpft um Zäune, springt durch Türen, versucht verzweifelt, Eier zu erspüren. Doch all sein Suchen ist vergeblich, die Eier scheinen unsichtbar, verschwiegen. Doch plötzlich, ach was ist das dort? Ein kleines Ei, versteckt am Ort. Der Osterhase ist voller Freud', hat doch noch ein Ei gefunden heut'. In diesem kleinen Knobelspiel müsst ihr dem Osterhasen helfen, alle in den Level verteilten Eier einzusammeln. Es erwarten euch 18 kleine Level, die teilweise zum Knobeln einladen: Hier der Downloadlink: Easter Adventure
    1 point
  42. Ich weiss woran es liegt. Und zwar ist das der Default Contact Offset in den Physics2D Einstellungen. Ich habe vor Jahren mal ein kleines Video dazu gemacht und da das bei den heutigen Unityversionen immer noch so ist, kannst du da ruhig mal rein schauen. Bei Minute 15 kommt das Entscheidende.
    1 point
  43. Korrekt! Aber du kannst Typen eben nicht nur über generische Parameter kommunizieren, sondern auch über einen normalen System.Type-Parameter. Statt public void Foo<T>() machst du public void Foo(System.Type type) Du kannst generische Parameter auch problemlos mit typeof() zu einem System.Type-Objekt umwandeln. So als Beispiel: public bool Foo<T>(System.Type type) { return typeof(t) == type; } Das gibt dann true zurück, wenn man das so aufruft: Foo<Light>(typeof(Light)) // oder Foo<Light>(GetComponent<Light>().GetType()) Umgekehrt braucht man halt leider Reflection und sollte das vermeiden. Aber man kann oft von der anderen Seite ankommen, z.B. so: class MyGenericClass<T> { public System.Type GenericType => typeof(T); } Objekte dieser Klasse geben die mit der Property "GenericType" den Typ zurück, den du beim Erstellen für T übergeben hast: var thing = new MyGenericClass<Light>(); Debug.Log(thing.GenericType.Name); // "Light" Damit geht eine ganze Menge. Du könntest zum Beispiel beim Start alle deine Objekte laden und sie in ein Dictionary packen. Das Dictionary kann so aussehen: private Dictionary<System.Type, List<MyGenericClass<>> genericClassObjectsByGenericType = new Dictionary<...>(); Und dann lädst du da alle geladenen Objekte rein und sortierst sie nach ihrem generischen Typ: foreach (var loadedObject in allLoadedObjects) { var type = loadedObject.GenericType; List<MyGenericClass<>> list; if (genericClassObjectByType.TryGetValue(type, out list)) { list.Add(loadedObject); } else { list = new List<MyGenericClass<>>(); list.Add(loadedObject); genericClassObjectByType.Add(type, list); } } Und wenn du dann alle Objekte eines bestimmten generischen Type haben willst, holst du sie dir einfach aus dem Dictionary: public List<MyGenericClass<>> GetAllObjectsForType(System.Type type) { return genericClassObjectsByType[type]; } Da fehlt noch die Ausnahmebehandlung, falls der Typ nicht gefunden wird. Und ich hab das jetzt so runtergetippt, kann sein dass die Syntax mit <> nicht ganz richtig verwendet wird. Aber ich hoffe, die Idee ist einigermaßen klar. Ja schon, aber eine Datenstruktur wachsen zu lassen ist besserer Stil als ein switch-case, das ständig erweitert werden muss. Vor allem, weil du bei einem Dictionary einfach mit der Schleife über alle Typen gehen kannst (siehe oben), anstatt deinen switch-case-Code jedes Mal anzufassen.
    1 point
  44. Hallo, ich hatte in der letzten Zeit Lust, neben meinen größeren Projekten, etwas „Kleines“ zu erstellen. Dabei ist die Wahl auf einen vertikal Space-Shooter gefallen. Wie gesagt, nichts umfangreiches, eher etwas für Zwischendurch mal etwas rumballern. Daher sind es auch nur 10 Level und wenn man alles durchgespielt hat, dann sind es evtl. 30 Minuten Spielzeit. Das kleine Projekt nennt sich Boreas Nebula und ist wieder mit Unity umgesetzt. Ganz fertig ist es noch nicht, aber schon mal komplett spielbar. Hier der Download, falls ihr mal reinschauen wollt. Boreas 0.9.1 Hier ein paar Screens:
    1 point
  45. Hallo, ein paar Neuigkeiten zu meinem Aufbauspiel Orfayas Besiedlung. Insgesamt sind es acht Mission geworden. Dazu werde ich noch zwei Freispielmissionen zur Verfügung stellen. Es wird jetzt nicht nur eine Bevölkerungsschicht geben. Neben den Siedlern gibt es Bauern, Arbeiter und Gelehrte. Die Gebäude, die der Spieler errichtet, werden unterschiedliche Gruppen von Bewohnern benötigen. So benötigt z.B. eine Kartoffelfarm Bauern und eine Kohlemine Arbeiter. Der Spieler muss für eine Gleichgewicht sorgen, damit alle Gebäude mit den benötigten Bewohnern versorgt werden. Das UI habe ich diesbezüglich überarbeitet. Somit kann der Spieler jederzeit sehen wie viele Siedler oder Arbeiter er aktuell hat. Hier ist der Download zur Version 0.7.0.: https://www.pchobbyspieleschmiede.de/besiedlung/BSO_0.7.0.rar Discord: https://discord.gg/PHZFBptfxJ In dieser Version sind es nur sieben Missionen, die spielbar sind. Die einzelnen Missionen sind auch noch nicht komplett fehlerfrei. Vom Gameplay her schon, aber ggf. sind noch ein paar Fehler im grafischen Aufbau vorhanden. Die werde ich aber noch mal konkret überarbeiten, wenn ich alle Missionen im Spiel habe.
    1 point
  46. Moin! Ich bin mir nicht ganz sicher mit "teilen sich dasselbe Material" meinst. Anhand der folgenden Fragen vermute ich, du meinst, dass da eine fortlaufende Textur zu sehen ist, die sich über mehrere Tiles erstreckt? Der Ansatz mit dem Mesh könnte theoretisch funktionieren, aber ich stelle mir das schwierig vor, das performant zu halten. Ich denke, der bessere Weg sind World Space-Texturkoordinaten. Shader haben ja Koordinaten, mit denen sie das Pixel der Textur finden, das sie an eine gegebene Stelle rendern wollen. Da das für die meisten Fälle Sinn ergibt, nehmen die meisten Shader dafür die UV-Map des 3D-Modells. Ein 2D-Objekt ist hierbei auch nur ein flaches 3D-Modell. Jedenfalls muss man dabei aber nicht bleiben - man kann den Shader beliebige Zahlen verwenden, nachschauen oder ausrechnen lassen, um diese als Texturkoordinaten zu verwenden. So kannst du z.B. auch einfach die World Space-Koordinate eines Pixels nehmen und diese als Textur-Koordinate nutzen. Ist zwar 3D, aber hier kannst du dir das mal ansehen: Wie du siehst, ist die Textur immer an derselben Stelle der Welt und nicht, wie sonst, des Objekts. Wenn er hier den Würfel kopiert und die Kopie neben das Original packt, dann passen die beiden Würfel direkt aneinander. Mit dieser Technik kannst du deine Tiles völlig beliebig in die Welt klatschen, und die Textur ist immer gleich. Wenn du dir mal deinen zweiten Screenshot genauer ansiehst, siehst du auch, dass das so gemacht sein dürfte. Denn die Textur wiederholt sich nach 16-order-so Tiles: Also, lange Rede, kurzer Sinn: Baue dir oder finde einen Sprite Shader mit World Space-Texturkoordinaten.
    1 point

Ankündigungen

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Neu erstellen...