Jump to content
Unity Insider Forum

Leaderboard


Popular Content

Showing content with the highest reputation since 06/14/2018 in all areas

  1. 6 points
    Hallo zusammen, ich habe die letzten 10 Monate neben einem Spiel auch an einem Video gearbeitet. Ich dachte mir, dass eventuell einige von euch das Thema interessieren könnten. Es geht um eine relativ stark verallgemeinerte Erklärung, wie eine Game Engine realistische Modelle/Materialien darstellt.
  2. 5 points
    so ich hab den Ritter aus der Daemonic Cathedrale ein wenig überarbeitet und die KI eingebaut .. der Kämpft jetzt mit Schild und wehrt Angriffe gerne mal ab .
  3. 5 points
    Version: 1.45 Entwicklerforum: Canyonbreed Forum DiscordChannel: https://discord.gg/NRaJKe2 Ein Respawnpunkt Ronith-4, ein sandiger Planet. Sandsturm im Zeitraffer
  4. 5 points
    Moin zusammen, wir bei PHOS Digital, mein Kollege und ich, arbeiten an einem "postapokalyptischen racing shooter" im Stil von Mad Max und Co. und ich möchte euch unseren Titel kurz vorstellen. Seit Anfang des Jahres arbeiten wir daran und noch sind wir mitten in der Preproduction, aber ich denke zum zeigen ist es schon ganz ordentlich. Wer Interesse an dem Titel gefällt, kann uns gerne auf www.phosdigital.com über den Newsletter folgen oder uns auf Facebook / Twitter finden. Es wird typische Rundenrennen und andere Spieltypen gegen KI oder Online Konkurrenten geben, in denen ihr euch gegenseitig bekämpfen könnt... Ob mit guten Zeiten oder Waffen, ist euch selbst überlassen. :-) Hier ein paar Screenshots
  5. 5 points
    Hey, Ich experimentier aktuell mit meiner eigenen Idee rum, Oberflächen aus Distanzfunktionen (signed distance function, SDF) zu generieren. Ihr könnt meinen Ansatz in diesem Thread verfolgen, falls ihr euch für so Voxel Zeugs interessiert: https://www.gamedev.net/forums/topic/697431-a-novel-approach-to-non-manifold-dual-contouring/ Im Grunde gehts darum Eckpunkte (vertices) durch Schnittpunkte von Oberflächenkanten (surface edges) ausfinding zu machen. Die 2D Methode scheint ohne probleme zu funktionieren, und ermöglicht so auch scharfe geometrische Features wie Ecken. (dabei ist's auch deutlich einfacher zu verstehen, als 2D Dual Contouring) Mit dem 3D Ansatz bin ich aktuell noch ein wenig am kämpfen, aber erste Ergebnisse gibts dazu auch schon, wie ihr hier nochmal sehen könnt:
  6. 4 points
    @appo Nö. Ich nehm nix zu ernst. Mir war egal, warum du so angepisst warst und wie viel der Handhabung du überhaupt schon weißt. In deinen weiteren Texten konnte ich aber erkennen, was dir nicht klar ist und deswegen habe ich ( obwohls mir relativ egal ist) mal ein Tutorial gemacht. Das könnte dir weiter helfen. Und nicht nur bei dem "wie" sondern auch bei dem "warum"!
  7. 4 points
    Hi, ich habe in den letzten zwei Jahren immer wieder an einem Flüssigkeit Simulations Shader gearbeitet und seit Mitte letzten Monats ist er jetzt im AssetStore erhältlich. Mit Fluid Flow kann man in Echtzeit simulieren wie beispielsweise Blut oder Farbe an einer Oberfläche herunter fließt. Es ist keine 100% physikalisch korrekte Simulation, sondern das Asset versucht mit möglichst geringen Performance Einbußen überzeugend Flüssigkeit zu simulieren. Dazu werden die Berechnungen mithilfe eines Compute Shaders auf die Grafikkarte ausgelagert. Compute Shader benötigen allerdings mindestens DirectX 11 oder OpenGL 4.3 support! Zudem sind Android und iOS momentan nicht unterstützt! Fluid Flow Echtzeit Flüssigkeit Simulation dynamisches Anpassen der Flussrichtung unterstützt animierte Objekte Tropfen* * werden asynchron von der GPU zur CPU gelesen. Dieses Feature gibt es erst seit Unity 2018.2, und mit OpenGL wird es nicht unterstützt! Demo (win): https://drive.google.com/drive/folders/1ewcJn2Cc56Pcg3IVXPgvDDYucfRrU2mg Asset Store: https://assetstore.unity.com/packages/vfx/shaders/fluid-flow-143786
  8. 4 points
    Ich denke, ich schreibe mal etwas dazu, auch wenn ich da Anfangs nicht so sicher war. Zu diesem Thema kursiert sehr viel Halbwissen und ich hatte keinen Bock, auf den Zug mit den Fackeln und Heugabeln aufzuspringen, bevor ich nicht das Gefühl habe, etwas besser informiert zu sein. Eine Kampagne wie die von Roman ist sicherlich gut, denn so oder so braucht das Thema so viel Aufmerksamkeit, wie es kriegen kann. Lasst euch aber nicht von reißerischen Phrasen wie "das Internet wird abgeschafft" oder "da wird unsere Meineungsfreiheit abgeschafft" triggern, ohne das Ganze mal zu hinterfragen. Hier also meine zwei Groschen dazu. Artikel 13 ist ein Entwurf für eine Gesetzesänderung, die EU-weit inkrafttreten soll. Sie soll Rechteinhaber von urheberrechtlich geschützen Werken unterstützen, dass die Einnahmen, die ihnen für die Werke zustehen, auch bei ihnen ankommen. Es geht hierbei nicht um eine Verschärfung des Urheberrechts. Was vorher nicht erlaubt war, ist immer noch nicht erlaubt (z.B. die Verbreitung von Filmen ohne entsprechende Lizenz), was vorher erlaubt war ist immer noch erlaubt und was vorher Grauzone war ist das theoretisch nach wie vor (z.B. Derivate und Parodien, inklusive Memes). Aktuell ist der Nutzer einer Plattform derjenige, der sich bei Gesetzesverstößen strafbar macht. Wenn hier ein User den neuen Marvel-Film hochlädt, dann macht er sich strafbar. Wenn wir den dann sofort löschen, dann sind wir als Plattformbetreiber auf der sicheren Seite. Der Entwurf sieht im Kern genau eine Sache vor: Die Strafbarkeit für Urheberrechtsverletzungen auf den Betreiber der Plattform auszuweiten. Das heißt, dass wenn hier ein User ein geschütztes Werk hochlädt, wir dafür verklagt werden können, obwohl wir selber keinen Verstoß begangen haben. Anderen solcherlei Verstöße zu auch nur im Ansatz zu ermöglichen, soll in Zukunft ebenfalls ein Vergehen sein. Daran finde ich für meinen Teil in der Idee nicht wirklich etwas auszusetzen. Das Internet funktioniert eben anders als analoge Medien und ermöglicht es überhaupt erst einmal, unmoderierte Plattformen anzubieten. Was immer in der Zeitung oder im Radio landet, läuft eben immer schon durch einen menschlichen Filter. Das Problem mit der Reform ist in ihrer aktuellen Fassung die Implementation der Forderungen. Ja, es wird zu keinem Zeitpunkt das Wort "Uploadfilter" erwähnt, obwohl es überall benutzt wird, um Leute anzustacheln. Aber schauen wir uns doch direkt mal das für uns alle am ehesten interessante Beispiel an: Unity-Insider. Es gibt einen kleinen Absatz, der kleinere Plattformen vor der Verantwortung schützen soll. Dieser Absatz verlangt, dass die Plattform nicht älter als drei Jahre ist und nicht mehr als 10 Mio. Euro pro Jahr eingenommen hat. Alleine, weil es Unity Insider schon eine Weile gibt, sind wir dadurch nicht geschützt. Es ergibt sich daher für uns die Herausforderung, mit "technischen Mitteln" sicherzustellen, dass keine Sekunde lang Urheberrechtsverletzungen in diesem Forum passieren. Und da gibt es potentiell drei Möglichkeiten: Wir machen einen Pauschaldeal mit Verwertungsgesellschaften, wie Youtube einen mit der Gema hat. Dafür gibt es keinen standartisierten Weg und würde vermutlich eine Menge rechtskräftiger Unterstützung bedürfen. Es ist nicht davon auszugehen, dass wir in der Lage sind so etwas zu erwirken. Uploadfilter. Wir müssten ein Stück Software besorgen, der auf irgendeine Art jeden Forenbeitrag überprüft und checkt, ob eine Urheberrechtsverletzung vorliegt. Wir stellen das Forum so ein, dass wir manuell jeden Post freischalten müssen. Merkste selbst. 1. und 3. kommen absolut nicht in die Tüte. 2., also Uploadfilter, sind extrem problematisch, und das aus zwei Gründen: Es gibt sie nicht in verfügbarer Form. Google hat auf Youtube das "Content ID"-System laufen, ansonsten gibt es diese Software einfach nicht. Woher sollen wir die kriegen? Wie viel würde sie kosten? Selber schreiben kommt höchstwahrscheinlich nicht infrage. Darüber haben sich die Befürworter des Entwurfs scheinbar keine Gedanken gemacht. Selbst Youtubes "Content ID" ist echt schlecht. Der "Praxistest", wie man "Content ID" im Rahmen der Artikel 13-Debatte bezeichnen könnte, löscht regelmäßig Derivate und Parodien, die eigentlich keine Urheberrechtsverletzungen darstellen. Darüber hinaus hat Youtube ein autmatisiertes System, mit dem man Urheberrechtsverletzungen geltend machen kann. Wie gut das funktioniert, hat sich in der Vergangenheit mehrfach gezeigt. Es wird oft gesagt, dass es die großen bösen Plattformen wie Youtube sind, die Versuchen, die kleinen Rechteinhaber über's Ohr zu hauen. Und ja, Youtube und andere große Plattformen sind gegen Artikel 13, weil sie tatsächlich verringerte Einnahmen zu erwarten haben. Das wahre Problem mit Artikel 13 liegt meiner Ansicht nach aber bei den kleinen Plattformen. Plattformen wie Unity Insider, die beim aktuellen Stand des Entwurfs keine Möglichkeit sehen, die Auflagen zu erfüllen und daraufhin schlecht dicht machen müssen. Kleine Plattformen, die einfach nur Meinungsaustausch oder Support anbieten wollen, sind allein durch die theoretische Möglichkeit der Urheberrechtsverletzung die wahren Gelackmeierten. Zusammenfassend ist Artikel 13 im Kern lediglich eine Anpassung der Gesetzeslage für das Internet, um dort die Rechteinhaber zu schützen, wie es in der analogen Welt schon lange der Fall ist. Das Problem ist der Inhalt des Textes, denn er schafft eine Menge Probleme für kleine Plattformen, für die keinerlei Lösungen angeboten werden. Es ist das typische "lasst uns erst einmal Gesetze auf den Weg bringen", und über die Folgen denkt man vielleicht noch einmal nach, wenn es denn zu spät ist. Als kleiner Zusatz eine Überlegung bezüglich der Meinungsfreiheit. In direkter Weise stellt Artikel 13 keinen Angriff auf die Meinungsfreiheit dar und bringt auch keine Zensur. Wer das erzählt, hat das Thema meiner Meinung nach nicht verstanden. Es gibt aber zwei Punkte, die indirekt eine Gefahr für die Meinungsfreiheit im Internet darstellen: Es gibt keine staatlichen Plattformen im Internet, die zum Meinungsaustausch genutzt werden. Selbst politische Diskussionen, so dumm die Idee auch ist, finden auf Twitter, Youtube, Facebook statt. Das sind alles private Plattformen und diese haben selbstverständlich das Recht, Meinungen nach Lust und Laune besser zu finden. Wenn Twitter einen politischen Tweet löscht, der nicht gegen Gesetze oder Richtlinien der Plattformen verstößt, dann ist das schade, aber deren gutes Recht. Da Artikel 13 in seiner aktuellen Form kleinere Plattformen angreift, bedeutet das indirekt, dass große Plattformen Einfluss auf die Meinungslandschaft des Internets gewinnen. Und damit wird es schwieriger, frei seine Meinung zu äußern. Es ist scheinbar bereits bekannt, dass die so genannte "Terrorverordnung" auf die Gesetzeslage, wie sie duch Artikel 13 entsteht, aufbauen würde. Nach dem Motto "Hey, wir haben bereits auf allen Plattformen Filter, wir sorgen jetzt dafür, dass terroristische Dinge auch rausgefiltert werden". Oder anders gesagt: Mit den einzuführenden Mechanismen, bestimmte Inhalte noch beim Posten/Hochladen zu verhindern, ist die technische Grundlage geschaffen, tatsächliche Zensur einzuführen. Ja, der Entwurf selber birgt keine Zensur, aber wer noch nicht gemerkt hat, dass das Einführen eines Überwachungsstaats immer schleichend und schrittweise passiert, der hat im Geschichtsunterricht gepennt. Ein Entwurf wie Artikel 13 ist daher immer auch nach seinem Potential zu beurteilen, Teil eines größeren Prozesses zu sein, der letztendes dann eben doch gegen Meineungsfreiheit geht. Meine Empfehung für euch ist: Informiert euch. Was ich geschrieben habe, habe ich selbst wieder aus anderen Quellen. Ich habe den Entwurf nicht gelesen. Meines Wissens nach ist der Entwurf nicht einmal öffentlich einsehbar. So oder so - plappert nicht einfach etwas nach, dass ihr von einer einzelnen Quelle erfahren habt. Wenn ihr dann gegen Artikel 13 seid, und wenn es nur gegen die aktuelle Form des Entwrufs ist, dann informiert euch weiter, was ihr dagegen tun könnt. Es finden vermehrt große Demos statt. Die Flut an E-Mails, die initial kam, wurde von den Witzfiguren der CDU als Bot-basierte Aktion von Google abgestempelt, weil so viele der Absender mit @gmail.com aufhörten. Kein Witz. Wenn ihr also wollt, dass die Kritik ernst genommen wird, dann werdet laut. Aber bleibt dabei auf dem Boden der Tatsachen. Denn wenn Leute unreflektiert "ZENSUR" brüllen, dann verstehen die Leute im Parlement nicht, wo das Problem ist.
  9. 4 points
    Mir ist dein anderer Thread dazu aufgefallen, also dachte ich mir, ich lass auch mal ein paar Worte fallen. Was das Alter angeht haben die anderen ja schon einiges gesagt. Das ist ziemlich irrelevant. Aus meiner Erfahrung ist das eine Eigenschaft von guten Programmierern. Die nehmen meistens Worte sehr genau. Ansonsten ist ein guter Programmierer meiner Meinung nach kein professioneller "Code-Schreiber", sondern ein Problemlöser. Probleme elegant und effizient zu lösen erfordert zum einen die Fähigkeit abstrakt zu denken, vor allem aber erfordert es Kreativität. Die guten Programmierer, die ich kennengelernt habe, denken oft outside of the box. Selbstreflexion ist ebenfalls eine wichtige Eigenschaft eines solchen Programmierers. Dabei geht es darum zum einen offen zu sein für neue Ansätze. Viele Programmierer, die leider oft auch in Senior Positionen sind, glauben, weil sie das seit 20 Jahren machen wissen sie alles. Aber man lernt niemals aus. Zum anderen treibt sie einen an sich selbst zu verbessern. Die besten Programmierer, die ich kenne, beschweren sich nicht bloß über fremden, sondern meistens über ihren eigenen Code Erfahrung ist natürlich viel Wert und über Programmierung gibt es viel zu wissen, aber im Endeffekt ist die Programmierung bloß eine weitere, anlernbare Fähigkeit, die auf solche Charaktereigenschaften aufbaut.
  10. 4 points
    Ich hab den Algorithmus ein wenig angepasst, um das Problem mit den weichen Ecken zu lösen. Im Grunde schau ich mir einfach die vertices an, die nicht ganz korrekt sind, addier alle Normalen zusammen (nennen wir das Ergebnis einen Vektor A) und interpoliere dann von diesem Vertex aus in die Richtung A bis die SDF an diesem Punkt = 0 ist. Ich musste allerdings einen kleinen Bias einbauen, aber ich denke das sind einfach bloß Genauigkeitsprobleme, da die Implementation aktuell komplett auf floats setzt. Die schwarzen Linien am Ende zeigen das Ergebnis der Normalen (Vektor A) bei den Vertices, die zunächst gesmoothed wurden. Ich werd noch mehr testen müssen, um zu schauen, ob die Lösung so allgemein aufrecht erhalten werden kann.
  11. 3 points
    Ich arbeite übrigends immer noch an dem Projekt 😅. Die meisten Updates poste ich allerdings nur noch auf meinem Discord Server Discord: https://discord.gg/8khMMPW
  12. 3 points
    Moin zusammen! Nach etwa einem Jahr Arbeit (mit Pausen... ) kann ich mein neues Asset Store-Paket vorstellen! Es handelt sich dabei um eine stark weiterentwickelte Implementation der Konzepte, die in diesem Talk vorgestellt werden: Um es kurz zu fassen: Damit könnt ihr extrem saubere Architekturen bauen, doch der Kniff ist: Ihr arbeitet hier mit Unity und nicht dagegen an. Das Paket ersetzt keine von Unitys Funktionalitäten, es gibt kein "das kannst du jetzt so nicht mehr benutzen". Es wird ausschließlich erweitert, was schon da ist. Ich sag mal so... ich arbeite nicht mehr ohne, seit ich das Ding für meine eigenen Projekte gebaut habe. Falls ihr euch jetzt fragt, wie das geht... ich könnte erstmal eine Menge schreiben, aber schaut euch besser den Talk an, der ist hervorragend. Hier geht's zum Paket: https://assetstore.unity.com/packages/tools/integration/soda-scriptableobject-dependency-architecture-137653 Bei Fragen gerne fragen!
  13. 3 points
    Willst du irgendwie Hilfe oder wolltest du einfach nur ne Runde Dampf ablassen? Ich hoffe, du hast dir vor dem Update den Text im Fenster durchgelesen, der dir sehr deutlich sagt, dass du kein Update machen sollst, ohne vorher ein Backup deines Projekts zu erstellen.
  14. 3 points
    Hier hast du einge Möglichkeiten: https://docs.unity3d.com/Manual/PositioningGameObjects.html Interessant für dich dürften wohl Surface Snapping oder Vertex Snapping sein.
  15. 3 points
    Hier mal mein neuester Kram. Wartburg 353WR für Assetto Corsa (Modding). Nix Unity. Wird aber auch noch
  16. 3 points
    so nach langer Pause auch mal wieder ein Bildchen von mir , ich poste sonst immer in meinem Discord Channel oder auf unserer Facebook Seite naja jeden falls hab ich hier ein Bild von unserem Necromancer in der Dämonen Kathedrale
  17. 3 points
  18. 3 points
    @Helishcoffe Oder halt Gizmos.DrawWireCube bzw Handles.DrawWireCube
  19. 2 points
    Fein! Poste ruhig hier auch mal ab und zu, nicht nur aufm ollen Discord!
  20. 2 points
    Achso das kann sein, wir arbeiten noch mit der 5.6 Joa, würde ich auch so schreiben. Am performantesten ist es nicht, aber am einfachsten, wenn man keine Ahnung von Modeln usw. hat.
  21. 2 points
    SRY Aber ich muss das jetzt einfach mal so sagen. Anscheinend hast du dich noch nicht wirklich mit programmieren auseinander gesetzt. Durch stures Copy&Paste wirst du auf dauer nicht weit kommen. Schau dir am besten erstmal die C# Grundlagen an. Dann solltest du deinen fehler auch selbst erkennen.
  22. 2 points
    Na, dann will ich auch mal wieder was hier rein Posten. Hab's eben fertig gemalt. Das Crypt wird das Hauptelement in meinem neuen Flipper werden der Ghouls heißen wird. Natürlich habe ich es so low poly wie möglich gebaut. Aber gute 2000 Polys sind es dann doch geworden. Die Textur ist 2048x2048 groß und komplett handgemalt. Das hat ein wenig gedauert, war aber ne gute Übung.
  23. 2 points
    Was ich noch dazu sagen möchte: PlayerPrafs sind nicht dazu da, wie Variablen gehandhabt zu werden! Man liest die Werte mit Get aus und speichert sie in Variablen. Mit diesen Variablen wird dann gearbeitet, nicht mit den Playerprefs direkt. Erst wenn es Zeit ist, die Variablen auf die Platte zurück zu schreiben, weil jetzt das Spiel beendet wird oder ein Szenenwechsel stattfindet , werden sie mit Set geschrieben. Du machst mit der ws3FasterShooting komische Dinge. Du liest mit GetInt das Playerpref w3sFS aus und übergibst sie dieser Variable. Hat sie z.B. den Wert 1, dann soll sie in der Funktion den Wert 2 bekommen. Anstatt du aber jetzt ws3FasterShooting direkt beschreibst, speicherst du den Wert in w3sFS, nur um ihn direkt wieder auszulesen und der Variable ws3FasterShooting zu übergeben. Das ist schon mal nicht so dolle. Aber dein Problem, was da jetzt entsteht, ist: ws3FasterShooting hat jetzt den Wert 2 und somit ist die Bedingung für die nächste If Abfrage erfüllt. Da drin bekommt die Variable jetzt den Wert 3 und nun ist auch die Nächste If Abfrage erfüllt! Also entweder drehst du die If-Abfragen um, fängst also mit der Abfrage 3 an, dann die 2 dann die 1, denn kleiner kanns ja nicht werden, oder aber du nutzt else if. if(wert==1){ // ich bin 1 also mache was } else if(wert==2){ // ich bin nicht 1, ich bin 2 also mache was anderes } else{ // ich bin weder 1 noch 2 also mache das was noch übrig bleibt }
  24. 2 points
    Allem voran der übliche Hinweis dass hier keiner Anwalt ist und keiner dir eine richtige Rechtsberatung geben kann. Eigentlich kannst du nicht einfach geistiges Eigentum von anderen nehmen und für dein eigenes Werk verwenden. Da gibt's den Urheber des Werkes und den Rechteinhaber, von denen mindestens einer dir die explizite Erlaubnis geben muss. Etwas in Richtung Grauzone geht's dann bei Fair Use. Das ist amerikanisches Recht, nachdem du die Erlaubnis der Rechteinhaber nicht mehr brauchst, wenn du bei der Verwendung der Werke bestimmte Kriterien erfüllst. Unter anderem können Parodien darunter fallen. Das ist aber kein Recht, das weltweit gilt, und von einem deutschen Äquivalent wüsste ich nichts. Da müsste man dann auch mal schauen, ob die Rechte gelten, in denen du sitzt, in denen du vertreibst oder in denen die Rechteinhaber sitzen. China z.B. gibt kein Stück auf westliches Copyright. Entsprechend kopieren da alle wie wild alles mögliche, weil die Regierung da kein Problem mit hat. Was wollen westliche Firmen auch tun, außer Lobbyarbeit zu leisten, sodass die Politiker Sanktionen gegen Chin....oh. Der ganze Kram mit dem (internationalen) Urheberrecht ist ein wildes Dickicht aus völlig verschiedenen Rechtssystemen, von denen jedes einzeln genommene schon immer komplett undurchsichtig ist. Das ist ja auch das Problem mit Artikel 13/17... Nichtmal Anwälte schaffen es, da definitive Antworten zu gebe, geschweige denn irgendwelche Algorithmen. Aber egal. Meine Empfehlung ist: Lass es sein. Selbst, wenn es theoretisch Möglichkeiten gibt - mit der Verwendung anderer Leute geistigen Eigentums begibst du dich immer in eine Welt des Schmerzes.
  25. 2 points
    Habe gerade ein Spiel laufen, deshalb sind die absoluten Werte etwas hoch, geht ja aber nur um die relativen Meine Funktion: 15ns (a - b).sqrMagnitude: 48.2ns Vector3.Distance: 65.2ns Die Benchmark-Werte schwanken natürlich immer etwas. Und wie gesagt, das Spiel im Hintergrund scheint da etwa +55% draufzupacken. Ansonsten braucht Vector3.Distance natürlich etwas länger als sqrMagnitude weil's dasselbe mit Wurzel hintendran ist.
  26. 2 points
    Ist jetzt nicht nötig, aber vielleicht trotzdem interessant. Das kannst Du auch (gut leserlich) kürzen: bool direction = true; if (Input.GetKeyDown(KeyCode.Space)) { direction = !direction; //direction wird einfach negiert }
  27. 2 points
    Moinsen! Ich habe mich vorhin nach langer Zeit dann doch dazu aufgerafft, mir einen Blog aufzusetzen, in dem ich einfach mal beliebige Themen behandeln kann... geht aber schon noch um Unity Ich habe heute Nacht zwei Artikelchen geschrieben, und mit der Zeit sollen es mehr werden. Die beiden sind soweit auf englisch. Deutsche Übersetzungen sind nicht ausgeschlossen, aber im Moment nicht sonderlich weit oben auf der Liste. Wer Lust hat, kann ja mal reinschauen. http://blog.13pixels.de/
  28. 2 points
    Sehr gute Idee! Coroutinen funktioneren so: Du hast eine Methode, die ganz normal abläuft mit dem kleinen Unterschied, dass du eine Anweisung zur Hand hast, mit der du eine beliebige Anzahl an Frames warten kannst. Du kannst damit also dasselbe machen wie mit Update, aber eben als zusammenhängender Ablauf. Wenn du z.B. diesen Code hast: private int frameCounter = 0; private void Update() { if (frameCounter < 60) { frameCounter++; if (frameCounter == 60) { Debug.Log("Ich habe 60 Frames abgewartet."); } } } dann hast du genau die Probleme, die du bereits angemerkt hast. Deine Zählervariable ist irgendwo abseits des Codes, der damit arbeitet, und darüber hinaus läuft da eine Update-Methode, die die meiste Zeit über gar nichts sinnvolles macht. So sieht das Äquivalent in einer Coroutine aus: private IEnumerator CountToSixtyFrames() { for (var frameCounter = 0; frameCounter < 60; frameCounter++) { yield return null; // warte einen Frame } Debug.Log("Ich habe 60 Frames abgewartet."); } Es gibt hier nur zwei Dinge zu bemerken: Die Methode hat als Rückgabetyp "IEnumerator". Mit "yield return null" wird die Methode unterbrochen und im nächsten Schritt des Update-Zyklus an dieser stelle fortgesetzt. Statt null kann man auch andere Dinge zurück geben, Z.B. ein WaitForSeconds-Objekt, dann wird nicht einen Frame lang gewartet, sondern so viele Frames, dass die angegebene Zeit in Sekunden verstrichen ist. Gestartet wird eine Coroutine so: StartCoroutine(CountToSixtyFrames()); In deinem Fall kannst du also etwa so etwas machen: private IEnumerator AnimateRotationSpeed(float targetValue, float duration) { var startValue = rotationSpeed; for (var time = 0f; time < duration; time += Time.deltaTime) { var progress = time / duration; rotationSpeed = Mathf.Lerp(startValue, targetValue, progress); yield return null; } rotationSpeed = targetValue; } und dann in Start aufrufen: private void Start() { StartCoroutine(AnimateRotationSpeed(targetRotationSpeed, 1f)); } Kann man natürlich auch noch etwas modularer machen, statt fest rotationSpeed zu beeinflussen einfach einen ref-Parameter oder ein Callback anbieten und schon hat man sein eigenes Tweening-System
  29. 2 points
  30. 2 points
    Naja, wenn's um Kollisionen geht, dann ist das mit Layern schon sinnvoll. Irgendwo muss man seine Grenze ziehen. Natürlich könnte man jetzt versuchen, alles über Layer zu machen. Theoretisch gibt's performancemäßige Vorteilchen, wenn du Trigger, in denen nur der Player etwas auslösen soll, auch nur mit dem Player kollidieren lässt. Aber irgendwann wird's auch einfach albern und unübersichtlich. Bei Performance gilt immer: Mach dich erst krumm, wenn's zum Problem wird. Ich bevorzuge es, wenn ich eine einfache Änderung vornehme, wenn ich eine einfache Änderung haben will. Wenn ich ein neues System baue und dann doch Trigger sein sollen, wo Player und Gegner drin etwas auslösen, will ich nicht erstmal die gesamte Kollisionsmatrix überarbeiten. Physik-Engines haben sowieso Beschleunigungsstrukturen und Optimierungen des Todes - da geht dem Rechner erst sehr spät die Puste aus. Da sind sind Bedenken wie "Ich will einen Raycast haben der durch Dinge durch kann ohne dafür mein Erstgeborenes zu verkaufen" schon viel besser. Also... lange Rede, kurzer Sinn: Guter Code und sauberes Projekt > Performance, solange bis die Performance ein Problem wird. Und Layer managen ist nicht so ganz geil, also würd ich's vermeiden, solange dein Code nicht drunter leidet, wie er's beim Raycast tun würde.
  31. 2 points
    Okay... ist für mich schwer zu entscheiden, wo ich ansetzen soll. Einerseits kommt einige Verwirrung daher, dass deine Schleifenvariable ("Durchlauf") keine lokale Variable ist, sondern auch nach Beendigung deines Schleifencodes weiterhin bestehen bleibt und du deshalb manuell den Wert zurücksetzt. Aber anstatt darauf einzugehen, würde ich lieber noch ein, zwei Schritte zurückgehen und darauf hinweisen, dass es mehr Datensammelstrukturen als Listen gibt. Wenn dein Ziel ist, eine Sammlung von Elementen zu haben, in der kein Element doppelt vorkommt, und du willst wissen, ob ein bestimmtes Element drin ist oder nicht, empfiehlt sich ein HashSet. Das entspricht nämlich genau dem mathematischen Konzept einer Menge und erlaubt dir superfixes Nachschauen, ob ein Element schon drin ist. Zwar hat die Liste auch eine "Contains"-Funktion, aber es gibt gute Gründe, bei einer solchen Situation das Set zu nehmen. Performance ist nur einer davon, und nicht einmal der beste Hier ein Beispiel, wie man HashSets benutzt: var menge = new HashSet<int>(); menge.Add(5); menge.Add(10); Debug.Log(menge.Contains(5)); // true
  32. 2 points
    Wie Sachsa schon sagt. Ich wollte aber noch mal kurz erklären, was die Vertreiber prüfen. Die prüfen nämlich nur die Funktionalität und Stabilität deines Programms. Apple gibt gewisse Richtlinien vor, was alles drin sein muss und was nicht sein darf. Da geht es hauptsächlich um die Zugriffe auf die Hardware und ob es mit diversen OS auch läuft und ob diverse Dinge genutzt werden, die Apple untersagt hat. Apple testet bei jedem Update aufs neue. STEAM macht das so ähnlich. Die Testen ob deine Anganben im Shop auch der Realität entsprechen. Wenn du z.B. volle Controller unterstützung angegeben hast, dann testen die auch, ob denn alles mit einem Controller auch zu machen ist. Da geht es hauptsächlich um das BigPicture und den STEAM Controller, damit du das Spiel ohne Tastatur auf dem Fernseher spielen kannst. Steam testet nur einmal bei der Veröffentlichung. Danach ist denen egal was dein Update beinhaltet. Wie das bei den anderen Verreibern, wie GooglaPlay, Microsoft usw., ist kann ich nicht genau sagen, aber auch da wird es hauptsächlich um die Funktionalität und Stabilität des Programmes gehen. Die internen Mechanismen sind denen egal und können auch gar nicht ohne weiteres überprüft werden.
  33. 2 points
    Das ist die Logik dahinter. Wenn du 2 Sachen zusammen abfragst, dann ist das ja ein logisches UND. Also nur wenn das Eine UND das Andere wahr ist, dann mache etwas. Soweit so gut. Aber du nutzt else und dort wird etwas ausgeführt, wenn eins der beiden Dinge in der Abfrage nicht wahr ist. Dummerweise setzt du aber eins der beiden Dinge dann auf wahr. In deiner Abfrage rundest du mit dem Befehl Truncate die Zahl in Richtung 0, also so ähnlich wie mit Floor. Aus der 10,xx wird die 10. Aus 0,xx wird die 0. Dann willst du mit dem Modulo Befehl den ganzzahligen Rest dieser Zahl ermitteln, wenn du sie durch 10 teilst. Da Modulo nichts anderes ist als : a -(a/b) * b kommt bei der Time= 0,xx eben auch ein Rest von 0 raus, denn 0- (0/10) *10 ist 0. Und bei 10-(10/10)*10 , was ja 10 - 1*10 entspricht, ist auch 0. Das ist schon mal der Grund, warum es nicht nur bei der 10 passiert. Und es passiert mehrmals bei der 0 und der 10, weil du zwar i auf false setzt, sobald die Bedingung wahr ist. Aber im nächsten Durchlauf, wegen dem i nicht wahr ist und somit else greift. Das else setzt das i wieder auf true und somit ins im darauf folgenden Durchlauf wieder die Bedingung für deine Abfrage erfüllt. Solange bei deinem Truncate also eine 10 oder eine 0 raus kommt, wirst du alle 2 Durchläufe einen Ausdruck bekommen.
  34. 2 points
    Programmieren seit ~20 Jahren. Unity seit ~10, glaube ich. Aber glaube nicht, dass du 10-20 Jahre brauchst, um "gut genug" zu sein. Du hörst nie auf, dich zu verbessern. Ich selbst habe mich gerade letzte Woche hier im Forum korrigieren lassen müssen, weil ich falsch lag Ob es realistisch ist, in einem Jahr ein Spiel zu releasen, und das auch als anfänger, hängt komplett von dir, deiner Lernfähigkeit und deinem Projekt ab. Flappy Bird klatsche ich dir an einem Tag hin. Rechne das mal X weil du noch dies und das lernen willst oder musst, um das zu implementieren, und du bist vielleicht bei einer Woche. Wenn dein Projekt allerdings keine Kleinigkeit ist, dann kann's auch mehr als ein Jahr dauern, egal, wie gut du solo bist. Ich sitze jetzt seit etwas über einem Jahr an meinem aktuellen Projekt. Da geht zeitweise schonmal die Motivation flöten und dann wird eine Woche lang eher nur gezockt... aber naja. Anderes Thema. Solange du an den Erfolg deines Projekts glaubst, wirst du auch Fortschritte machen. Als Anfänger würde ich vielleicht nicht unbedingt deine finanzielle Sicherheit von einem Traumprojekt abhängig machen, aber solange du dir die Zeit nehmen kannst, weiter zu arbeiten, wirst du auch immer weiter kommen. Und dich währenddessen weiterentwickeln und verbessern.
  35. 2 points
    Lasst uns das Thema nicht allzuweit von der ursprünglichen Frage entfernen, aber: Ich habe gehört, MEC soll ganz gut sein. Vor allem ist es kostenlos, also schadet's sicher nicht. Grundsätzlich gilt allerdings, dass man sich über Performance nicht zu viele Gedanken machen soll, bevor sie sich als Problem entpuppt. Für die drei Coroutines in einem kleinen Projekt also unbedingt MEC einzubauen, ist zwar kein Fehler, aber eben Zeitverschwendung. Bei weiteren Fragen, die nicht allzu viel mit der Frage von @cncrete zu tun haben, gerne ein neues Thema aufmachen
  36. 2 points
    float und double sind ähnliche Typen. Beides sind Gleitkommazahlen. float allerdings wird im Speicher mit 32 bits dargestellt, double hat - wer hätt's gedacht - 64 bits. Damit sind sowohl größere, als auch genauere kleine Zahlen darstellbar. Braucht man aber für Spiele in der Regel nicht. Wenn man eine Kommazahl aufschreibt, muss diese ja einem dieser beiden Typen entsprechen. Mal davon abgesehen, dass er noch mehr geben kann. Und für C# ist eben definiert, dass ein Kommazahl-Literal ein double ist und kein float. Um ein Literal zu schreiben, das stattdessen ein float ist, musst du am Ende ein f anfügen: speed = speed + 0.1f; // bzw speed += 0.1f; Dein anderer Versuch funktioniert übrigens nicht - er kompiliert zwar, aber 1/10 = 0. Wenn du ein Zahlliteral schreibst, das kein Komma hat, dann handelt es sich um ein int, also eine Ganzzahl. Und eine int-Division ergibt immer wiederum ein int. Sollte die Division eigentlich ein Ergebnis mit Nachkommastellen haben (also 0.1), werden diese abgeschnitten (also 0), was einem Abrunden entspricht. Du rechnest also immer 0 obendrauf, was den Compiler nicht stört, aber dir nichts bringt.
  37. 2 points
    ^ ist nicht das Zeichen für "Hoch", es ist das Zeichen für "xor". Potenzrechnung machst du in Unity mit der Mathf-Klasse: Mathf.Pow(4, 2); // 4 zum Quadrat
  38. 2 points
    @devandart Nur ein kleiner Hinweis: private static DeineKlasse instance; public static DeineKlasse Instance { get { return instance; } } kann man ersetzen durch public static DeineKlasse Instance { get; private set; } Generell ist Singleton zu vermeiden, wenn's geht. In Unity ist es wegen der Serialisierung nicht-statischer Klassen weniger schlimm als überall anders, aber immer noch nicht gut. Es ist okay, sie zu benutzen, bis man etwas besseres findet. Das "Bessere" heißt dann in der Regel ScriptableObjects. In diesem Fall geht es ja um eine Liste von Sprites. Warum müssen diese in der Scene (also auf einer Komponente auf einem GameObject) definiert sein? Eine Liste, die in den Assets liegt, wäre doch viel besser. Also ScriptableObject auf und los gehts: using UnityEngine; [CreateAssetMenu(menuName = "Game/Sprite List")] public class SpriteList : ScriptableObject { public Sprite[] sprites; } In den Assets Rechtsklick, so ein Ding erstellt und Sprites reingezogen. Name "Minimap Sprites". Dann baust du deine Scripts um, die diese Sprites benutzen und machst [SerializeField] private SpriteList minimapSprites; und ziehst das ScriptableObject "Minimap Sprites" da rein. Dann benutzt du statt MinimapSpriteManager.Instance.MinimapSpriteIcon[1]; das elegantere minimapSprites.sprites[1]; und hast dadurch Modularität, Robustheit und andere Code-Qualitäten erhalten.
  39. 2 points
    So, jetzt habe ich es anders gemacht: Mit Processing, der Minim Sound-Bibliothek und OscP5 habe ich mir ein kleines Programm erstellt, dass nach Start die Daten sendet. In Unity lese ich sie mit OSC aus. Funktioniert einwandfrei!
  40. 2 points
    Jaha! Kommt darauf an, wo du diese Abfrage stehen hast. Wenn sie in der Update drin steht, wird solange das PS gestartet, bis irgendwas von deinene oberen Bedingungen nicht mehr eintritt. Weil jetzt bei jedem Frame gestartet wird, sieht es für dich so aus, als mache er nichts, aber er macht schon was, nur siehst du immer nur den Anfang, also dieses eine erste Frame und da ist wahrscheinlich noch kein Partikel entstanden. Verstehste? Bei deinem 2ten Codebeispiel wird nur einmal gestartet, denn dann ist PS ja im nächsten Frame gestartet und somit ist deine Abfrage nicht mehr erfüllt. Ja und dann siehst du auch die weiteren Frames der Partikel. Übrigens, wenn du hier Code einfügst und das Codefenster von HTML auf C umstellst (unten rechts der Knopf), kannst du auch richtig mit Tabs arbeiten und schicker wird die Farbgebung dann auch.)
  41. 2 points
    Anstatt durchegehend einen Wert hochzuzählen, könntest du auch konstant die Startzeit speichern. Dann erhöhst du nicht mehr in jedem Update deinen Timer-Wert, sondern rechnest ihn aus, indem du diesen Wert von der aktuellen Zeit abziehst. Dann kann man so oft Pause machen, wie man will, da sich der Wert dadurch nicht ändert.
  42. 2 points
    Hier mein Script zur Anzeige der FPS. Einfach der Szene hinzufügen (vorzugsweise auf ein Text Ui) und eine Referenz eines beliebigen Text Ui hinzufügen. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// This script calculate the current fps and show it to a text ui. /// </summary> public class UiDisplayFps : MonoBehaviour { public string formatedString = "{value} FPS"; public Text txtFps; public float updateRateSeconds = 4.0F; int frameCount = 0; float dt = 0.0F; float fps = 0.0F; void Update() { frameCount++; dt += Time.unscaledDeltaTime; if (dt > 1.0 / updateRateSeconds) { fps = frameCount / dt; frameCount = 0; dt -= 1.0F / updateRateSeconds; } txtFps.text = formatedString.Replace("{value}", System.Math.Round(fps, 1).ToString("0.0")); } }
  43. 2 points
    Moinsen Finde es gut das du dir die mühe gemacht hast eins zuschreiben ^^ Aber Unity hat dies doch schon seit Jahren als Standard Asset integriert ^^ unter Standard Assets/Utility/FPSCounter.cs Jetzt ist nur die Frage ob deins Effizienter ist da es auch Kompakter ist ^^ Hab deins mal auf das Minimum gekürzt was grad auf die schnelle ging. weil using System.Collections; using System.Collections.Generic; brauchste in dem Script sowieso nicht ^^ using UnityEngine; using UnityEngine.UI; public class FPSC : MonoBehaviour { //Vars #region public string formatedString = "{value} FPS"; public Text txtFps; public float updateRateSeconds = 4.0F; int frameCount = 0;float dt = 0.0F;float fps = 0.0F; #endregion void Update(){ frameCount++; dt += Time.unscaledDeltaTime; if (dt > 1.0 / updateRateSeconds){fps = frameCount / dt; frameCount = 0; dt -= 1.0F / updateRateSeconds;} txtFps.text = formatedString.Replace("{value}", System.Math.Round(fps, 1).ToString("0.0"));}} Da man das Script sowieso nicht mehr nachbearbeiten muss kann man es ja so lassen ^^ und später einfach via setactive an oder ausschalten wenn mans mal braucht ^^
  44. 2 points
    Hallo Leute Ich arbeite zurzeit an diesem Projekt. Der Name ist noch nicht fix. Ich überlege mir noch einen passenden Namen. Zurzeit ist es einfach Das Projekt "DungeonGame"^^ Um was geht es in "DungeonGame"? Du startest in einer Stadt. Dort kannst du Waffen und Rüstungen kaufen und Quests annehmen. Danach kannst du dich für eine Dungeon anmelden. In der Dungeon kannst du zusammen mit Freunden kleine und grosse Monster verprügeln. Nach dem Ausflug kannst du dir bessere Ausrüstung und Waffen kaufen oder diese selbst herstellen. Aktueller Stand: Ich habe einmal das Dorf gebaut und den Markt, in dem der Spieler startet, wenn er ins Spiel kommt. Zukunft: In nächster Zeit werde ich versuchen eine Dungeon zu bauen und ein paar Monster zum leben zu erwecken. und versuchen ein einfaches Gameplay auszuarbeiten. Fortschritte werde ich hier im Forum posten Schreibt mir doch was ihr denkt. Ich würde mich freuen 😁
  45. 2 points
    Mein 3D Lead arbeitet gerad am Workflow mit Vegetation Studio für die "Umwelt" und hat nun noch ein weiteres kleines Hindernis (Waffe) für die Rennstrecke gebaut... Was darf bei einem postapokalyptischen Battle Racer nicht fehlen? Genau, Minen!
  46. 2 points
    Ich fände es auch schön, wenn hier mal wieder mehr gepostet werden würde. War immer sehr interessant zu sehen woran andere hier grade so arbeiten.. Hier mal wieder ein Update zu meinem Blutfluss Shader..
  47. 2 points
    Hallo Community, Ich konnte den Fehler nun finden und beheben. Sollte noch jemand das Problem haben versuche es mal die Lösung könnte für mehrere Package Probleme helfen wenn ihr seltsame Probleme habt. Unity lädt die Packete nicht jedes mal neu runter sondern Speichert sie in einem Localen Ordner. Den Ordner findet ihr unter C:\Users\Benutzername\AppData\Local\Unity\cache\packages\packages.unity.com Löscht den Inhalt, dann lädt Unity die Packete neu runter und Fehler im Download werden so behoben. So konnte ich alle meine Fehler mit der HDR Pipline beheben.
  48. 2 points
    Einfach mal alle Autos die ich bis jetzt gemacht habe auf die Strecke. Da stecken viele Stunden Arbeit drin und Jahre. (Wie man halt Zeit hat)
  49. 2 points
    Ohwe ohwe war ich hier lange nicht mehr unterwegs... Kennt mich hier überhaupt noch jemand? Das Studium frisst einen auf... Aber: Ich kann endlich mal wieder was (öffentlich) von meiner Arbeit zeigen! Und noch dazu ein Unity-Projekt, was doch eher untypisch ist. In den letzten 4 Monaten habe ich im Rahmen des 5. Semesters ein Augmented Reality Sandbox Game entwickelt - vielleicht kennt ihr das aus Museen, Sea Life, etc, manchmal gibt es da so Sandkästen, auf die mehr oder weniger in Echtzeit Höhenlinien projeziert werden. Ich habe das gesehen und mir gedacht: Da muss man doch mehr mit machen können. Und nach viel viel Arbeit kann ich euch meine erste Installation präsentieren: Basic Info: Man nutzt den Schatten seiner Hände um herumwirbelnde Natur-Teilchen einzufangen, diese kann man in vorher gegrabenen Mulden sammeln und so Stück für Stück die Landschaft vergrößern. Technischer Breakdown: Ich nutze eine Microsoft Kinect 2 um die Höheninformationen des Sandes und der Hände zu bekommen. Aber: Das "Raw" Kinect Tiefenbild ist für diesen Zweck eigentlich komplett unbrauchbar. Das rauscht wie verrückt, und immer wenn es eine harte Kante gibt werden die Höheninfos an dieser Kante einfach null - lauter so Zeug. Deshalb war mein erster Schritt das Kinect Bild möglichst performant und vor allem schnell zu filtern und zu smoothen. Dieses GIF zeigt den Effekt. Normalerweise ist es ja so, dass wenn man seine Hand jetzt über den Sandkasten hält, diese Höheninformation auch in die Projektion aufgenommen wird und dort ein sehr hoher Berg entsteht (einer der Gründe für die große Verzögerung der bekannten AR Sandboxes). Ich wollte das auf keinen Fall, weshalb ich nach einem Weg gesucht habe, die Hände aus den Höheninformationen herauszufiltern. Das funktioniert viel billiger als man vielleicht annimmt: Man kalibriert den Tisch einmal ohne Hände und ab diesem Moment werden alle Informationen, die über einem bestimmten Threshold sind, einfach ignoriert. Sobald man die Hand 3cm über den Sand hält, wird diese wieder als Terrain wahrgenommen (Es gibt dann mehrere Thresholds für schnelle Bewegungen etc.) Das Resultat fühlt sich nach einer sehr "magischen" Interaktion an, da eben nur die wirklichen Sandinteraktionen auch Änderungen in der Projektion hervorrufen. Zugleich bekomme ich aus den gefilterten Höhendaten dann eine Maske für die Hände, mit der ich über OpenCV Handgesten und Formen für den Game Input erkennen kann. Da dieses ganze System dann doch immer langsamer und nicht richtig "befriedigend" auf den Input reagiert habe ich das Kinect Bild in 8, sich überlappende Teile aufgeteilt, die auf unterschiedlichen Threads verarbeitet werden. Threading (und vor allem Multi Core Threading) ist in Unity ja bekanntermaßen eher, nennen wir es mal: kompliziert. Aber für ein Spiel wie dieses war es super essentiell, dass alles so schnell wie möglich reagiert. Ich berechne die Positionen der Hand Schatten aus der Projekterposition und den Kinect Daten, um die Spieler damit Objekte einfangen zu lassen - da will man natürlich keinen Lag haben. Und auch das Graben fühlt sich so richtig gut an. Visuall Stuff Das Terrain wird aus einer Displacement Map (die aus den verbesserten Höheninfos generiert wird) erstellt. Der Rest passiert dann in einem Shader: Ich berechne mir die Normalen aus der Heightmap, indem einfach ein Vektor aus einem umliegenden Dreieck von Höhendaten berechnet wird - die Normalmap brauche ich für die richtige Beleuchtung der Landschaft. Wenn man jetzt die Höhe vom Mittelpunkt dieses Dreiecks mit der Höhe von den Eckpunkten vergleicht, kann man eine Realtime Curvature Map berechnen - die ist für schöne Schneebedeckte Bergspitzen und saftig grüne Täler. Die Steigung der Normalen wird auch noch dazu berechnet um Felsen an Steilwänden zu erzeugen und die Wälder an solchen Stellen auszumaskieren. Hier mal eine kleiner Debug Ansicht davon: Der ganze Landschaftsshader ist dann doch sehr groß - es gibt eine Art "Fake"-Erosion, damit die Felsen schick aussehen und eine riesige Anzahl Noises um die Sandstrände, Schneeverteilung, Wälderfarben, Meereswellen etc. zu erzeugen. Das ist aber nur die Landschaft! Es gibt auch noch die dunkle, zerglitchte Welt mit dem selben Setup, aber eben anderen erzeugten Effekten. Da sich das Spiel ja um das Fangen und Verbinden von Natur-Fragmenten dreht sollte diese "Verbindungs-Interaktion" etwas ganz besonderes werden und dem Spieler das visuelle Feedback geben, etwas richtiges getan zu haben. Mithilfe eines Voronoi Effekts habe ich die ganzen Natur-Teile sich miteinander verbinden lassen - jedes Natur Objekt kann sich über einen Shader so hin morphen, dass es in seine umgebenden Voronoi Positionen passt. Das erzeugt einen sehr coolen, snappy Effekt als ob man ein passendes Puzzlestück gefunden hat. Solltet ihr in zwei Wochen zufällig in Stuttgart sein könnt ihr gerne auf der FMX Conference 2018 vorbeischauen, wo das Spiel öffentlich präsentiert wird und dann auch tagsüber spielbar ist. Wenn nicht - ich versuche gerade Museen und Ausstellungen ausfindig zu machen, die sich für so ein Exponat interessieren könnten. Wenn ihr da Ideen habt, schreibt mir doch gerne! Zum Abschluss noch zwei schöne Making Of Bilder Vielen Dank fürs Lesen & ich freue mich auf Fragen und Feedback!
  50. 2 points

Announcements

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

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...