• Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

Blogs

Featured Entries

  • Mark

    UltraTerrain Dev Diary #2

    By Mark

    Nachdem die Tests nun immer umfangreicher werden wächst auch die Funktionsvielfalt.

    Im letzten Post habe ich den PageDataHandler erwähnt, dieser ist nun fast vollständig implementiert, dazu musste aber einiges gemacht werden.

    Der PageDataHandler soll wie der Name bereits andeutet in der Lage sein die Daten einer Page zu handhaben/verwalten, darunter fällt wie bereits erwähnt das Laden der Daten.

    Das Laden der Daten basiert auf 2 Schritten:

    1. Wenn noch keine komprimierten (zip) Daten im Objekt vorhanden sind dann wird das dem System zugehörige VirtuelleFileSystem nach den passenden Page Daten gefragt. Das VirtuelleFilesystem ist das VFS aus SaveIt und kann in einer Datei verschiedene Unterdateien speichern und lesen, das ganze ohne jedesmal die gesamte Datei in den Speicher zu laden. Die Daten wurden vorher komprimiert in das VFS abgelegt.

    2. Sind die komprimierten Daten vorhanden werden diese dekomprimiert und in die Datenarrays gelegt die ein PageDataHandler hat. Das sind aktuell nur 2 Arrays, einmal die VoxelValues welche angeben wir einflussreich ein Voxel ist (0.0 bedeutet kein VoxelEinfluss und 1.0 bedeutet vollen Einfluss) und die BlendValues, welche angeben wie die verschiedenen Texturen später miteinander verschmelen werden.

    Der 2. Schritt ist gesondert vom ersten aus folgendem Grund: Der PageDataHandler soll wenn eine Page längere Zeit unverändert bleibt die Daten zwischenspeichern können um Speicherplatz zu sparen um später wenn die Page noch viel länger unangetastet blieb diese Daten in das VFS zu speichern. Dies soll später dafür sorgen dass nur die Voxeldaten in Speicher verbleiben die unbedingt nötig sind um entweder schnelle änderungen zu ermöglichen oder wieder schnell parat zu sein um änderungen vorzunehmen.

    Intern arbeiten die Load und LowerMemorConsumption Methoden mit Asynchronen Operationen die jeder Zeit abgebrochen werden können um zB wärend eine Page grade die Daten komprimiert diese Operation abzubrechen da ich die Daten spontan doch unkomprimiert benötige.

    Das System für diese Asynchronen Operationen basiert auf den Unity Threading Helper.

    Bestimmte Aktionen können allerdings nicht abgebrochen werden und sind damit auch synchron und nicht asynchron, zB das löschen aller Daten bei dem es keinen Zwischenschritt gibt der noch abgebrochen werden könnte.

    Das System zu laden und Speichern der VoxelDaten bedarf aber noch einen weiteren Zwischenschritt um Versionsupdates auf neuere UltraTerrain Versionen zu ermöglichen, aus diesem Grund wird in den Page Daten später noch die Version des Dateiformates (unabhängig vom VFS Format) abgespeichert werden und basierend auf dieser Version werden dann die geeignetesten Speichermethoden gewählt.
    • 0 comments
    • 12 views

Our community blogs

  1. Immer, wenn Unity Tech ein neues Tutorial raus bringt, habe ich das Bedürfnis, es anzugucken... um festzustellen, ob Käse erzählt wird. In der Vergangenheit hat man z.B. in der Scripting Reference immer wieder Beispiele gesehen, die einem einen Schauer über den Rücken gejagt haben.
    Du brauchst eine Referenz auf ein Objekt? GameObject.Find. Oder FindWithTag. Autsch.
    Warum, habe ich schon öfter erklären müssen, und die Hemmschwelle, das zu ignorieren, was von offizieller Seite kommt, ist oft hoch.

    Heute bin ich auf ein neues Videotutorial der offiziellen Learn-Serie gestoßen: [url="http://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/communicating-between-components-gameobjects"]http://unity3d.com/l...nts-gameobjects[/url]

    Da ist eine Menge wachgerüttelt worden, schon bevor ich darauf klickte. Kommunikation zwischen Komponenten ist ein sehr zentrales Thema in Unity, und so oft man es braucht, so oft wird es auch missverstanden oder suboptimal bis falsch vermittelt.

    Also Augen [s]zu[/s] auf und durch.
    Und was sehe ich? FindGameObjectsWithTag. Juuhuuu. In meinem Kopf setzen sich Formulierungen für einen neuen Blogeintrag zusammen.
    [img]http://board.bytezero.de/let-me-tell-you-why-thats.jpg[/img]

    Aber vielleicht, so dachte ich, lehne ich mich heute einfach mal nicht so weit aus dem Fenster, bevor ich ein paar Messungen gemacht habe. Dinge über Strings zu finden klingt auf den zweiten Blick und mit Hashtables im Hinterkopf gar nicht mal soo abwegig.

    Über GameObject.Find und FindWithTag schreibe ich heute einmal nicht. Diese Funktionen fallen für mich völlig aus der Wertung, weil sie schon in der theoretischen Anwendung bescheuert sind.

    Heute geht es um den Hauptteil des besagten Tutorials, der sich mit folgendem beschäftigt:
    [size=5]Wie finde ich alle Komponenten vom Typ T in meiner Szene?[/size]

    Dazu habe ich mir eine Szene mit 4000 gleichartigen GameObjects erstellt. Diese haben den gleichen Tag und außerdem alle ein Script vom Typ "Something".

    Ich möchte in Start() oder Update() Referenzen auf alle diese GameObjects bzw. Komponenten vom Typ Something haben. Herangehensweisen dafür:[list=1]
    [*]FindGameObjectsWithTag
    [*]FindGameObjectsWithTag mit GetComponent<T> (um die Komponente direkt zu referenzieren)
    [*]In Something.Awake eine List<T> befüllen
    [*]FindObjectsOfType<T>
    [*]FindObjectsOfType(typeof(T)) as T[]
    [/list]
    Da wir hier Variablen initialisieren, gehört der jeweilige Code im Zweifelsfall klassischerweise in Awake(). Allerdings gibt es erstaunliche Ergebnisse, wenn man ihn in Start() ausführt, aber lest selbst...

    Die Werte, die gleich folgen, sind "Ticks". Die Messergebnisse waren auch bei 4000 Objekten (mehr wurde im Editor anstrengend) zu klein für Millisekunden-Angaben.
    [b]In Klammern dahinter sind die Ergebnisse für das Gleiche mit nur 3 GameObjects.[/b]


    [size=5]1. FindGameObjectsWithTag[/size]
    Ich bin kein großer Fan von Tags, [s]da sie dazu verleiten, jegliche Identifikation darüber laufen zu lassen und sich dann zu wundern, wie man 33 verschiedene Arten von Objekten unterscheiden soll.[/s] Inzwischen gibt es offenbar beliebig viele Tags. Trotzdem sind Tags aus verschiedenen Gründen nicht ganz so toll. Wenn es dich interessiert, frag mich gerne :)

    Für wirklich häufig vorkommende Objektsorten wie eben Player, Respawn oder Finish sind Tags aber zumindest von der Idee her vertretbar. Wie sieht es mit der Performance aus?

    Der Code:
    [CODE]
    var sw = new Stopwatch();
    sw.Start();
    var gos = GameObject.FindGameObjectsWithTag("Respawn");
    sw.Stop();
    print(sw.Elapsed);
    [/CODE]
    Das Ergebnis:
    [b]In Awake: 10533 (1360)[/b]
    [b]In Start: 4065 (1703)[/b]

    Zwischenfazit: Offenbar legt Unity zwischen Awake und Start Strukturen an, die FindGameObjectsWithTag bei vielen Objekten beschleunigen. Verrückt!


    [size=5]2. FindGameObjectsWithTag mit GetComponent<T>[/size]
    Wir wollen in den meisten Fällen direkt die Referenzen auf die Komponenten haben, da wir ja mit denen arbeiten und nicht mit dem GameObject. Diese sollten wir jetzt besorgen und speichern, sonst heißt es im Zweifelsfall in Update GetComponent<T>, und das muss ja nicht sein ;)

    Der Code:
    [CODE]
    var sw = new Stopwatch();
    sw.Start();
    var gos = GameObject.FindGameObjectsWithTag("Respawn");
    var things = new Something[gos.Length];
    for(int i = 0; i < gos.Length; ++i)
    {
    things[i] = gos[i].GetComponent<Something>();
    }
    sw.Stop();
    print(sw.Elapsed);
    [/CODE]
    Das Ergebnis:
    [b]In Awake: 73343 (3540)[/b]
    [b]In Start: 69558 (3050)[/b]

    Zwischenfazit: Mit GetComponent<T> legt diese Variante ordentlich zu. Je mehr Objekte man hat, desto öfter wird GetComponent<T> aufgerufen und das dauert.
    Getestet habe ich auch mit LINQ. Das dauert länger, insbesondere bei wenigen Objekten (10849 in Awake für 3 GOs!), da ein Umwandeln durch ToList() und, will man am Ende wieder ein Array haben, danach ein Zurückwandeln mit ToArray() nötig ist. Und das kostet konstant eine Menge Zeit.


    [size=5]3. Eine List<T> in T.Awake befüllen[/size]
    So habe ich das bisher immer gemacht. Ich halte es für elegant, dass die Menge aller Komponenten T auch in der Klasse T angelegt und verwaltet wird. Aber wie sieht's mit der Performance aus?

    Der Code:
    [CODE]
    private static Stopwatch sw = new Stopwatch();
    public static List<Something> all = new List<Something>();

    void Awake()
    {
    if(all.Count == 0) sw.Start();
    all.Add(this);
    if(all.Count == 4000)
    {
    Finder.sw.Stop();
    print(sw.Elapsed);
    }
    }
    [/CODE]
    Das Ergebnis:
    [b]29928 (975)[/b]

    Zwischenfazit: Diese Variante ist offenbar durchaus schneller. Zumindest, wenn man Anspruch darauf hat, die Referenzen auf die Komponente zu haben, und nicht auf die GameObjects.
    Bei wenigen GameObjects allerdings ist diese Methode soweit die beste.

    [size=5]4. FindObjectsOfType<T>[/size]
    Auf diese Idee bin ich erst durch das Tutorial gekommen. Einfach mal ausprobieren!

    Der Code:
    [CODE]
    var sw = new Stopwatch();
    sw.Start();
    things = FindObjectsOfType<Something>();
    sw.Stop();
    print(sw.Elapsed);
    [/CODE]
    Das Ergebnis:
    [b]In Awake: 49376 (5184)[/b]
    [b]In Start: 62903 (4657)[/b]

    Zwischenfazit: Gar nicht mal schlecht! Diese Variante ist etwas langsamer als Variante 3, besonders bei wenigen GameObjects. Sie hat allerdings noch einen dicken Haken, aber auf den gehe ich im nächsten Zwischenfazit ein.

    [size=5]5. FindObjectsOfType(typeof(T)) as T[][/size]
    Das Tutorial benutzt diese Variante der Methode... ich hätte zwar gedacht, dass die generische Variante schneller ist, aber trotzdem habe ich es einfach mal ausprobiert.

    Der Code:
    [CODE]
    var sw = new Stopwatch();
    sw.Start();
    things = FindObjectsOfType(typeof(Something)) as Something[];
    sw.Stop();
    print(sw.Elapsed);
    [/CODE]
    Das Ergebnis:
    [b]In Awake: 31080 (2536)[/b]
    [b]In Start: 28986 (2226)[/b]

    Zwischenfazit: Verrückt, diese Variante ist tatsächlich schneller als die generische.
    Aber zu dem erwähnten Problem: FindObjectsOfType kommt für mich als Lösung nicht wirklich in Frage, da man es dort benutzen muss, wo man die Objekte braucht, nicht dort, wo die Objekte sind.
    Braucht man die Liste aller Komponenten also an mehreren Stellen, muss man FindObjectsOfType auch mehrere Male aufrufen. Einzige Alternative ist ein "T-Manager", der alle Komponenten vom Typ T verwaltet und für andere zur Verfürgung stelle. Und das ist alles andere als lose Kopplung. Bäh.

    [size=5]Endfazit[/size]
    Die ganzen Messergebnisse sind hier so klein, dass sie kaum wichtig erscheinen. Und ja, auf einem guten Computer ist FindGameObjectsWithTag vielleicht gar nicht mal soo problematisch.
    Jedoch soll vielleicht auch das Spiel auf Android exportiert werden, und die Zielgruppe dort ist nicht bekannt dafür, besonders geduldig zu sein ;)
    Außerdem gilt nach wie vor meine Kritik an Tags und, wer aufmerksam gelesen hat und sich ein wenig auskennt, mag bemerkt haben, dass meine Kritik an FindObjectsOfType auch für FindGameObjectsWithTag gelten muss: Haben mehrere Scripts Interesse an z.B. allen Spawns, wird's haarig.
    Der einzige saubere Weg ist imo der, die Menge aller Komponenten T in der Klasse T selbst aufzubewahren. Und das geht mit Variante 3.

    Ein schöner Umstand, dass diese Vorgehensweise auch gleichzeitig die performanteste zu sein scheint.
  2. Hab die Arbeit wieder an UltraTerrain aufgenommen und schon einige Tests der bisherigen Strukturen machen können.

    Die ganzen bisherigen Bugs konnte ich beheben (meist Deadlocks oder Raceconditions) und habe dabei viele Subsysteme umgeschrieben:

    Fehler beim Speichern der Daten in das VFS: War die Menge die geschrieben wurde zu gering konnte es passieren das ein neuer Speicherblock nicht angefordert wurde.

    Threading System: Habe den UTH verwendet und stark aufgemöbelt, der UTH bietet nun eine bessere Grundstruktur (Nur noch Task und Task<T> als Basiselemente. Elemente der TPL wurden übernommen und ein brauchbares Eventsystem wurde implementiert, wodurch ich nun mehrere asynchrone Aufgaben elegant aneinander Ketten kann und auch in alle relevanten Threads kommunizieren kann.

    Page und Voxel System wurde stark überarbeitet:
    In einem vorherigen Blogpost wurde ja bereits beschrieben wie das Material und Datensystem aussieht, dies hat sich nun aber weiter verändert und nun bin ich einen Schritt zufriedener. Da nun einige Subsysteme des Voxelsystems weiter getrennt voneinander wurden.

    Ein VoxelObject (das Objekt was alles verwaltet) wird nun wie folgt erzeugt:
    [CODE]
    var voxelDataDescriptor = VoxelDataDescriptor.Create().With<int>("TileId");

    var voxelObjectDescriptorData = new VoxelObjectDescriptorData()
    {
    WorldPageBounds = new Box(new Integer3(int.MinValue, int.MinValue, 0), new Integer3(int.MaxValue, int.MaxValue, 1)),
    ChunksPerPage = new Integer3(2, 2, 2),
    VoxelsPerChunk = new Integer3(5, 5, 10),
    ChunkSizeInWorldUnits = new Integer3(10, 10, 10),
    PageDataGenerator = new PointPageGenerator(),
    ChunkMeshProvider = new TileProvider(),
    DataStorage = new DataStorage("VoxelObject.voxel"),
    UnusedPageUnloadTimeOutInMilliseconds = 20000,
    VoxelDataDescriptor = voxelDataDescriptor
    };

    voxelObject = new VoxelObject(voxelObjectDescriptorData);
    [/CODE]

    Dieser Code ist direkt aus meinem Beispielprojekt entnommen, welches nur dazu dient eine 2D Welt (Top Down) darzustellen, die in der Höhe dennoch mehrere Voxelebenen enthalten kann.

    Die WorldPageBounds geben an welche Reichweite die erzeugten Pages haben dürfen, hier zb ist die Welt auf eine ziemlich Große 2D Ebene beschränkt ohne Platz für Pages über und unter dem Nullpunkt.

    Pro Page können 2³ Chunks erzeugt werden, Chunks enthalten zB Meshdaten, etc.
    Jeder Chunk enthält 5x5X10 Voxel (250 Voxel pro Chunk).
    Und jeder Chunk hat eine Größe von 10x10x10 Welteinheiten.

    Zum generieren der Voxeldaten für jede angeforderte Page wird eine PointPageGenerator Klasse verwendet, in meinem Fall erzeugt diese Klasse einfach nur kleine Hügel, das ist quasi der Weltgenerator.

    Der TileProvider wandelt hier wiederum die Daten der Page für einen einzelnen Chunk in die Daten für den Chunk um. Hier würden zB für jeden Voxel ein Tile generiert, zb ein Grasteil für einen Grasvoxel.

    Der DataStorage gibt an in welche Datei die persistenten Daten gespeichert werden sollen. Dies passiert aber nur wenn Chunks dies wollen (Kann je nach Chunkmesh Klasse spezifiziert werden) oder wenn eine manuelle Anderung der Voxel eines Pages vorgenommen wurde (irgendetwas wurde abgebaut oder eben verändert).

    Nicht benötigte Pages und Chunks werden nach 2 Sekunden entladen. Unbenötigt sind sie dann wenn niemand für den Bereich in dem die Page liegt eine Anforderung gestellt hat. Meist wäre dies der Fall wenn der Bereich zu weit vom Spieler entfernt liegt.

    Als letztes gibt es den VoxelDataDescriptor, der angibt was ein Voxel an Daten enthalten kann. In diesem Beispiel möchte ich zB nur die TileIds in den Voxeln speichern und zwar als int (byte oder ushort würde hier komplett ausreichen um Speicher zu sparen.)

    Ohne weitere Parameter hat diese TileID die Wirkung dass es das ganze ChunkMesh zur kompletten Regenerierung zwingt. Es gibt hier als Parameter 3 Optionen:
    1. Gar nichts am ChunkMesh ändern
    2. ChunkMesh soll nur geupdated werden
    3. ChunkMesh muss komplett neu aufgebaut werden

    Das VoxelObjekt liefert nun auch eine Reihe von Events, zB wenn eine page geladen/entladen wird, ein Mesh geupdated oder erstellt oder gelöscht werden muss. Solche Dinge.

    Das VoxelObjekt arbeitet im Hintergrund immer, intern gibt es einen TickThread der das VoxelObjekt alle 1000 Millisekunden aktualisiert, verwaiste Pages entfernt (gelöschte Pages werden eine Zeit lang mithilfe von WeakReferences gecached) und auch Pages und Chunks bereinigt die nicht mehr gebraucht werden.

    Man benachrichtigt das VoxelObjekt über die benötigten Daten so:

    [CODE]
    var instantArea = new Box(playerPosition, voxelObject.Descriptor.PageVoxelSize);
    var delayedBorder = voxelObject.Descriptor.PageVoxelSize * 1
    var type = RequirementType.ChunkMesh | RequirementType.VoxelData;
    var requirement = new Requirement(instantArea, delayedBorder, type);

    voxelObject.TrackRequirement(requirement);
    [/CODE]

    Die instantArea gibt den Bereich an der sofort geladen werden muss, dabei wird das VoxelObjekt blockieren bis alle nötigen Daten in diesem angegebenen Bereich (Bereich ist angegeben als Voxel) geladen wurden.

    Der delayedBorder gibt an um wieviele Voxel in jede Achse der Box/Area der Lade Bereich ausgehend der instantArea erweitert werden soll. Dieser Bereich wird dann im Hintergrund geladen und kann irgendwann fertig werden. Das anfordern dieses extra Bereiches wird dabei nichts blockieren.

    Der type gibt wiederum an was genau wir eigentlich in diesen Bereichen haben wollen. In diesem Beispiel sind es sowohl Voxeldaten als auch ChunkMesh Daten. Wenn wir zB ein Spiel basteln bei dem wir nichts abbauen/verändern könne, ist es zb nicht notwendig die Voxel Daten permanent im Speicher zu behalten. Das laden der Chunk Daten sorgt passiv dafür dass diese VoxelDaten geladen werden sollte es noch kein ChunkMesh geben.

    Zu guter letzt noch ein wenig Code um zu zeigen wie man jetzt die VoxelDaten verändern kann:

    [CODE]
    var box = new Box(playerPosition, new Integer3(10, 10. 10));
    var mapRequest = MapRequest.Create()
    .ForMaterials(0)
    .ForBox(box)
    .ForBuffers("TileId")
    .ReadAndWriteAccess();
    using (var mapHandle = voxelObject.Map(mapRequest))
    {
    var tileIds = mapHandle.GetBuffer<int>("TileId", 0);
    for (int i = 0; i < tileIds.Length; ++i)
    {
    if (tileIds[i] != 0)
    tileIds[i] = 1; // Grass
    }
    }
    [/CODE]

    In diesem Beispiel sagen wir dem VoxelObject dass wir gerne einen 10x10x10 Bereich um die Position des Spielers verändern wollen. Wir fordern das Material mit dem Index 0 an und interessieren uns nur für die TileIds und wollen dabei auch die aktuellen Daten haben.

    Die aktuelln Daten benutzen wir um in diesem Beispiel nur Tiles zu verändern die eine TileID ungleich 0 haben, 0 steht dabei für "hier ist nichts". Sprich wir machen alles was existiert in einem 10x10x10 Bereich um den Spieler zu Gras.

    Das war es soweit, letztendlich noch ein Screenshot wie es aktuell aussieht, nicht spektakulär aber zum testen und debuggen reicht es mir bisher aus:

    [attachment=1808:Untitled2.png]

    [attachment=1809:Untitled3.png]
  3. [img]http://s3.directupload.net/images/110109/oopo5c99.jpg[/img]
    [size="2"][font="Verdana"][b]
    [size="4"]Portal[/size]
    [/b]
    [b]Genre:[/b] Action / Geschicklichkeit
    [b][b]Veröffentlichungsdatum:[/b] 10 Oct 2007
    Entwickler:[/b] Valve
    [b]Publisher: [/b]Valve
    [b]Multiplayer:[/b] Nein
    [b]Level Editor:[/b] Ja
    [b]Steam Errungenschaften:[/b] Ja
    [b]Steamplayâ„¢:[/b] Ja

    Portal ist kurz gesagt ein Denkspiel das nach einiger Zeit in ein Spiel für Zeitvertreib wechselt.
    Portal geizt mit 19 Level und einer geschätzten Spieldauer von 2,5-3 Stunden.

    [b]Die Geschichte:[/b]

    Sie wachen in einem Aufwachraum auf und werden von einer netten weiblichen Computerstimme begrüßt. In diesem riesigem Labor werden Sie durch Portale geschickt um von A nach B zu gelangen um mit einem Aufzug zum nächsten Level zu gelangen. Die moderne Computerstimme begleitet Sie dabei 19 Level lang und gibt recht ironische Witze von sich, jedoch hilft Ihnen dabei durch das Labor zu gelangen. Am Ende erwartet Sie eine Belohnung.
    -Wird nicht verraten-
    [b]
    Fragen die jedem in den Kopf kommen nachdem man Portal gespielt hat:[/b]

    [i]Wieso bin Ich dort aufgewacht und wieso bin ich gefangen und muss diese Rätsel lösen?[/i]
    - Dies ist unklar. Es steht nur fest das Sie eine art Versuchskaninchen für das "Aperture Laboratories" sind.
    - Der Zweck wird nicht gennant.

    [b]Die Details von Portal:[/b]

    Es gibt immer zwei Portale. Ein Eingangs- und ein Ausgangsportal. Diese können aber auch andersherum genutzt werden.
    Durch die Portale können sie durchsehen und schauen was auf der anderen Seite passiert.
    Zu beginn sind Portale vorgegeben und müssen durch diese nur wechseln.
    Alleine oder mit einem Cube - der meist für eine beschwerung dienen muss um eine Tür zu öffnen.
    Nach einigen Level und verstehen des Prinzips bekommen sie eine Portalkannone in die Hand gedrückt und dürfen selber ein Portal (das zweite ist fest) platzieren.
    Dies fördert ein wenig mehr. Gegen 3/4 des Spieles dürfen sie nun genüsslich zwei Portale in der öffnen und schließen.
    [b]
    Einige Aufgaben:[/b]

    Die Aufgaben in Portal sind recht abwechslungsreich. Gegenstände ohne oder mit ihenen durch ein Portal befordern um einen Button zu beschweren der eine Tür offen hält, oder Leuchtkugeln per Portal umzulenken um wiederum eine Tür zu öffnen. Wenn Sie durch eine erhöte Fallgeschwindigkeit in ein Portal gelangen, werden sie aus dem anderem Portalausgang ebenfalls "herausgeschleudert" und können somit Spalten oder hohe Mauern überwinden.

    [b]Fazit: [/b]Portal ist ein lustiges Denkspiel das viel Spaß macht durch eine tolle aber einfache Grafik. Ein Zeitvertreib fürs Wochenende.

    [i]Ein Portal-Spieler hat es geschafft das Spiel in unter 10Minuten durchzuspielen. Respekt![/i]
    [url="http://www.youtube.com/watch?v=W1U5RUVENNE&feature=player_embedded#at=751"]Youtube-Link[/url]


    [size="4"][b]Portal 2[/b][/size]
    [b]
    Genre: [/b]Action, Abenteuer / Geschiklichkeit
    [b]Veröffentlichungsdatum:[/b] 18 Apr 2011
    [b]Entwickler: [/b]Valve
    [b]Publisher: [/b]Valve
    [b]Multiplayer:[/b] Nein
    [b]Co-op:[/b] Ja
    [b]Platformen:[/b] PC, Mac, Ps3, xbox360

    [b]Besonderheit: [/b]Bewegungssteuerung für den PC

    In Portal 2 werden neue Testkammern im "Aperture Laboratories" erwartet, sowie einen Koop-Modus der eine eigene Kampage enthält mit unterschiedlichen Spielcharaktern. Dabei ist ein gemeinsammes Denken vorrausgesetzt. Valve hat versprochen das die Level anspruchsvoller werden und die Physik überarbeitet wurde.[/font][/size]
    • 1
      entry
    • 6
      comments
    • 4864
      views

    Recent Entries

    Hey leute!

    Seit gestern startet mein Unity Projekt nicht mehr. Keine ahnung warum, das Bild das ich gemacht habe lässt sich leider nicht hochladen schreibe es ganz unten hin was Unity schreibt. Hab jedefalls nach der Nachricht UNity des öfteren Deinstalliert und neu Installiert. Bitte um Hilfe! Danke im voraus!


    [b]_____________________________________________________________________________[/b]
    [b]Opening Project in Non-Matching Editor Installation[/b]

    You project was last opened with a different setup of Unity.

    C:/Users/PC1/Documents/Project55

    The saved project (5.4.1f1) does not match the launched editor (5.4.2f2).

    This may require re-import. Please be aware that openening an older version is unsupported.

    Note that if a build target installation is missing, this may also cause a re-import.
    ______________________________________________________________________________
    • 1
      entry
    • 1
      comment
    • 3488
      views

    Recent Entries

    Hi ich habe die neueste Version von Unity, die neueste Version von Windows 10 und die neusten Grafik-Treiber. Aber wenn ich Unity starte stürzt es im Ladebildschirm ab. Im Crash report Fenster kommt folgende Fehlermeldung:

    Unity Editor [version: Unity 5.4.2f2_b7e030c65c9b]

    Unity.exe caused an Access Violation (0xc0000005)
    in module Unity.exe at 0033:000008d4.

    Error occurred at 2016-11-04_192628.
    C:\Program Files\Unity\Editor\Unity.exe, run by Drewes.
    29% memory in use.
    16319 MB physical memory [11578 MB free].
    18751 MB paging file [11044 MB free].
    134217728 MB user address space [134216534 MB free].
    Write to location 000008d4 caused an access violation.

    Context:
    RDI: 0x00000000 RSI: 0x136e8c60 RAX: 0x00000000
    RBX: 0x136e8c60 RCX: 0x000008d4 RDX: 0x00000001
    RIP: 0x000008d4 RBP: 0x00000000 SegCs: 0x00000033
    EFlags: 0x00010216 RSP: 0x1328e8a8 SegSs: 0x0000002b
    R8: 0x00000000 R9: 0x00000001 R10: 0x000008d4
    R11: 0x00715a08 R12: 0x1328eea8 R13: 0x1328eeb8
    R14: 0x00000000 R15: 0x136dbf10

    Bytes at CS:EIP:
    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

    Stack:
    0x1328e8a8: 0e408768 00000000 1328e900 00000000 h.@.......(.....
    0x1328e8b8: 00002736 00000000 00000000 00000000 6'..............
    0x1328e8c8: 00000001 00000000 00000000 00000000 ................
    0x1328e8d8: 0e3f8838 00000000 136e8c60 00000000 8.?.....`.n.....
    0x1328e8e8: 136e8c60 00000000 00000000 00000000 `.n.............
    0x1328e8f8: 00000000 00000000 00002736 00000000 ........6'......
    0x1328e908: 00000000 00000000 00000000 00000000 ................
    0x1328e918: 00000000 00000000 00000000 00000000 ................
    0x1328e928: 08351c61 00007ff9 000008d4 00000000 a.5.............
    0x1328e938: 08356001 00007ff9 00000000 00000000 .`5.............
    0x1328e948: 4c0cf5c0 00007ff9 00000000 00000000 ...L............
    0x1328e958: 136e8c60 00000000 136d7600 00000000 `.n......vm.....
    0x1328e968: 083565f6 00007ff9 00000000 00000000 .e5.............
    0x1328e978: 136e8c60 00000000 45967d3d 000013a0 `.n.....=}.E....
    0x1328e988: 00000000 00000000 01f27798 00000000 .........w......
    0x1328e998: 07abeeb9 00007ff9 00000102 00000000 ................
    0x1328e9a8: 00000000 00000000 45967ded 000013a0 .........}.E....
    0x1328e9b8: 00000000 00000000 00000010 00000000 ................
    0x1328e9c8: 07abfa4a 00007ff9 00000010 00000000 J...............
    0x1328e9d8: 1328eab0 00000000 00000000 00000000 ..(.............
    0x1328e9e8: 00000000 00000000 00000140 00000000 ........@.......
    0x1328e9f8: 07ac069a 00007ff9 01f55c28 00000000 ........(\......
    0x1328ea08: 0934c500 00007ff9 1328eea8 00000000 ..4.......(.....
    0x1328ea18: 00000000 00000000 0a797590 00007ff9 .........uy.....
  4. [b][size=6]Master Server Framework (Beta $40 statt $50)[/size][/b]

    Jungs und Mädels.
    Ich habe schon länger auf diesen Moment gewartet. Endlich. Es gibt im Asset Store den "Master Server Framework" und gerade noch in Beta. Daher weiterhin im Entwicklung und könnt quasi eure Wünsche einbringen und sie wird vielleicht implementiert.

    Allgemein ist das ein Framework, was sich erweitern lässt. Das Framework nimmt einige arbeiten der Entwickler zum Thema-Server backend ab. Quasi etwas für MMO? Oder Multiple Server? Verzicht auf Unity Service oder Photon Cloud Server und deren Gebühren?

    [b][size=5]Warum begeistere ich mich aber für diesen Package?[/size][/b]
    Was macht es (für mich) besonders?
    Eigentlich ist das ein Framework. Das heißt, dass man immer noch selbst Coden müsste, um überhaupt Features zu haben, aber es wurden "Module" eingebaut.

    Für mich ist das hier das wichtigste:[list]
    [*]Es hat ein [b]Auto start / close Server[/b] Feature, dass heißt, wie bei Photon Cloud werden server gestartet. Damit kann ich auf Photon verzichten. Nicht nur das. Hier braucht man auch keine sorgen über NAT machen.
    [/list]
    Aber folgendes gibt es auch:[list]
    [*]Authentication - Registration und Einloggsystem
    [*]Spielerprofile
    [*]Lobbysystem / Gameserver - Die Server werden also gelistet und man kann auch vorher sich in der lobby sehen. Auch shoppen und so weiter geht. Spielerprofile anschauen. Stell mir das ungefähr wie bei Dota 2 oder so vor.
    [*]Spawner Servers: Das was ich oben schon sagte:
    [*]Chat: Private Nachrichten oder Globale
    [/list]
    Das System ist so aufgebaut, dass man mit verschiedenen Network Solution arbeiten kann. Das heißt Bolt, Forge Networking, UNet usw.

    Weiterhin sollen auch viele andere Dinge kommen:[list]
    [*]Admin UI (to manage servers, connected users and etc.)
    [*]MMO-like Instances module
    [*]Matchmaker with Queues and automatic server starting [b](für mich sehr wichtig)[/b]
    [*]Friends and Guilds / Clans
    [*]Shop functionality
    [*]Leaderboards
    [*]Forums
    [/list]
    Diesen Queuesystem könnte ich noch selber kriegen, da ja schon server autostart und so gibt, aber warum nicht.

    Hier zum Paket.
    [url="https://www.assetstore.unity3d.com/en/#!/content/71391"]https://www.assetsto...!/content/71391[/url]


    Hier zum Forum:
    [url="https://forum.unity3d.com/threads/master-server-framework.430570/#post-2812490"]https://forum.unity3...0/#post-2812490[/url]

    Falls euch das interessiert postet ruhig eure Vorschläge.
    • 3
      entries
    • 4
      comments
    • 16068
      views

    Recent Entries

    Rasly
    Latest Entry
    Leider komme ich nicht weiter hier und muss mich auf andere Sachen unstelen.

    Die Idee war gut aber leider könnte ich keine ausreichende Kampfsystem erstellen, dauert einfach zu lange und mir gefält nicht so was darus wird. Das Project brauch also eine komplette Revision.

    Nebenbei habe ich versucht ein compacteres Project aufzustellen, und ich habe dafur ein Demo erstellt.[url="https://www.youtube.com/watch?v=hVRbES2owLM"] Ich habe eine Video davon hinzufügt.[/url] Das sollte ein Spiel werden bei der Leute ohne registrierung einlogen können und dan versuchen sollen so lange wie möglich zu überleben um dann sein Name in die Rangliste einzutragen. Das Stadt is eine persistent mmo Welt, voll mir Zombies and anderen pvp Spieler. Leider hat mich das resultat auch nicht überzeugt.

    Ausserdem habe ich noch weitere ideen ausprobiert und ein neues Project geplant, dass deutlich besser sein solte, aber ich kann es noch nicht ausprobieren. Das wird eine neue Revision sein einer meiner Projecte, wo es dabei geht einen Spaceship zu bauen und damit kämpfen, ähnlich wie Robowars.
  5. In meinen letzten Beitrag habe ich mich hauptsächlich dem Thema KI und all seinen Facetten zu gewandt, sodass ich in dieser Woche mehr am allgemeinen Spielprinzip gewerkelt habe. So bin ich zum Schluss gekommen das ich mein Hauptaugenmerk auf den Karrieremodus wenden sollte, da die typischen Schnellkämpfe die für das Gerne normalerweise prädestiniert sind, keinen Sinn machen würden, da ja ein Rundenkampfsystem vorliegt.

    [b][b]Karrieremodus? Wie soll dieser aussehen?[/b][/b]

    Mein derzeitiges Konzept geht dahingehend dass der Spieler zuerst einen Kämpfer erstellt. Dort hat man dann die Möglichkeit seine Gewichtsklasse auszuwählen und seinen Kämpfer zu erstellen. Von der Theorie her hätte ich auch schon einige Umsetzungsmöglichkeiten im Kopf, wobei mir derzeit immer noch ein Grafiker fehlt, um den Charaktereditor fertig zu bekommen. Des Weiteren soll der Spieler mit Trainingseinheiten die Möglichkeit bekommen seiner Spielfigur neue "Moves" beizubringen, bzw. alte zu verbessern. Ein weiteres RPG Element wären die levelbaren Grundwerte wie Stärke, Ausdauer; Schadenswirkung (bis jetzt nur ein Konzept). So kann der Spieler seinen eigenen individuellen Kämpfer nutzen.

    [b][b]Was hab ich praktisch gemacht?[/b][/b]

    Kampfsystem:
    1. Wenn der Spieler einen bestimmten Angriff oft genug abbekommt, sinkt sein Maximaler Lebenspunkte Wert, sodass er in späteren Kämpfen mit weniger Lebenspunkten startet.
    2. Allgemein in der Schwierigkeitsgrad etwas gestiegen, was ich durch Schadensanpassungen erreicht habe.

    Karrieremodus:
    1. Mit jeden Kampf den der Spieler absolviert vergeht eine Woche im Spiel. Im späteren Spiel wird es Intervalle geben, in denen eine bestimmte Anzahl an Kämpfen absolviert werden kann.
    2. Der Spieler kann seinen Kämpfer nun regenerieren lassen um so Kampfverletzungen zu heilen.
    3. Die Grundlagen der verschiedenen Ligen wurden erstellt, die derzeit aber noch nicht mit Einbezogen werden.

    Grafik:
    1. Das Interface im Karrieremodus wurde etwas überarbeitet, ist aber noch lange(!) nicht final.
    2. Die Interface Strukturierung wurde etwas angepasst.

    [b]Planung:[/b]

    Ich überlege derzeit wie ich am besten gegnerische Kämpfer abspeichere. Bei meiner jetzigen Methode habe ich jeden Kämpfer eine ID zugewiesen. Mithilfe dieser ID erkennt das Spiel welcher Kämpfer als nächstes kommt und lädt seine Spezifischen Informationen. Das Problem dabei ist dass das Anmationsystem nicht mit geladen wird und somit gar nichts passiert. Sprich das ganze System braucht nochmal eine Überarbeitung. Falls jemand einen Lösungsvorschlag hat, immer her damit.
  6. So nachdem ich mich nun tagelang unbewusst abgelenkt habe, habe ich es heute endlich geschafft meine Berührungsängste zu überwinden.
    Die kommen mir leider immer, wenn ich mich an neue Dinge ranwagen möchte, aber langsam erkenne ich das rechtzeitig und habe gelernt mich zusammenzureißen.
    Fazit:
    Auch wenn der Char noch ein Platzhalter ist, kann er nun laufen und sich drehen.
    Die nächste Aufgabe wird dann sein, dass die Kamera sich nicht nur mit bewegt, sondern auch mit rotiert. Anschließend wird dann noch aus der Welt geschafft, dass man die Berge hochhüpfen kann. Da ich selbst in jedem Spiel versuche in jeden Winkel zu gelangen, stach mir das sofort ins Auge. Aber eins nach dem anderen....

    Nun heißt es erstmal Abschied nehmen für eine Weile und volle Konzentration auf meine Abschlussprüfung...
  7. Da müsste ein Link auf das ursprüngliche Forum-Posting dabei stehen ... es ging um die Frage, wie man 0, 0.5, 1.0 linear auf 0.5, 0.75, 1.0 abbilden kann. Da kam natürlich dann recht flott auch Lerp, also lineare Interpolation, was für so etwas die naheliegendste Methode ist. Ich dachte mir, dass aber Artists sicher lieber AnimationCurves verwenden, weil das anschaulicher und flexibler ist.

    Um mich nicht mit einem Tip zu blamieren, der potenziell der Performance schadet, machte ich die Bemerkung:

    [quote name='jashan' timestamp='1436865245' post='76067']Die Flexibilität, die dir das bietet kostet natürlich ein wenig Performance ... da müsste man mal testen, was das konkret für einen Unterschied macht.[/quote]

    ... und dann wollte ich's aber genau wissen. Das Ergebnis hat mich dann am Ende doch etwas überrascht (deswegen als Blog-Posting):

    [i]Wenig[/i] heisst in diesem Fall wirklich [u][b]wenig[/b][/u]: Bei 10000 Iterationen dauert es in beiden Fällen noch keine ganze Millisekunde. Bei 1 Mio Iterationen habe ich bei [b]Lerp 26 ms[/b], bei der [b]AnimationCurve 28ms[/b].

    Allerdings braucht die AnimationCurve eine gewisse Zeit zur Initialisierung: [b]bei einem Schleifendurchlauf[/b] habe ich bei [b]AnimationCurve 1090 Ticks[/b], bei [b]Lerp 40 Ticks[/b]. Da könnte man jetzt sagen: "Lerp ist 27 Mal schneller, auf keinen Fall AnimationCurves verwenden". Aber das gilt halt nur, wenn man es nur ein einziges Mal verwendet (und 1 Tick ist 1/10000 ms, also wenn ich's richtig im Kopf habe 0.1 ns ... also ... praktisch "keine Zeit" ;-) ).

    Bei der zweiten "Runde" mit einem Durchlauf, sind es dann 0 Ticks, 0 Ticks (manchmal auch 10 Ticks, sowohl bei Curve als auch bei Lerp, also kein wirklicher Unterschied messbar).

    [b]Wow, man muss so etwas wirklich sauber testen und messen:[/b] In der "Praxis" ist es dann nämlich offenbar so, dass die [b]AnimationCurve sogar schneller ist, als Lerp![/b] Damit hätte ich jetzt nicht gerechnet: Beim ersten Durchlauf mit 1 Mio Iterationen ist nach wie vor Lerp minimal schneller (Lerp 26ms, AnimationCurve 28ms). Aber bei allen Wiederholungen haben wir dann Lerp immer noch 26ms, aber AnimationCurve 24ms.

    Wieder mal was gelernt ;-) ... ich kann's mir nur so erklären, dass AnimationCurve irgendetwas schlau cachet oder irgendwie anders umgesetzt wird, so dass nach einem "warmup" die Berechnung extrem schnell ist (schneller als das praktisch triviale Lerp).

    Und, um auch den letzten Rest meiner Neugier zu befriedigen: Auch wenn die Kurve deutlich komplexer ist (mit zig Kontrollpunkten) hat das nur minimale Auswirkungen auf die Performance, was allerdings die Caching-Theorie (die sowieso auf Strohbeinen stand) widerlegt, weil sonst der erste Durchlauf deutlich länger dauern müsste.

    [CODE]
    using UnityEngine;

    public class SimpleCurve : MonoBehaviour {

    public AnimationCurve curve = new AnimationCurve();

    public int counter = 1000000;

    public float Evaluate(float t) {
    return curve.Evaluate(t);
    }

    public void Awake() {
    for (int i=0; i < 10; i++) {
    TestA();
    TestB();
    }
    }

    private void TestA() {
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch ();
    sw.Start();
    float result = 0;
    for (float i=0; i < counter; i++) {
    result = curve.Evaluate(i / counter);
    }
    sw.Stop();
    Debug.LogFormat("Using curve for {3} iterations took: {0} ms, {1} ticks, result was: {2}",
    sw.ElapsedMilliseconds, sw.ElapsedTicks, result, counter);
    }

    private void TestB() {
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch ();
    sw.Start();
    float result = 0;
    for (float i=0; i < counter; i++) {
    result = Mathf.Lerp(0.5F, 1.0F, i / counter);
    }
    sw.Stop();
    Debug.LogFormat("Using lerp for {3} iterations took: {0} ms, {1} ticks, result was: {2}",
    sw.ElapsedMilliseconds, sw.ElapsedTicks, result, counter);
    }
    }
    [/CODE]


    Source: [url="http://forum.unity-community.de/topic/10012-mathematische-anfangerfrage/page__view__findpost__p__76073"]Mathematische Anfängerfrage[/url]
  8. Heyho Tabl,

    na!! Alles klar bei dir? In meinen (privat) GameDev Projekt geht es wirklich heiß her! Erst vergangenen Dienstag hatten wir ein krass geiles Teammeeting. Nee...ehrlich jetzt...

    Es war das alle erste Teammeeting seit der Gründung des Teams :blink:

    Naja was heisst hier Gründung...wir haben mal mit 8 Leuten angefangen (naja...es war noch quasi vor dem Anfang. Bevor dir erste Zeile Code gescriptet wurde :unsure: - wie dem auch sei! Wir haben mal mit vielen angefangen und nun sind wir nur noch 3 :rolleyes:

    Ein Programmierer, eine Grafikdesignerin und ein 3D Modellierer! Naja und wenn man meine kleine Tochter (Malen und Basteln xD) mit dazu zählt sind es sogar 4 ^_^

    Noch kann ich nicht viel zu dem Spiel sagen. Das Team gibt es zwar schon ne weile, aber wir haben viel hin und her gemacht, um unsere Fähigkeiten erstmal auszubauen. So habe ich mich mit Projektplanung und Programmierung beschäftigt, während die anderen beiden Ihre jeweiligen Talente weiterausgebaut haben. Die Grafikdesignerin hat viel auf Papier gezeichnet und mit Photoshop rumhantiert und der 3D Modellierer hat mit Autodesk Maya krass geile Scheisse umgesetzt :lol:

    Jedenfalls haben wir hier und da auch kleine Game-Projekte gehabt. Wie nen geiles Tetris. Netzwerk sowie Ranked TicTacToe. Oder 3D Mini Shooter :rolleyes: like AngryBots aber halt selfmade und das mit First Person und Third Person Ansicht ^_^

    Jedenfalls arbeiten wir nun seit kurzem an unserem ersten echten Projekt. Aber hey bevor man anfängt braucht man ein ordentliches Konzept und genau das haben wir in dem Meeting gemacht. Naja wir haben mehrere Sachen gemacht. Hier mal eine Liste:[list]
    [*]Kick Off Meeting
    [*]Konzept Planung
    [*]Einführung in Projekt Planung - na wie wir nun alles durch ziehen:
    [list]
    [*]Trello als Taskboard
    [*]BitBucket (Git) zur Versionierung (Bitbucket Wiki für Dokumentation)
    [*]Raw Assets im Dropbox
    [*]Skype/Whatsapp/Telefon für Kommunikation
    [/list][*]Wir haben alle zusammen Raclette gegessen :lol: (Mann war das Lecker)
    [*]Und zum Abschluss haben wir unseren ersten Meilenstein definiert - die sogenannte Alpha #1
    [/list]
    Das Meeting war am Dienstag. Heute ist Freitag. Was soll ich sagen - Version 0.0.2 ist nach drei Tagen bereits vorhanden xD. Version 0.0.1 war Mittwoch Nacht schon vorhanden, sprich:[list]
    [*]erste Version des Terrains
    [*]Charakter Steuerung
    [*]Charakter Attribute (diverse Status Attribute)
    [*]Beleuchtung
    [*]System Prefab
    [/list]
    Mit Version 0.0.2 kam nun:[list]
    [*]Charakter HUD
    [*]Charakter Inventar
    [*]Charakter Audios
    [*]Charakter Events
    [*]Super geiler GUI Skin
    [*]Eigenes Font
    [*]Sprites für Status Attribute
    [*]Sprites für erstes Gegenstände
    [*]zweite Version des Terrains
    [*]Erweiterung der System Prefab (hier liegen alle wesentlichen System Dienste (Manager)
    [*]Diverse Game Objekte Items usw
    [*]uvm
    [/list]
    Tjo, Tabl, wie du siehst. Bei mir geht es ab!

    Mach heute nicht zu lang ;)

    [font=courier new,courier,monospace]Lösung Post Rätsel #5: [i]"Der Fahrstuhl"[/i][/font]
    [font=courier new,courier,monospace]Lösung Post Rätsel #6: [i]"Der Zahnarzt."[/i][/font]

    [font=courier new,courier,monospace]Post Rätsel: [i]"Wer hört alles und sagt nichts?"[/i][/font]
  9. [b][color=#ff0000]S[/color]chablagoo [/b]Ladies,

    [b][color=#ff0000]i[/color]ch [/b]habe ja mich ewig lange darüber beschwert, dass ich die einzelnen UV-Maps meiner 3D-Modelle in Blender nicht per Hand exportieren will. Ich habe ca. 600 Objekte ... *hust*

    [b][color=#ff0000]J[/color]edenfalls [/b]habe ich mal ein Script für Blender geschrieben. Damit kann man die UV-Maps automatisch exportieren lassen. Dabei werden die Bilddateien nach dem 3D-Modell benannt zu dem sie gehören. Also, das Objekt [color=#0000ff][i]WALL_A_3[/i][/color] erstellt eine [color=#0000ff][i]WALL_A_3.png[/i][/color] etc.

    [b][color=#ff0000]B[/color]löderweise [/b]ist es nicht als Thread, da ich mich in Python 0 auskenne ... vielleicht kann einer von euch das mal erweitern. Und ihr müsst beim Export noch den "File Name" löschen ... es sollte nur der Pfad existieren. Ich wette, das ist in 10 Sekunden gelöst, aber wie gesagt ... 0 Ahnung von Python und die Doku für Blender ist ja mal lame².

    [b][color=#ff0000]Z[/color]usätzlich [/b]habe ich, auch mit Hilfe von Sasha, noch ein Script geschrieben, welches ihr einsetzen könnt, um aus euren (in Unity) importierten 3D-Modelle automatisch in Prefabs umwandeln zu lassen ... ihr müsst da den Pfad etc. anpassen, da ich hardcoded und ohne Abfragen gearbeitet habe. Der Prefab-Generator sucht nach Objekten mit einem speziellen Tag (glaub CreatePrefab) ... diese werden dann generiert ... keine Ahnung, ob er bestehende überschreibt. Probiert's aus.

    [b][color=#ff0000]A[/color]lso[/b]:
    Blender -> Export All UV Maps
    Unity -> 3D-Modelle -> Generate Prefabs

    [b][color=#ff0000]D[/color]ie [/b]Blender Python Scripte müssen in den Blender scripts/addons Ordner und dann kann man unter "Export" den UV-Map export auswählen.

    [b][color=#ff0000]I[/color]n [/b]Unity muss das Script in Assets/Editor und dann bekommt ihr ein neues Menü in der Leiste.

    [b][color=#ff0000]H[/color]ave [/b]fun with this shit.
    • 1
      entry
    • 41
      comments
    • 13815
      views

    Recent Entries

    [i]Ich dachte, ich rücke mal mit ein paar Zahlen raus. Ob das so eine gute Idee ist weiß ich nicht, denn schließlich wird sowas ja eigentlich immer als Geheimsache gehandelt.[/i]


    Seit dem 15. September um 8:37 Uhr gibt es "eden" nun schon zum Kauf auf Steam - der normale Preis liegt bei 6,99€ (für einige vielleicht zu hoch, aber ich tue mich mit der Preiswahl eh immer so schwer. Zum Glück leite ich keine Firma IRL :D):
    http://store.steampowered.com/app/323620/

    Als ich "eden" veröffentlicht habe, konnte ich einen 7-tägigen Rabatt eingeben. Laut Steam selbst sei 15% ein guter Wert, woraufhin der Preis dann auf 5,94€ runterpurzelte. In den [b]ersten zwei Tagen[/b] nach Launch habe ich sage und schreibe ~[b]$600[/b] verdient! Der jetzige Stand (03.10.2014) sieht so aus:

    [quote]
    [b]Lifetime Steam Umsatz:[/b] $841 (gross revenue, beinhaltet [url="http://en.wikipedia.org/wiki/Value-added_tax"]VAT[/url]¹, DLC und Bundles)
    [b]Bislang verkaufte Einheiten:[/b] 134
    [b]Auf der Wunschliste:[/b] 617
    '- 16 Had this game on their wishlist but have since bought it.
    '- 0 Had this game on their wishlist but have since recieved it as a gift or trade.
    [/quote]
    Das macht in Euro irgendwas mit 670€ (?) - wobei das natürlich schwankt, da sich der Kurs hin und wieder verändert.

    Ich selbst bin ziemlich überwältigt davon und ganz ehrlich: Sowas spornt einen ungemein an, das eigene Produkt weiter zu verfeinern und auszubauen - und genau das werde ich auch tun. Leider gab es auch negative Stimmen von einigen Usern (wobei die positiven Stimmen ziemlich überwiegten)... Einige beschwerten sich wegen des Preises und der Qualität ansich (welche sich mit dem nächsten Update verbessern wird), andere User wiederum haben einfach noch nicht gecheckt, dass es auf Steam längst nicht mehr nur um Spiele geht sondern es seit längerer Zeit auch eine Software-Kategorie hat. Die Konsequenz, die ich daraus zog: Ich erwähnte explizit, dass "eden" kein Spiel ist, es in einer Art Early Access-Phase ist (leider gibt es den blauen Kasten für Software-Titel nicht) und stetig weiterentwickelt wird.

    Dank der guten Beziehung (Stichwort "Einkommenssteuerabkommen") Deutschlands zur USA muss ich auch keine Quellensteuer in der USA bezahlen. Denn normalerweise muss man bis zu 30% oder so abführen. Dafür musste ich meine [url="http://de.wikipedia.org/wiki/Taxpayer_Identification_Number"]TIN[/url]/[url="http://de.wikipedia.org/wiki/Steueridentifikationsnummer"]SIN[/url] eingeben. Steam sagt dazu folgendes:
    [quote]Zahlungen, die wir an Sie tätigen, können gemäß der US-Steuerbestimmungen von US-Steuereinbehaltung betroffen sein. Falls das Land Ihres festen Wohnsitzes ein Einkommenssteuerabkommen mit den USA hat, können die Raten der US-Steuereinbehaltung reduziert oder der Entwickler gegebenenfalls gänzlich davon befreit sein.[/quote]



    [color=#545454][font=arial, sans-serif][size=1]¹ Value Added Tax = Umsatzsteuer[/size][/font][/color]
    • 1
      entry
    • 1
      comment
    • 4135
      views

    Recent Entries

    Ahteris
    Latest Entry
    Der AMT4 verfügt nun neben der Ionenkanone die mit am PlasmaImplusionsgenerator hängt auch über ein einzieh Fahrwerk...[img]http://ahteris.syrka.net/spacer/amt4-2.jpg[/img]
    [img]http://ahteris.syrka.net/spacer/amt4-1.jpg[/img]
    • 1
      entry
    • 1
      comment
    • 4402
      views

    Recent Entries

    Dark Word ist ein ein MMo FPS was momentan noch auf der Variante Dedicatet ist über einen MasterServer der auf einem Linux Server gehostet wird.
    Das ganze ist schon mit der MySQL Datenbank Verbunden ohne Gültigedaten kann man sich nicht einloggen.

    Momentan kann man sich Online Anmelden für das Spiel. Aber ohne den Clienten kommt man nicht weit.

    Sicherlich sind wir noch am Anfang momentan sind wir ein 2 Personen Team Danny und ich beide sind Programmierer.
    Das Spiel selber wird in C# Programmiert.

    Unser Status :

    +Register für den Account (Eintrag in die Datenbank)
    +Login im Clienten
    +Server Starten ( Noch im Clienten aber bald nur noch Only Server)
    +Neuladen der Serverliste
    +Server Join
    +Spieler können sich gegenseitig sehen (Leider konnte ich dies nicht Filmen da Danny Offline war.)

    Video : http://darkworld.biz/Video/DerAnfang/index.html

    Bitte beachtet das es alles noch im Rohbau ist und es bei uns nach und nach weitergeht.
    • 3
      entries
    • 11
      comments
    • 7267
      views

    Recent Entries

    overdev
    Latest Entry
    Erste [b]gescheite [/b]Versuche von Texturen.
    Es wird langsam besser.

    AO Map nur den von Lowpolyobjekten gebaket, Textur drauufgeklatscht, eingefärbt und paar Rostflecken per Brush hinzugefügt.

    [img]http://s14.directupload.net/images/140220/deck9yes.png[/img]
    • 1
      entry
    • 1
      comment
    • 2410
      views

    Recent Entries

    Napelazam
    Latest Entry
    Der mittlere Teil der Map hat nun fertige Meshes.
    Texturen folgen. Simple Farben, nur eine Farbe pro Objekt. Comic-Look.

    [url="http://forum.unity-community.de/topic/6807-der-stuhl-sieht-in-unity-anders-als-in-blender-aus/page__fromsearch__1"]http://forum.unity-c...__fromsearch__1[/url]

    [quote][color=#666666][font=tahoma, helvetica, arial, sans-serif][size=3]Dann hast du den 1% erwischt wo ein Recalculate aus welchen Grund auch immer nicht klappt. Mache also das was ich bereits sagte.[/size][/font][/color]

    [color=#666666][font=tahoma, helvetica, arial, sans-serif][size=3]Aktiviere also "Backface Culling". Dann siehst du auch in Blender welche Faces nicht korrekt sind. Wähle dann die Faces aus die nicht korrekt angezeigt werden und wähle links im Menü unter "Normals: " "Flip Direction" aus. Oder drücke "W" und wähle dann aus dem Menü "Flip Normals" aus. Oder einfach "W" und dann "F" drücken, für den schnellsten Workflow. [/size][/font][/color][/quote]


    Dank [url="http://forum.unity-community.de/user/2972-sid-burn/"]Sid Burn[/url] weiß ich nun, dass ich nur die Faces von den hässlichen Meshes flippen muss.
  10. Silveryard
    Latest Entry
    Wie viele Zeilen Code man inzwischen in sein Projekt gesteckt hat, dürfte für den ein oder anderen vielleicht ganz interessant sein.
    Wer in C# und Visual Studio programmiert wird die ein oder andere Zeile Code kennen, die für ihn die mühselige Arbeit des zählens abnimmt, aber leider mangelt es da dann doch an Einstellungsmöglichkeiten.
    Und wer in JavaScript/UnityScript programmiert, der hats noch schwieriger ;)

    Deswegen hab ich mich heute 10-20min hingesetzt und folgendes Programm für euch geschrieben:

    [attachment=1658:Unbenannt.png]
    Das Layout ist denkbar einfach. Eine kleine Box, in der später Text erscheint, ein Button für die Optionen und einer zum loslegen

    [attachment=1659:Unbenannt1.png]
    Auch die Optionen sind sehr kurz gehalten. Hier kann man einstellen, welche Dateien man zählen will (.cs oder .js oder beides) und ob man Leerzeilen und reine Kommentarzeilen ausschließen will oder nicht

    [attachment=1660:Unbenannt2.png]
    Bevor es losgehen kann, müsst ihr einen Ordner auswählen. Beachtet, dass dieser UND alle Unterordner nach Dateien mit den angegebenen Endungen durchsucht werden

    [attachment=1661:Unbenannt3.png]
    Und jetzt geht es endlich ans eingemachte. Zuerst werden alle Dateien gesucht, die die angegebenen Endungen haben und dann wird gezählt. Ihr könnt euch die Zahlen sowohl für jede Datei einzeln als auch zusammengezählt anschauen

    Und hier der Download-Link: https://dl.dropboxusercontent.com/u/48347689/CodeLinesCounter.exe

    Ich hoffe, euch gefällt dieses kleine Stück Software,
    Silveryard ;)
    • 0
      entries
    • 0
      comments
    • 625
      views

    No blog entries yet

    • 1
      entry
    • 3
      comments
    • 4002
      views

    Recent Entries

    In meinem Traum, meinen Traum zu verwirklichen habe ich euch hier im Forum nun schon ein Teil meiner Geschichte gezeigt und ein Teil meiner Idee. Hiermit möchte ich das Update #1 bekannt geben für mein Spiel "Dunkle Jahre" ! Folgende EInstellungen und Fortschritte sind mittlerweile passiert:[list=1]
    [*]Hauptmenü würde hinzugefügt
    [*]Buttons verlinken zum Bereich Hilfe , zum 1 Level und der Beenden Knopf funktioniert
    [*]Als Spieler wird zurzeit noch die FirstPerson benutzt
    [*]Level1 ist in Arbeit und spielt auf dem Gefängnisgelände
    [*]Gegenstände können nun aufgesammelt werden wenn die Mission es verlangt.
    [*]Die Lebensanzeige wurde integriert.
    [*]Ein Friedhof der toten Häftlinge ist auf dem Gefängnisgelände zu finden.
    [/list]
    Zurzeit kann ich leider noch kein Video liefern daher ich der Meinung bin das es dazu noch nicht weit genug entwickelt ist, Ich werde aber etwa zu Update 8 das erste Video zeigen.
    • 1
      entry
    • 9
      comments
    • 6304
      views

    Recent Entries

    [font=Helvetica, Arial,]
    [size=4]Ein kleines Rätsel:[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Welcher Begriff ist hier gesucht?[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Sie sind groß.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind stärker als Menschen und Tiere.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind härter als Menschen und Tiere.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind gefährlicher als Tiere.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind schnell.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie können laut schreien.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind hässlich.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie fressen sehr viel.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie haben keine Gefühle.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind dumm.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wenn sie uns jagen, haben wir Todesangst, denn [/size][/font][font=Helvetica, Arial,]
    [size=4]wenn sie uns kriegen werden wir auch meistens getötet.[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Die meisten sind wahrscheinlich darauf gekommen: Es handelt sich hier um Monster.[/size][/font][font=Helvetica, Arial,]
    [size=4]Das war zu einfach, oder?[/size][/font][font=Helvetica, Arial,]
    [size=4]Okay, dann denken wir uns mal einen neuen Begriff aus[/size][/font][font=Helvetica, Arial,]
    [size=4]und fügen ein paar weitere schreckliche Eigenschaften hinzu. [/size][/font][font=Helvetica, Arial,]
    [size=4]Mal sehen wer jetzt alles drauf kommt:[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Sie sind sehr zahlreich.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind käuflich.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie scheißen ununterbrochen.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie haben keinen eigenen Willen.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie sind überall auf der Welt.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sie leben bei den Menschen.[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]... noch nicht drauf gekommen? Okay dann hier noch die letzten Details:[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Wir können uns in sie verwandeln.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wir können uns auch wieder zurückverwandeln.[/size][/font][font=Helvetica, Arial,]
    [size=4]
    [size=4]Wir dürfen ihren Bereich nicht betreten, sonst werden wir meistens von ihnen getötet.[/size][/size][size=4]
    [size=4]Wir dürfen ihren Bereich nur betreten, wenn wir uns in sie verwandelt haben.[/size][/size][size=4]
    [size=4]Wenn wir uns in sie verwandelt haben, rauben sie uns ständig Energie.[/size][/size][/font][font=Helvetica, Arial,]
    [size=4]Wir beschränken unseren Lebensraum, um ihnen Platz zu schaffen.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wir beschränken die Natur, um ihnen Platz zu schaffen.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wir bauen ihnen einen Lebensraum.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wir haben alle Städte so umgebaut, dass sie dort optimal leben können.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wir stellen Gesetze auf, um sie zu schützen.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wir haben sie gerufen. Und jetzt werden wir sie nicht mehr los.[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Zu allerletzt aber noch ein paar positive Eigenschaften,[/size][/font][font=Helvetica, Arial,]
    [size=4]dann sollte es aber bei jedem Klick machen:[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Wir gehen einen Pakt mit ihnen ein: Dafür, dass wir sie ständig mit[/size][/font][font=Helvetica, Arial,]
    [size=4]Energie versorgen, werden wir von ihnen rasend schnell transportiert.[/size][/font][font=Helvetica, Arial,]
    [size=4]Jeder möchte sich eins kaufen. Oder zwei oder drei.[/size][/font][font=Helvetica, Arial,]
    [size=4]Wer eins besitzt, steht in der Gesellschaft besser da.[/size][/font][font=Helvetica, Arial,]
    [size=4]Durch sie werden wir produktiver.[/size][/font]
    [font=Helvetica, Arial,]
    [size=4]Mein Kumpel, ein Zwerg aus Mittelerde, sagte mir:[/size][/font][font=Helvetica, Arial,]
    [size=4]"Mensch, eure Monster sind ja noch viel schlimmer als unsere.[/size][/font][font=Helvetica, Arial,]
    [size=4]Sowas kann man ja garnicht mehr als Monster bezeichnen.[/size][/font][font=Helvetica, Arial,]
    [size=4]Man müsste es Super-Monster nennen!"[/size][/font][font=Helvetica, Arial,]
    [size=4]Ich sagte ihm daraufhin: "Wir nennen es einfach PKW".[/size][/font]
    • 1
      entry
    • 1
      comment
    • 5854
      views

    Recent Entries

    nb1982
    Latest Entry
    Moin Moin,

    wir suchen eine/n 3D-Artist/Entwickler mit Kenntnissen im Bereich 3D-Design/Entwicklung und Kenntnissen in Untiy für eine Festeinstellung. Wünschenswert wären auch Kenntnisse im Umgang mit der Adobe Creative Suite.

    Wir sind ein kleines Unternehmen in Hamburg mit spannenden Projekten im Bereich Augmented Reality. Wir suchen eine junge, felexible, aufgeschlossene, wissbegierige und kreative Person, die motiviert ist, sich unserem Team anzuschliessen und uns dabei helfen will, schnell Marktführer auf diesem Gebiet zu werden.

    Bei Interesse schreibt mich einfach an.

    Nils
    • 1
      entry
    • 4
      comments
    • 4937
      views

    Recent Entries

    Hallo Community,

    Da ich auch nun mal beschlossen habe einen Entwicklerblog zu erstellen, werde ich hier regelmäßig neue Updates & Screenshots Preisgeben. Nun da ich nicht lange Reden möchte, denn wie man weiß Lange Rede kurzer sinn, oder langer sinn und kurze Rede. Aber egal.


    [center][attachment=1165:screenshot05alphav0.2.0.bmp][/center]


    v0.2.0 Update Namensänderung zu "Apocalypse" und Story geändert. zudem Screenshots hochgeladen.

    Story Apocalypse


    Wird noch nicht Veröffentlicht!

    Bald wird die Closed Beta erscheinen. Ich Bitte um Rückmeldung als PN wer mitmachen möchte.
    Danke!

    [center][attachment=1164:screenshot04alphav0.2.0.jpg][/center]
  11. Exo's Blog

    • 1
      entry
    • 2
      comments
    • 5845
      views

    Recent Entries

    Exo
    Latest Entry
    Hallo Zusammen,
    Jetzt bekomm ich von Arbeit Unity4 vorgesetzt und dann hänge ich da alles neu...

    Was mach ich wohl am besten als erstes.... um diese Engine zu begreiffen?
    Ich glaub ich schau mir mal die Refernz von Unity selber durch bevor ich mich an etwas ran wage.

    Liebe Grüße

    Exo
    • 0
      entries
    • 0
      comments
    • 753
      views

    No blog entries yet