Jump to content
Unity Insider Forum

HenriChinasky

Members
  • Content count

    18
  • Joined

  • Last visited

Community Reputation

0 Neutral

About HenriChinasky

  • Rank
    Member

Recent Profile Visitors

173 profile views
  1. HenriChinasky

    Shadowmask ohne Indirect möglich?

    TLDR: Gibt es keine Möglichkeit einfach nur die Shadowmap zu baken und auf die ganzen anderen Beleuchtungstechniken zu verzichten? Hallo Leute, ich habe eine Scene mit einem Terrain und einem relativ großen und komplexen - begehbaren - Gebäude darauf. Es gibt bisher ein Directional Light (Sonne) und 10 Point Lights im Foyer des Gebäudes. So wie es aussieht bin ich damit sehr zufrieden. Nun führen die 10 Point Lights auch im Deferred Mode natürlich zu erheblichen Performance-Einbußen, wenn sie alle Echtzeitschatten berechnen sollen. Auch stört, dass - selbst bei längerer Schattenreichweite - die direktionalen Schatten des Gebäudes in der Entfernung nicht sichtbar sind. Ich vermutete ein leicht zu lösendes Problem: Mixed Lighting für das Directional Light und Baked Lighting für die 10 Point Lights im Foyer. Lighting Mode: Shadowmask. Wie gesagt, ich bin total zufrieden damit, wie es aussieht, ich würde einfach nur gerne die bestehende Shadowmap beim Directional Light in der Entfernung und bei den Point Lights dauerhaft anzeigen lassen. So wie es aussieht jedoch, ist das Baken der Shadowmap alleine gar nicht möglich? Wenn ich mit den folgenden Einstellungen einen Bake durchführe (der locker 6 Stunden dauert), dann sieht plötzlich der gesamte Innenraum super billig aus. Schatten kann ich keine erkennen. Es sieht irgendwie aus, als gäbe es überhaupt keine Lichter. Die Schatten des einen Directional Lights hingegen (Mixed) sind jedoch super. Da ich auf das ganze GI Gedöns erst einmal gerne verzichten würde, so lautet meine Frage: Gibt es wirklich keine Möglichkeit einfach nur die Shadowmap zu baken?
  2. HenriChinasky

    Textur mit mehreren Tiles => mehrere Materials?

    Hey, ich denke, das ist die simpelste Möglichkeit für dich. Wenn du ein 3D Modell des Panels in 3DS Max o.Ä. erstellst, dann kannst du deine Textur so skinnen, dass der jeweilige Teil des Bildes über der jeweiligen Stelle des Panels sitzt. Wenn du jedoch in Unity einzelne Planes erstellst, so brauchst du für jedes Plane das etwas anderes zeigen soll ein einzelnes Material. Solange du nicht tausende Knöpfe gleichzeitig auf diese Weise anzeigst, sollte das die Performance nicht beeinträchtigen!
  3. HenriChinasky

    Inspector Winkel im Script nutzbar machen

    Wow, danke euch beiden! Einfach nur genial! Der GetRealAngle-Code ist ja aber auch mal super praktisch... Verrückt, dass in dem Unity Forum Mega Thread da keiner drauf gekommen ist.
  4. HenriChinasky

    Inspector Winkel im Script nutzbar machen

    Stimmt schon, aber ich wollte eigentlich nur eine Kamera haben die sich von links nach rechts und zurück dreht
  5. HenriChinasky

    Inspector Winkel im Script nutzbar machen

    Den Thread hab ich auch gefunden... Super verwirrend. Dachte halt, dass es vielleicht doch eine etwas einfachere Lösung geben muss... Werde mal ein bisschen weiter rumprobieren und meine Lösung auf jeden Fall hier posten. Wird schon irgendwie lösbar sein.
  6. HenriChinasky

    Inspector Winkel im Script nutzbar machen

    Hmm, wüsste nicht wie es ohne while Scheife gehen sollte? Bin grad etwas verwirrt. Was spricht denn gegen die Methode? Meinst du in der Update Funktion? Aber da kann ich ja keine Wartepunkte setzen (waitforsecond), oder irre ich mich? Und was genau meinst du denn mit clampen?
  7. HenriChinasky

    Inspector Winkel im Script nutzbar machen

    Danke für die Antworten, obwohl ich noch nicht ganz verstanden habe wie ich die System.Reflection anwenden würde. Der Tipp, den Inspector Wert als 360 - Wert selbst umzurechnen würde mich wiederum - selbst wenn es technisch geht - vor ein anderes Problem stellen. Das ist mein simpler Code: while(isRotating) { while(transform.localEulerAngles.y < maxY) { transform.localEulerAngles = new Vector3(initialEulerX, transform.localEulerAngles.y + 0.3f, initialEulerZ); yield return new WaitForSeconds(0.02f); } yield return new WaitForSeconds(3.0f); while (transform.localEulerAngles.y > minY) { transform.localEulerAngles = new Vector3(initialEulerX, transform.localEulerAngles.y - 0.3f, initialEulerZ); yield return new WaitForSeconds(0.02f); } yield return new WaitForSeconds(3.0f); } Das "while (transform.localEulerAngles.y > minY)" wäre ja dann Blödsinn, wenn ich zum Beispiel bei y = 0 starte, dann auf maxY = 60 drehe und dann zurückdrehen will auf -60, also 300. Dann ist der Wert ja schon zu Beginn des zweiten Zyklus geringer als der Endwert... Hmm...
  8. HenriChinasky

    Inspector Winkel im Script nutzbar machen

    Hallo Leute, ich stehe wieder vor einem Problem und hoffe ihr habt einen Tipp für mich. Was ich machen möchte klingt erst einmal sehr einfach. Ich möchte ein "Überwachungskamera"-Prefab erstellen, was von Level Designern in der Scene platziert werden kann. Die Kamera soll sich von und bis zu einem bestimmten Winkel drehen - das ganze pingpong artig hin und her - so wie aus zahlreichen Spielen bekannt. Ich dachte, dass die einfachste Lösung wäre, dass der Designer einen minimal und einen maximal Y-Winkel angibt, den er anhand der Werte oben rechts im Transform Inspektor ermittelt. Nun ist mir klar geworden, dass diese Werte getweakt sind um die Quaternion Werte leichter lesbar zu machen. Das führt dazu, dass transform.localEulerAngles.y wohl nicht den Wert angibt, den der Designer im Editor ablesen kann. Wie geht ihr mit dieser Schwierigkeit um? Gibt es wirklich keine Möglichkeit auf den Wert im Inspector zuzugreifen?
  9. HenriChinasky

    Daten szenenübergreifend speichern: Playerprefs?

    Super. Danke für eure Tipps!
  10. HenriChinasky

    Daten szenenübergreifend speichern: Playerprefs?

    Danke für die Antwort! Du meinst also am sinnvollsten wäre es eine statische Liste zu erstellen, in welche sich die besiegten Gegner bei ihrem Tod eintragen. Beim Laden der Scene überprüfe ich für jeden Gegner, ob er in der Liste vorhanden ist und kann so erkennen, ob er zerstört werden soll. Klingt an sich sehr vernünftig, aber was, wenn ich dann beim Speichern des Spielstands doch einmal bestimmte Veränderungen an der Spielwelt beibehalten möchte? Wäre dann wohl eines der Assets wie EasySave eine Lösung, mit denen ich eben jene Listen serialisiert speichern könnte, oder? Hätte ich eigentlich auch selbst drauf kommen können...
  11. Hallo Leute, ich bin gerade dabei ein System für unser Projekt zu entwickeln mit dem bestimmte Daten szenenübergreifend gesichert werden können. Am besten ich erkläre es anhand eines Beispiels: Der Spieler kann sich durch eine Scene bewegen in der es Gegner gibt. Der Spieler tötet einen Gegner. Im Anschluss betritt der Spieler ein Haus in der Scene, welches wiederum eine eigene Scene darstellt. Aus Speichergründen wird hierfür nicht die additive Lademethode verwendet, also die ursprüngliche Szene mit der Information, dass der Gegner getötet worden ist verschwindet. Wenn der Spieler dann wieder aus dem Haus hinaus geht, soll der Gegner jedoch natürlich weiterhin tot sein. Meine Lösung bisher war es jeden Gegner selbsttätig eine ID zuzuweisen zu lassen. Sobald der Gegner stirbt "registriert" er sich mit seiner ID in einem Script und gibt dort an getötet worden zu sein. Seine ID wird daraufhin mit dem Befehl PlayerPrefs.SetInt(ID, 1) als tot gespeichert. Sobald eine Scene geladen wird überprüft das Script ob die ID eines in der Scene vorhandenen Gegners bereits in den PlayerPrefs gespeichert und als tot registriert wurde. Funktioniert erst einmal wie geplant. Das Problem stellt sich insofern, als dass mir diese Methode sehr unübersichtlich vorkommt und im späteren Verlauf Probleme machen könnte. Zunächst muss ich jetzt schon bei jedem Spielstart die PlayerPrefs komplett löschen, da ich ja nicht sagen kann: Lösche nur alle Informationen zu toten Gegnern und behalte diese, welche sich beispielsweise auf Grafikeinstellungen beziehen. Daher lautet meine Frage: Gibt es eine einfachere Möglichkeit oder ein Asset, welches ihr empfehlen könnt, dass es mir ermöglich exakt dasselbe zu tun wie mit den PlayerPrefs, nur dass ich vielleicht mehrere solcher Dateien erstellen kann, also eine Datei nur für Dinge die bei jedem Spielstart zurückgesetzt werden und zusätzlich eine die andere Einstellungen und den Spielstand speichert? Wie löst ihr solche Datensicherungen zwischen Scenes? Ich könnte natürlich ein zwischen den Scenes persistentes Script erstellen, dass die getöteten Gegner in einer Liste speichert, aber dann wäre ich wieder Limitert, was das Beenden und Speichern des Spiels angeht. Von Seiten der Engine kann PlayerPrefs ja wohl kaum für diese Aufgabe gedacht sein, oder? Danke für Antworten und Anregungen, Daniel
  12. Okay, vielen dank für eure Hilfe. Ich habe das Asset DevTools was sowieso deprecated ist gelöscht. Darin war eine .dll mit der Änderungen an dem Editor vorgenommen worden waren. Irgendwie ist der Ordner von meinem alten in mein neues Projekt gerutscht. Ich traue mich noch nicht weitere Assets zu importieren aber da das Asset Unity 2017 sicherlich nicht unterstützt könnte ich mir sehr gut vorstellen, dass es daran gelegen hat. Vielen Dank nochmal, das Schreiben mit euch hat mich jedenfalls vorerst zur richtigen Lösung geführt!
  13. Jap, du hast wohl leider Recht... Was mich nur so verwundert ist, dass es nach dem Löschen eines Assets geklappt hatte ein Editor Script zu importieren oder nachdem ich Fraps geschlossen hatte einmal. Schon sehr seltsam der ganze Fehler. Also ich weiß wirklich nicht was ich noch machen soll... Das einzige was mir noch einfällt um das Problem einzugrenzen ist zu Posten was konkret im Editor Log zwischen den TypeLoadExceptions und dem Crash steht: Refreshing native plugins compatible for Editor in 3.64 ms, found 7 plugins. Preloading 2 native plugins for Editor in 0.28 ms. Platform assembly: C:\Unity2017\Editor\Data\Managed\Mono.Cecil.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Managed\Unity.SerializationLogic.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Managed\Unity.DataContract.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Mono\lib\mono\2.0\UnityScript.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Managed\Unity.Legacy.NRefactory.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Mono\lib\mono\2.0\System.Xml.Linq.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Managed\Unity.IvyParser.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Mono\lib\mono\2.0\Boo.Lang.dll (this message is harmless) Non platform assembly: C:\Unity2017\Editor\Data\UnityExtensions\Unity\UnityVR\Editor\UnityEditor.iOS.Extensions.Xcode.dll (this message is harmless) Non platform assembly: C:\Program Files (x86)\Microsoft Visual Studio Tools for Unity\15.0\Editor\SyntaxTree.VisualStudio.Unity.Messaging.dll (this message is harmless) Assertion failed on expression: 'm_ArrayField != SCRIPTING_NULL' (Filename: C:\buildslave\unity\build\Runtime/Mono/SerializationBackend_DirectMemoryAccess/LinearCollectionField.cpp Line: 33) Crash!!! Könnte man daraus nicht schließen, dass es sich vllt um eine .dll Datei handelt, so wie letztes mal? Dann wär die Suche ja zumindest extrem eingegrenzt. "Refreshing native plugins compatible for Editor" würde auch erklären warum nur Editor Scripts betroffen sind, weil bei denen die .dlls neu geladen werden?
  14. Danke fürs Lesen und für die Tipps. Dass es an der Festplatte oder an der Unity Installation liegt kann ich ausschließen, da bei beidem die Gegenprobe gemacht. Das mit Hintergrundprogrammen ist eine gute Idee, leider in meinem Fall nicht die Ursache. Ich nutze sehr viele unterschiedliche Script Assets und vermute, dass irgendeines davon der Übeltäter ist. Hat irgendwer eine Ahnung ob man mit dem Editor Log etwas anfangen kann? Da heißt es in etwa: Reloading assemblies after script compilation. Begin MonoManager ReloadAssembly Platform assembly: C:\Unity2017\Editor\Data\Managed\UnityEngine.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Managed\UnityEditor.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Managed\Unity.Locator.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Mono\lib\mono\2.0\I18N.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Mono\lib\mono\2.0\I18N.West.dll (this message is harmless) //usw... Dann zufälligerweise (?) das Asset was ich gerade neu hinzugefügt habe Non platform assembly: D:\PFAD\Assets\Cinema Suite\Cinema Director\System\Editor\DirectorControl\DirectorEditor.dll (this message is harmless) Loading D:\PFAD\Assets\Cinema Suite\Cinema Director\System\Editor\DirectorControl\DirectorEditor.dll into Unity Child Domain Platform assembly: C:\Unity2017\Editor\Data\Mono\lib\mono\2.0\System.Core.dll (this message is harmless) Platform assembly: C:\Unity2017\Editor\Data\Managed\ExCSS.Unity.dll (this message is harmless) //und direkt danach TypeLoadException: Could not load type 'AC.Action' from assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. (Filename: Line: -1) TypeLoadException: Could not load type 'AC.Action' from assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. (Filename: Line: -1) TypeLoadException: Could not load type 'AC.Action' from assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. (Filename: Line: -1) //darauf folgen mindestens hunderte TypeLoadExceptions von allen möglichen Scripts (Auch aus dem UnityEngine Namespace) und schließlich: TypeLoadException: Could not load type 'vEnumFlagAttribute' from assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. (Filename: Line: -1) Assertion failed on expression: 'm_ArrayField != SCRIPTING_NULL' (Filename: C:\buildslave\unity\build\Runtime/Mono/SerializationBackend_DirectMemoryAccess/LinearCollectionField.cpp Line: 33) Crash!!! Kann jemand daraus irgendetwas ableiten? Liege ich eurer Ansicht nach richtig in der Annahme, dass der Fehler der den Crash verursacht als: Assertion failed on expression: 'm_ArrayField != SCRIPTING_NULL' (Filename: C:\buildslave\unity\build\Runtime/Mono/SerializationBackend_DirectMemoryAccess/LinearCollectionField.cpp Line: 33) beschrieben wird?
  15. Hallo Leute, ich weiß wirklich nicht mehr weiter. Ich hatte bereits vor einiger Zeit genau dasselbe Problem mit einer älteren Unity Version: https://forum.unity.com/threads/unity-editor-crashes-when-compiling-certain-imported-scripts-need-help-desperately.468946/ Das Problem lag darin, dass der Unity Editor immer gecrasht ist, wenn ich versucht habe irgendein Script aus einem Editor Folder in mein Projekt zu importieren. Wenn ich das Script dann nicht vor dem nächsten Start wieder gelöscht habe, öffnete sich Unity überhaupt nicht mehr und ich musste die komplette Library neu erstellen lassen. Nach ewigem rumprobieren hatte ich damals eine .dll Datei im Projekt gefunden die versehentlich doppelt drin gewesen ist, diese gelöscht und das Problem verschwand. Nun ist es in der aktuellen Unity Version zurückgekehrt und seltsamer denn je! Erst einmal dachte ich, es würde sich um exakt dieselbe Problematik handeln, aber ich fand keine doppelte .dll. Ich habe wirklich tagelang nichts getan außer rumzutesten, war schon völlig verzweifelt und habe schließlich angefangen Assets zu löschen, die ich nicht akut gebraucht habe und im Anschluss immer versucht ein Editor Script zu importieren. Schließlich habe ich ein Asset gelöscht, was es mir tatsächlich ermöglicht hat das Script zu importieren. Seltsamerweise trat der Crash beim nächsten Script aber erneut auf! Ich habe wieder ein Asset gelöscht und siehe da: Ich konnte erneut ein weiteres Editor Script hinzufügen. Danach hat auch das wahllose löschen von Assets zu keinem Erfolg mehr geführt. Noch verzweifelter als zuvor ist mir im Crash-Log aufgefallen, dass Fraps mit einer .dll vertreten gewesen ist. Ich dachte in meiner Verzweiflung, dass vielleicht hier irgendeine Inkompatibilität besteht die mir nie in den Sinn gekommen wäre, habe Fraps geschlossen und unglaublicherweise wurde das Script ordnungsgemäß und ohne Crash importiert. Ich glaubte endlich das Problem identifiziert zu haben und dummerweise war ich so übermütig, dass ich sofort eines der vorher gelöschten Assets wieder eingefügt habe - was zu einem Crash geführt hat. Ich weiß nicht was ich tun soll. Mir ist klar, dass die beste Lösung wäre ein neues Projekt zu erstellen und alle Assets und Scripts nach und nach zu importieren um das Problem auszumachen, aber aufgrund der Komplexität des Projekts und der vielen Querverweise innerhalb der Scripts würde das unglaublich viel Zeit und kleinteilige Arbeit in Anspruch nehmen, ohne Garantie, dass am Ende dann nicht wieder alles crasht. Deshalb meine Frage: Hat irgendwer schon etwas ähnliches erlebt? Gibt es irgendeine Funktion oder auch ein Asset was es mir ermöglicht nachzuvollziehen wodurch der Crash zustande kommt? Ich weiß, dass es schwer ist darauf eine hilfreiche Antwort zu geben, aber mir bleibt kaum etwas anderes übrig als darauf zu hoffen, dass jemand eine ähnliche Erfahrung gemacht hat. Jeder Tipp könnte hilfreich sein! Der Fehler im Log lautet nichtssagend: mono.dll caused an Access Violation (0xc0000005) in module mono.dll at 0033:ae68e36c.
×