Jump to content
Unity Insider Forum

MaZy

Members
  • Content Count

    583
  • Joined

  • Last visited

  • Days Won

    22

MaZy last won the day on December 8 2019

MaZy had the most liked content!

Community Reputation

171 Excellent

About MaZy

  • Rank
    Advanced Member
  • Birthday 02/20/1988

Profile Information

  • Gender
    Male
  • Location
    Hannover

Recent Profile Visitors

11,940 profile views
  1. Ich glaube auch deine Aufnahmeprogramm macht auch nicht wirklich mit: Anscheinend benutzt du Renderpipline HD und die Shader machen Probleme. Weiß nicht, ob es vllt mit der version 2019.1 was zu tun haben könnte. Sagst ja, dass es beim Teamkollegen auch passiert. Würde mal die Lightnings baken. Im Bild ist ein Hacken bei Decals drin. Vllt mal rausnehmen und damit mal probieren. Ansonsten anderen Materialshader mal ausprobieren. Als letztes kann ich nur sagen Unity mal updaten. EDIT: Transparent script könnte höchstwahrscheinlich dies verursachen.
  2. Resource.Load kann nur Unity bekannte Types laden. .obj oder .fbx bzw models allgemein sind das nicht. Daher mache zu erst daraus ein Prefab und danach kannst du es Laden. EDIT: Muss mich korrigieren. Hab da mist gelabert, weil ich dich falsch verstanden habe. Ein Obj kannst mit Resources laden, wenn du ein Resources Ordner und da rein packst. Danach kannst du so laden GameObject 3dmodelResource = Resource.Load<GameObject>("3dmodel); Instantiate(3dmodelResource); Du muss also angeben, was du lädts, gameobject, mesh, texture usw. Den Pfad gibst du ohne "Resources" an. Also wenn es im Resources/mymodels/avatar.obj ist dann einfach mymodels/avatar eingeben. Ich empfehle das dir aber NICHT! Weil man da auf Speicherprobleme kommen kann. Also mehr Ramspeicher wird benutzt. Es ist besser wenn du aus deinen 3d models einen Prefab machst und dann in deinem Script eine List bzw Array zu machen, und da kannst du all deine Prefabs reinpacken und von da aus laden. Instantiate(mymodels[0]); Das hast du dann nämlich auch im Laufzeit erstellt
  3. Bill Gates sagte eins: "I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it.". Ich lebe tatsächlich nach dieser Prinzip. Ich versuche immer alles schneller und leichter zu machen. Und darum hier mal ein kleiner Code von mir, welches ihr wahrscheinlich auch ab und zu brauchen könntet. Hier ist ein Script welches OverlapCircle etwas erweitert. Öfters habe ich das Problem gehabt, dass ich OverlapCircle einsetze, aber dann nochmal durch loopen muss um zu schauen, ob ich die richtigen Collider2D überhaupt gefunden habe. Aber warum das nicht so bauen, dass ich direkt die Richtigen bekomme? https://gist.github.com/MaZyGer/b4c45395bd6a5d06722a0eecf71c850e Beispiel wenn du eine Granate wirfst und beim Aufprall noch Monster suchen willst, die aber auch noch am Leben sind (um denen Schaden hinzuzufügen): List<Monster> monsters = new List<Monster>(); int count = OverlapCircle<Monster>(Vector2.zero, 10f, new ContactFilter2D() { }, monsters, m => !m.IsDead ); // Andere Möglichkeiten int count = OverlapCircle<Monster>(Vector2.zero, 10f, new ContactFilter2D() { }, monsters); int count = OverlapCircle<Monster>(Vector2.zero, 10f, new ContactFilter2D() { }, monsters, c => c.GetComponentInChildren<Monster>()); int count = OverlapCircle<Monster>(Vector2.zero, 10f, new ContactFilter2D() { }, monsters, c => c.GetComponentInChildren<Monster>(), m => !m.IsDead); Der Code im Link wird vllt in der Zukunft erweitert. Je nachdem was ich brauche werde ich hinzufügen.
  4. Benutzt du irgend ein Algorithmus? Zum Beispiel AStar oder Djkstar? Ansonsten ist es schwer dir zu helfen, wenn du eigenen kreieren möchtest. Ich kann z.B. nicht nachvollziehen was du da machst bei DistanceBteweenTwo. Das hört sich wie die Berechnung von AStar an, aber inhaltlich sieht das für mich komisch an.
  5. Du solltest dich wirklich mit Programmierung beschäftigen. Das sind kleine Rechtschreibfehler die man sogar mit bloßen Augen sehen kann. Das muss man schon drauf haben meiner Meinung nach. Ansonsten kommst du bei jede Kleinigkeit und das gar nicht gut. Ich meine da steht z.B. 1f statt if und das ist sogar was universelles.
  6. Wahrscheinlich Mono selbst ist nichts anders um die Möglichkeit zu geben Plattform unabhängig zu programmieren, das mit C#. Ein Beispiel, ich habe ein Server programmiert, welches mit C# geschrieben wurde und welches sogar einen .exe beinhaltet. Das Programm läuft sowohl in Linux aber auch im Windows. Mittlerweile kann man sogar die Datei direkt starten. Früher musste ich noch mono zusätzlich ausführen. Früher war mono nicht für Systeme gedacht. Eigentlich nur windows. Kurz: Mono hilft die diese Programme die programmiert wurde auszuführen, zu compilen (ja auch in Linux kann man sie compilen und ausführen). Net Standard definiert, welche Libraries in der Programmierung benutzt werden können. Beispiel Netstandard 2 die framework 4.6.1 und die netstanard 1 wäre framework 4.5. Da sind auch aber andere Pakete dabei. Nicht nur Framework. Z.B. Core. Net Framework waren nicht beabsichtigt auf anderen Projekten zu funktionieren. Durch Xamarin und Mono wurde was neues erschaffen, wo man dann für anderen Plattformen erweitern konnte. Net Core benutzt KEIN mono. Wurde bewusst so vom Libraries aufgebaut, dass man auch für andere Plattformen verwenden kann. Ich habe jetzt nicht selbst benutzt, aber ich vermute mal, dass da sowas gibt wie if application is linux then usw. So wie ich auch verstanden habe hat Core auch keine libraries für Interfaces. Sprich kein Fenster wo man navigieren kann (Windows forms, WPF usw). Es ist der originale Mono zu mindest in der API Bereich. Zu modifizieren und zu ändern wäre nicht gut, dann müssten wir auch die Libraries dafür runterladen. Z.B. müsste ich irgendwas zusätzlich auf meinem Linux installieren, damit auch Unitys Version funktionieren soll. Aber der Standard Mono läuft. Unity ist ein Editor. Unity benutzt mono vom Microsoft. Natürlich! Man kann derzeit zwischen net 2.0 standard under net 4.x auswählen. Das sind eigentlich keine Versionen sondern Paketzustellungen. Früher konnte man auch Net 3.5 auswählen. Wichtig ist hier zu unterscheiden, dass wenn dahinter standard steht, dass es nicht das gleiche ist wie, ohne Standard. Standard heißt, dass da bis zu bestimmte libraries, versionen usw enthalten sind. beispiel Framework, Core, Mono usw. Die Schreibweise ist um das zu erkennen ist: Net 4.x bedeutet, dass höchst mögliche soll erlaubt werden beim Programmieren. z.B. .Net Framework 4.7.2 usw. Unity Editor natürlich muss das unterstützen. Sonst geht es nicht. Siehe oben Unity hat ist noch nicht bei der Framework Version. Deswegen geht es noch nicht. Ich glaube standard 2.1 wird das nicht werden. Wird eher immer noch net 4.x sein, da wie ich oben schrieb standard auch viele Sachen hat die wir aber nicht in Unity brauchen. Net 4.x sollte nur die Framework Version sein.
  7. Gibt es mehrere Möglichkeiten in deiner Situation. Du kannst wenn du etwas spawnen willst und die Position VORHER hast, kannst du deine Asteroiden durch loopen und abfragen. Kannst Abfragen, Asteroid A Größe und Position kombiniert abfragen, ob Asteroid B der gespawned der Punkt innerhalb Asteroid A ist. (Halt selber rechnen) Oder kannst Unity Physic benutzen was ich empfehle und Physics2D.OverlapCircle(newSpawnedAsteroid, radius, filter, colliders). Da kannst du überprüfen, ob da genau etwas steht. Man bekommt ne Zahl zurück.
  8. Ja das mit new() constraints kenn ich schon. Ich hab das bewusst so gemacht, weil wie ich oben geschrieben habe immer etwas davor getan werden muss bevor man neuen Object erstellt bzw. auch manchmal haben sie ein oder mehrere Parameter. z.B. EngineA.Settings.bla = 1 usw. Und dann new EngineA(). Die 3rd party libraries sind halt verschieden aufgebaut.
  9. Unity meckert aber ab bestimmte Zahlen ich glaube ab 50.000. Tatsächlich hab ich mal gehört, dass Eve Online so ähnlich arbeiten soll. Allerdings sind die "Levels" auf der selben Position nur die werden für bestimmte Spieler nicht angezeigt, weil sie dort sich nicht bewegen. Wie das Server technisch gemacht wurde kein Plan.
  10. Ich hab mittlerweile so gemacht, dass engine variable nicht mehr public ist. Hab so angepasst, dass man alles per Funktion machen muss, die man von der Abstrakten Klasse bekommt. Ich hatte hier ein Formulierungsfehler. Am Ende des Satzes fehlt ein "nicht" ^^. Hoffe war trotzdem verständlich. Aber deine Idee kann tatsächlich klappen. An diese Reihenfolge hab ich nicht gedacht. So hab es probiert. Also das klappt wunderbar. Muss jetzt nicht mehr engine variable jedes mal definieren. Also mein beispiel sieht so aus (der Code ist provisorisch geändert) public abstract class ClassAbstract<T> : ClassAbstract { protected T engine; } public abstract class ClassAbstract { public abstract void Do(string do); ... } public class EngineAHelper : ClassAbstract<EngineA> { public EngineAHelper() { engine = new EngineA(); } public override void Do(string do) { engine.Do(do); } ... }
  11. Also es ist schwierig zu erklären was ich vorhabe. Ich habe eine abstrakte Klasse ClassAbstract. Zwei weitere die sie erben ClassA und ClassB. ClassAbstract hat ein public abstract object engine { get; protected set; } variable, denn darauf möchte ich später bei ClassA ClassB zugreifen. Nun die Klasse ClassA und ClassB haben verschiedene Types für den engine variable. Sagen wir mal EngineA und EngineB. Die beiden Engines haben verschiedene funktionen und variablen. Beispiel kann der EngineA SetVar(var) machen während EngineB var[var] machen kann. Deswegen geht die einfache Benutzung von engine.SetVar oder engine.var[var] nicht. Nun war die Idee ich mache generic types. Also ClassAbstract<T>. Damit könnte ich das lösen aber jetzt kommt ein anderes Problem. Denn ich hab ein Manager, der eigentlich alle ClassAbstract als parameter angenommen hat. Nun das klappt bei ClassAbstract<T> nicht. So sieht der Constructor aus. public Manager(ClassAbstract a, params ClassAbstract[] a) Jetzt weiß ich nicht weiter, denn mich nervt es jede Klasse selber "engine" variable zu erstellen, weil man manchmal das vergisst. Alternativ kann ich GetEngine<T> machen und das casten lassen, aber finde ich doof. Ich kann auch den engine nicht private machen (um dann GetEngine zu benutzen), weil ich beim Constructor bei base() nochj nicht neue instance geben kann weil vorher im constructor erst paar Sachen geändert werden muss (bin davon abhängig, da es nicht von mir ist). Beispiel EngineA.GlobalSettings.tick = 1; new EngineA(); Sonst hab ich keine Idee mehr.
  12. Wenn du lernen willst bitte nicht in Unity . OOP wird sehr oft benutzt und daher zu empfehlen reine C# mit Console Projekte zu benutzen. Aber C# selbst kann man in Unity lernen.
  13. Nein, es ein Management System ist. Sie haben da einige Sachen eingebaut, die man für Menüs braucht. Man muss dabei fast gar nicht programmieren. Schaue dir dazu deren Videos an. Die haben fast für alle Bereiche ein Video. Seit heute haben die sogar ein Theme Manager drinne. Also zwischen Farbenthemen wechseln usw. Hab aber noch nicht getestet. Die Frage musst du mal wohl selbst stellen, warum du überhaupt nach etwas suchst? Was ist dabei dir wichtig? Mir war wichtig, dass ich eine Art Navigationssystem habe. Also dieses zwischen den Menüs hin und her springe, und das System weiß von wo ich hergekommen bin und wie ich zurück komme. Auch ebenfalls, dass ich Soundmanager habe um besser Sounds auszutauschen oder besser einzustellen und DoozyUI hat da die beiden Sachen. Falls du ein Ersatz willst wie z. B. den UIBuilder dann ist natürlich DoozyUI falsch. EDIT: Z.B. zu Thememanager. Sowas hab ich gebraucht. Am Halloween wollte ich z.B. das menü bissel danach gestalten. Und nach Halloween wieder normal darstellen. Hab mal angeschaut und deren Thememanager ist wirklich gut. Genau was ich gebraucht hab.
  14. Was Namensfindung angeht kann ich euch Tipps geben. Dies bezieht aber auf Spiele, die tatsächlich Erfolg haben sollen z.B. durch Steam. Man muss sich die Fragen erst mal stellen. 1. Hat das Spiel was einzigartiges? Wenn ja, dann auf keinen Fall so leichte Namen nehmen, wo man bei der Suche zisch andere Spiele findet oder ihr nimmt explizit den Namen, was das Besondere hervorhebt. Beispiele: Titanfall - Weil titane aus dem Himmel fallen Dota (Defense of the Ancients) - Weil man die Ancients verteidigen muss.. ist es zerstört, verliert das Team. Payday - Weil es darum geht, dass man im Spiel immer mehr Geld anhäuft. Portal - Weil man fast nur Portale benutzen muss um voranzukommen (hier also auch das Gameplay). Squad - Weil das Spiel hauptsächlich ohen Kommunkation nicht geht. Squadsmitglieder und Leaeder müssen untereinander kommunizieren sonst ist es verloren (wie in Reallife halt^^). Space Engineers 2. Irgendein "dummen" oder "lustigen" Namen Es gibt Spiele (oder auch Filme usw), die bewusst etwas Dummes oder Lustiges als Name nehmen, weil sowas wie Ohrwurm ist und auf den Ohren bleibt. Beispiel: Garry's Mod (weil der Entwickler Garry ist und die Firma heißt Facepunch). Pavlov VR Mehr fallen mir da gerade nicht ein. Aber bei Apps gibt es jede Menge sowas. 3. Einen einzigartigen Namen geben, aber nichts zum Content aussagt oder sehr sehr gering etwas aussagt. Sowas ist finde ich immer wieder toll, wenn es Namen erfunden werden, die gar nicht existieren. Und das macht das Spiel dann sehr besonders. Jeder von uns kennt z.B. Half-Life. Beispiele: Half-Life Rust Counter-Strike Stellaris (Das Wort aber bezieht sich aber auf Stellar und ist ne Mischung aus Latein) - Ist ein Weltraumspiel Just Cause Gothic Fortnite - Wobei hier der Name von Fortnight kommt und um Four Nights (also 14 Tage und Nächte) geht. Max Payne - Kann man auch zu Punkt 1 zuordnen, aber da geht es echt um diesen Charakter selbst und seine Story. Über Content wird hier nichts gesagt. Die Besonderheiten des Spiels ist ja nicht Max Payne selbst sondern die schönen Bullettimes. ANNO XXX - Die ganzen Anno reihen ^^. 4. Namen die einfach gefunden werden sollen. Manchmal nimmt auch Namen bewusst, dass man bei der Suche finden soll. Sowas empfehle ich nicht, weil man da schon sehr oft Namensverletzung hat. Ein Beispiel von mir. The revenge of the Space Invaders. - Geschützter Name Space Invaders. Auch wenn im Spiel um Invader und Space geht, darf man es nicht so verwenden. Was aber geht ist: Invaders from Space: The Revenge. Dot Color Switch - Color Switch geschützt. Dot switch color oder Switch dot color würde gehen. Oder ganz anderen Namen wie Dot color swap. Persönliche Meinung. Ich mag es gar nicht, wenn der Titel eines Spiels so bestimmt wird, was auch Gameplay / Content aussagt. Beispiel: Back to earth: Ist nicht interessant genug. Warum? Ich weiß ok sie waren von der Erde weg und wollen zur Erde zurück. Das war es auch. Anders wäre es aber mit einen interessanten Namen davor (einfach so mal spontan, auch wenn es sich kacke anhört). Hitstrikes: Back to earth - Hier würde man sich fragen, was sind Hitstrikes. Wieso wird das so genannt. Gibt es noch andere Spielreihen davon?. Ein Schluss Wort Garry Newman sagte: Was wenn "Mario" das Spiel einfach nur "Coin Grab" hieße. Niemand würde an das Spiel sich später erinnern.
  15. DoozyUI ist ein UI Management System mit unter anderem Nodes und NGUI ein UI Layout System. Du kannst in DoozyUI leichter und übersichtlicher Menüs miteinander verbinden. Es hat viele Sachen was man so braucht, aber vieles (für mich persönlich) fehlt da noch weiteres, aber die haben auch noch vieles vor laut ihrem Trello. Beispiel hab ich von meinem alten Projekt 2013 was alles noch auf GUI (GUILayout usw.) basierte neulich alles auf DoozyUI umgestellt. Musste also wenig programmieren: Muss zu geben, dass ich eigentlich eigenen UISystem gemacht habe, aber ich hatte für weiteres keine Lust mehr selbst zu machen. Da hab ich sogar die wichtigsten Dinge beachtet, was ich bei DoozyUI z.B. nicht hab. Diese Animation oben kann man mit einem GameObject nicht machen. Man braucht noch ein Parent der auch animiert werden muss. Aber das wird wohl noch bei DoozyUI kommen, denn da stand sie wollen möglich machen, dass mehrere Animation gehen soll und nicht nur einer. Was man so alles machen kann z.B.: Menüs (UIView nenne sie das) animieren (und dabei alles). Bezüglich Animation kann man einstellen, was vorher, nachher passieren soll. Nody - Menüs, Music und all die Abläufe werden mit Knotensystem eingestellt. Man verbindet sie zusammen und somit weiß man wohin man kann und wo man zurück kann. Soundmanager - Spielt da wo du brauchst music / sounds ab. Profile, für jede Animation, Sounds oder sonstiges gibt es ein Profil Sounds werden mit AudioMixer verknüpft. Wenn du z.B. UI Click sounds hast, dann hast du eventuell in AudioMixer auch UI drin. Somit werden diese Sounds je nach deinen AudioMixer Einstellungen übernommen. Und noch so einiges mehr (z.B.: Progression) Ich arbeite damit seit 2-3 Wochen und mir gefällt das soweit. Allerdings wie gesagt fehlen mir da ein paar Dinge. Beispiel haben sie da "Portale" gemacht. Bei Knotenpunkt kann ja leider passieren das man zu einem Punkt nicht kommen kann. Daher kann man da ein "Portal" machen womit man sofort dahin springt. Problem.. Drückt man z.b. Auf Options Button, springt mann immer in den Option rein, auch wenn man schon drinne ist. Also fehlt da so ne Frage wie "Ist man bereits in dem Node drin.. dann nicht weiter gehen) oder sowas. Bald kommen auch noch Themes. Damit kann man mehrere Profile erstellen und später die Farbe mit einem Klick anpassen. Hoffe auch Textures oder so werden unterstützt. Zu NGUI - würde vom kauf abraten. Warum? Unity UI ist fast so ähnlich. Ich meine der NGUI Entwickler hat sogar für Unity später gearbeitet. Bin mir aber nicht 100%ig sicher. Man sieht ja auch an den Bewertungen. Neben DoozyUI kann ich auch das hier empfehlen. https://assetstore.unity.com/packages/tools/visual-scripting/ui-graph-a-menu-system-for-unity-151846 Da sind sogar multiple animations vorhanden (was DoozyUI noch nicht hat).
×
×
  • Create New...