Jump to content
Unity Insider Forum

Hellhound

Members
  • Posts

    95
  • Joined

  • Last visited

  • Days Won

    3

Hellhound last won the day on February 15

Hellhound had the most liked content!

Recent Profile Visitors

1,799 profile views

Hellhound's Achievements

Advanced Member

Advanced Member (3/3)

8

Reputation

  1. Ok, gelöst. Das habe ich richtig verstanden, in NGO können NetworkVariablen nur angepasst werden, wenn der Spawn erfolgt ist. Aber über das OnValueChangeEvent kann man auch Client-Seitig nach dem Spawn auf die Anpassung des Wertes reagieren, so dass ich dieses Event als Trigger für die Visuals nutzen kann. Etwas umständlich und zunächst nicht ersichtlich, aber machbar... Viele Grüße Hellhound
  2. Guten Morgen, gibt es eine Möglichkeit in NGO Variablen Server seitig zu setzen, so dass ich im OnNetworkSpawn im Client bereits Zugriff auf diese habe? Wenn ich das aktuell richtig blicke ist das bei NetworkVariablen ausgeschlossen, da diese erst nach dem Spawn initialisiert werden. Hab ich irgendwas übersehen? Würde auch "normale" Variablen verwenden. Aber auch das hat bisher nicht geklappt. Finde es etwas komisch erst zu Spawnen und danach nochmals entweder per RPC Werte nach zu schicken, bzw. bei NetzwekVariablen auf eine Init-Methode zurück zu greifen... Würde gern im OnNetworkSpawn die Visuals für den Client generieren, habe aber keinen Zugriff auf die dafür erforderlichen GUIDs die ich eigentlich per NetzwerkVariable halte ... Viele Grüße Hellhound
  3. Guten Morgen zusammen, ich baue aktuell mein erstes RTS/RPG und kämpfe z.Z. etwas mit dem Design. Wie würdet Ihr (falls Ihr kein RTS habt) damit umgehen, dass auf Seite des Clients registriert wird, was serverseitig gespawned wurde, um z.B. mit diesen Instanzen zusätzliche Funktionen auszuführen (z.B. an GUI Komponenten registrieren, Events triggern usw.). Die Instanziierung liegt ja nicht auf Client-Seite, da hab ich nur das OnNetworkSpawn, kenne aber keine Referenzen. Setzt Ihr hier verstärkt auf die pösen Singletons? Oder ScriptableEvents? Vieles wird ja im RTS erst zur Laufzeit erzeugt und gespawned, dann auch teilweise nur beim Client der dies per RPC angefordert hat (Erst wenn es sichtbar ist gelangt es zum den jeweiligen anderen Clients). Aber auch im ClientRPC habe ich keinen Zugriff auf das Objekt das gespawned wurde. Könnte vieles auch über NetworkVariablen steuern aber ist das nicht im RTS etwas viel? Bin schon mal gespannt auf Eure Vorschläge ... Viele Grüße Hellhound
  4. Hi @Sascha, ich hab es wie versprochen getestet... Wenn ich das ganze "nach hinten" verschiebe, scheint der Fehler nicht mehr zu fliegen. Allerdings bleibt bei der Zuweisung von entry.objectReferenceValue der Wert null, obwohl das zugewisene Objekt beim Debuggen einen Adressraum hat und mit allen Werten sichtbar ist.
  5. Also Import habe ich schon mal raus genommen, der war überflüssig und es geht auch ohne diesen in beiden Editor Versionen. Problem ist, dass ohne diese Zeilen, das ScriptableObject das ich hinzufüge nur im Speicher vorliegt und nicht serialisiert ist. Die Referenz würde verloren gehen. Erst durch diese Schritte wird es serialisiert und dann ist es auch nutzbar. Bisher klappte das ja einwandfrei, mag sein, dass sie das gehärtet haben. Ich probiere nachher mal Deinen Vorschlag aus. Danke erstmal für den Tipp.
  6. Hallo zusammen, ich bin heute in einer alten Code-Stelle in ein Nullpointer-Exception gelaufen, dass scheinbar erst mit der Unity-Editor Version 2022 (13/14 getestet) existiert. Mit diesem alten Code erzeuge ich in meinem Custom-Editor zur Editor-Laufzeit ein Scriptable-Object (Attribute) und füge dieses einem anderen Scriptable-Object (Entity) als Subelement über die AssetDatabase hinzu. So kann ich dieses als Referenz nutzen, da das Objekt nicht mehr "nur" im Speicher existiert: // create a new ScriptableObject instance and add it to end of list var newAttribute = ScriptableObject.CreateInstance(nameID) as Attribute; newAttribute.hideFlags = HideFlags.HideInHierarchy; /* store the new instance of the ScriptableObject to Unity AssetDatabase. This special kind of storage is required otherwise all settings will be lost, because this object only exist in memory yet. Storing it to AssetDatabase persist the object under given entity as subobject. */ AssetDatabase.AddObjectToAsset(newAttribute, this.entity); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(newAttribute)); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); // save attibute to serialized array var size = this.attributes.arraySize; this.attributes.InsertArrayElementAtIndex(size); var entry = this.attributes.GetArrayElementAtIndex(size); entry.objectReferenceValue = newAttribute; entry.serializedObject.ApplyModifiedProperties(); attributes.serializedObject.ApplyModifiedProperties(); Das ganze läuft bestimmt schon 2,3 Jahre so, fehlerfrei. Ich habe das Ganze mal mit dem Unity-Editor 2021.3.33f1 getestet, da tritt der Fehler nicht auf. Anschließend das Projekt auf 2022.3.13f1 umgestellt, dann laufe ich mit: entry.objectReferenceValue = newAttribute; In das besagte Nullpointer-Exception. Dummerweise habe ich im ersten Quartal auf 2022 umgestellt, aber seit dem aufgrund anderer Baustellen kein ScriptableObjekt mehr über diesem Weg erzeugt und somit den Fehler nicht bemerkt. Das ScriptableObjekt wird übrigens mit AddObjectToAsset korrekt dem anderen ScriptableObjekt hinzugefügt und ist in der Hierarchie des Asset sichtbar und auswählbar: Somit existent. Wisst Ihr, ob Unity irgend etwas in diesem Zusammenhang verändert hat und was mir nicht bekannt ist? Oder könnte es sich damit um einen weiteren 2022er Bug handeln?
  7. Ok, scheint ein Bug zu sein: https://forum.unity.com/threads/new-input-system-mouse-double-click.1000707 . Der sollte eigentlich im 1.1.0-preview.2 Package behoben sein, scheint es aber nicht. Hier mein aktuelles Set-Up: Zudem habe ich festgestellt das die PlayerInput Komponente ebenfalls nicht funktioniert und Click-Events sogar 3x triggert, vermutlich einmal pro Button state (down, press, up) und dabei mögliche definierte Interactions übersieht. Habe bereits einen offiziellen Bug-Report erstellt.
  8. Hallo zusammen, hat hier jemand Erfahrung mit dem neuen Unity Input System? Ich versuche gerade mein Projekt auf das neue System umzustellen, bekomme jedoch die Mouse-Events für mein Click & Move nicht umgesetzt. Ich habe ein Action für Move definiert und hier auch ein Maus Button Binding gesetzt und an dieses Action via Script eine Callback Methode gebunden. Der Aufruf funktioniert er wird jedoch 2x ausgeführt. Einmal vermutlich für das alte Mouse Down und Up. Wie bekomme ich es konfiguriert das das Event nur einmal ausgeführt wird? Gleiches Problem habe ich auch bei einem Doppelklick. Auch eine Tab und oder Multitap Definition bringt keinen Erfolg. Gibt es auch eine Möglichkeit ein Action so zu splitten das es nur auf Tab oder Multitab reagiert? Z.B. für Move und Run? Ich kann in der Callback auf das Input System zugreifen und hier z.B. auf loslassen des Mousebutton prüfen. Das macht aber die Entkopplung die ich über das System erreichen will hinfällig ... Bin dankbar für jeden Tipp. Viele Grüße Hellhound
  9. Hallo zusammen, ich arbeite mich aktuell etwas in die Thematik der Behaviour Trees ein um eine AI umzusetzen. Dabei stellt sich mir die generelle Frage in welche Richtung ich das Design sinnvoller weise zu legen habe. Ich kann ja einerseits die Logik zum Großteil auf den Tree legen oder aber diesen mehr als übergeordnete Struktur nutzen und die Kernlogik in Eigenimplementationen legen. Ein einfaches Beispiel, was mir grad sozusagen vor die Füsse gefallen ist: Ich möchte, das die AI (und auch die Spielereinheit selbst) eine Einheit angreift, wenn diese in Reichweite gelangt ist und bestimmte Konditionen erfüllt sind. Dafür brauche ich spezifische Animationen (Zielen, Feuern, Laden, Mündungsfeuer) und auch Werte für die Gewichtung. Ich könnte nun die Logik durch spezifische Action-Tasks im Baum Abbilden: z.b. Wenn Ammo > 0. -> Sequenz -> Zielen -> Animation Schuss abspielen -> Animation Mündungsfeuer abspielen -> Ammo dekrement und von vorn bzw. Erweitern. Ich könnte auch einen komplexeren Action-Task, z.b. Schuss schreiben der die Punkte nach Zielen mit abdeckt und über Variablen im Blackboard referenziert. Das macht zumindest den Baum in identischen Abläufen schlanker. Grad bei Elementen mit einer hohen Varianz in der Ablauffolge sehe ich aber das Problem, dass ich mich hier tot modellieren kann, da ich je nach Waffe unterschiedliche Animationen, Sounds, MuzzleFlashes und auch Verhaltensweien haben kann (Bsp. M1 Grand das beim Wert Ammo == 0 immer den berühmten Pling Sound abspielen muss). Oder sollte ich hier den Behavour-Tree nur als Ankerpunkt nehmen, über Events in spezifische Implementationen wechseln, die anschließend über Events wieder Einfluss auf den Baum ausüben? Der Baum kann an sich ja schon recht komplex werden, wenn die AI mehrere Entscheidungen abwegen soll und nicht nur einfache Ablauffolgen wie: Eat, Sleep, Code, Repeat abdecken soll 😉 Hat hier jemand von Euch Erfahrung? Wie würdet Ihr vorgehen? Leider scheint es dazu wenig Input im Netz zu geben und die Beispiele reduzieren sich dann doch schnell auf solche simplen Ablauffolgen ...
  10. Ok, zumindest das Türschwellen Problem konnte ich dank der Unity-Doku beheben, das hatte ich zuvor übersehen. Durch erhöhen des Voxel-Space auf 10 wurden die engen Türen erkannt und können jetzt passiert werden. Sollte ich für Häuser generell ein eigenes NavMeshSurface nutzen? Aber soweit ich das verstehe, gibt es dann wieder autom. Links zwischen den NavMeshSurfaces, und damit auch ein WARP korrekt? Die Frage mit den Obstacles besteht nach wie vor ...
  11. Hallo zusammen, ich habe aktuell ein Problem mit den Unity Navmeshes. Aktuell verwende ich bereits die Unity Navmesh Components und nutze das NavmeshSurface zum Baken anstelle des Basis Baking-Mechanismus. Soweit so gut, klappt auch sehr gut. Nun habe ich in meiner Szene diverse Häuser, die begehbar sein müssen um hier später statische Deckungsposition definieren zu können. Wie man auf dem Screenshot gut sehen kann, wird das Gebäude selbst auch gut im Baking eingebunden, mit Ausnahme der Türen. An jeglichen Türen gibt es aktuell einen Bruch des Navmesh (rot markiert). Ich könnte hier, wie auch schon ausprobiert NavMeshLinks einsetzen um dies zu überbrücken. Das gefällt mir jedoch nicht, da es hier zu einem Warp des Avatars kommt, was total bescheuert ausschaut. Gibt es eine Möglichkeit das zu überbrücken? Ich habe auch schon versucht an den Sellen Panels/Cubes zu verwenden die kaum merklich über die Schwelle gehen um diese als Layer zu verwenden. Klappt aber nicht, das wird von Unity komplett ignoriert, wie man es an der Tür im Süden gut erkennen kann (das weiße Quad ist hier Walkable und kein Obstacle). Seht Ihr noch eine Möglichkeit? Desweiteren habe ich das Problem, das ich das Haus nicht gleichzeitig als Obstacle und Begehbares Objekt verwenden kann. D.h. im Normalfall wird das Haus zwar als Begehbare Fläche erkannt, dann kann aber der Avatar durch Wände laufen. Ich habe mir jetzt damit geholfen rund um das Gebäude kleine Quads zu sezten (Planes gingen aus irgen einem Grund nicht), die an den Stellen als Obstacle dienen (Im Screenshot deutlich als weiße Flächen zu erkennen). Ist aber sehr nervig, fisst enorm viel Zeit und zwingt mich manuell jedes Gebäude an zu fassen, zu modifizieren und ein Prefab zu erstellen. Hattet Ihr damit auch schon mal Probleme? Gibt es eine bessere Lösung? Viele Grüße Hellhound
  12. Wie es ausschaut gibt es in Unity keine Möglichkeit beide Canvas-Typen gleichzeitig zu nutzen. D.h. sie können zwar gleichzeitig genutzt werden, dürfen sich aber nicht überlappen. Der Overlay-Canvas scheint immer die höhere Priorität zu haben. Und wenn, wie in meinem Fall, ein UIElement über dem 3D-Objekt liegt, wird in den dahinter liegenden Objekten kein Hit mehr ermittelt. Die Sort-Order der Canvas-Objekte hat scheinbar hier keine Wirkung. D.h. ich muss in meinem Fall sicherstellen, dass der Hit über dem 3DObjekt nicht blockiert. Das kann ich auf 2 Arten erreichen: Deaktivieren des Raycasters am Overlay Canvas (Bringt mir nichts, da ich ja noch die UIElemente im Overlay nutzen will) Hinzufügen einer Canvas-Gruppe auf dem überdeckenden UI-Element und hier explizit das Blocking der Raycasts deaktivieren Durch den 2ten Schritt erreiche ich, dass die unter dem Overlay liegenden UIElemente am WorldCanvas auf die Events reagieren, nun muss ich halt zusätzlich, klassisch am 3D-Objekt ein Eventhandler einbauen um hier auf Click-Ereignisse reagieren zu können, damit ich mein Objekt rotieren kann ...
  13. Ich habe aktuell das Problem, dass meine WorldSpace Canvas UI-Objekte nicht auf Events reagieren, solange ich im parallel verwendeten ScreenSpaceOverlay-Canvas den Raycaster nicht deaktiviere. Ich muss jedoch beide Canvas parallel betreiben können, da ich über die WorldSpace-Canvas Objekte Menüs, die im ScreenSpace-Overlay angezeigt werden sollen, triggern muss. Folgendes habe ich laut Google schon probiert, alles ohne Effekt: Unterschiedliche Sorting Order in den Canvas Objekten (WorldSpace 0, Overlay 1) Unterschiedliche Layer und Tags WorldSpace-Event-Camera (Eigentlich eigene) auf MainSpace gesetzt und vice versa. Canvas Groups für beide Canvas hinzugefügt Blocking Masks in beiden Raycastern auf Nothing gesetzt Ich habe mal Screenshots meiner aktuellen Konfiguration der Canvas-Objekte und der Objekthierarchie hinzugefügt (Der Raycaster im WorldSpace ist inzwischen wieder aktiviert, das war nur ein Test). Habt Ihr evtl. noch Ideen, wie ich beide zusammen zum Laufen bekomme?
  14. Was mir inzwischen aufgefallen ist, das Problem scheint sich rein auf den POSE Modus zu beziehen. Selektiere ich rechts die Armature-Bone Struktur rückt der Avatar wieder an die korrekte Position. Gleiches gilt, wenn ich Hat-Mesh selektiere und dann in den Editor-Modus wechsel, dann "rückt" der Avatar wieder nach vorn und alles passt. Sobald ich allerdings den Armature Root-Knoten auswähle oder den Edit-Modus verlasse tritt der Fehler wieder auf ...
  15. Hallo zusammen, ich bin noch ziemlicher Neuling was das Arbeiten mit Blender angeht und habe bzgl. des Modellierens zwei linke Hände, die sind eher für das Coding geeignet . Für meinen Unity Avatar Customizer versuche ich nun Objekte, die ich als OBJ Datei aus dem FUSE Modell exportiert habe an meinen Avatar zu binden, für den ich zuvor mit dem Mixamo-Rigger die Armature erstellen konnte. Das klappt auch zum größten Teil, wie man diesem Thread entnehmen kann : Nun habe ich mit einzelnen Modellen ein Problem das ich nicht erklären kann. Nach dem ich meinem Base-Avatar das Objekt hinzugefügt habe sieht noch alles korrekt aus, lediglich der Helm ist noch nich ganz richtig positioniert (Screenshot 1: AddObject). Nachdem ich dies Korrigiert habe, markiere ich die Mesh, anschließend das Armature und Weise die Mesh dem Armature per Strg+P zu, wobei ich die Generierung von Auto-Weights für die einzelnen Vertex-Gruppen nutze Und genau hier liegt nun mein Problem. Bei einzelnen Modellen werden nun Teile des Modells an einzelnen Stellen durch die Deformation herausgelöst (Screenshot 2). Im Falle des Helms ist das Glas der Schutzbrile deplaziert. Ich vermute, dass das irgendwie mit den Auto-Weights zusammenhängt, kann mir das aber nicht erklären, warum z.B. nur das Glas deplaziert wird, Teile des Helms aber nicht, obwohl es eine Mesh ist ... Irgendwie habe ich es schon einmal lösen können, dass dies nicht passiert, weiß aber nicht mehr wie. Hat jemand einen Tip, was ich hier falsch mache, bzw. wie ich es ohne Auto-Weights hin bekomme, dass der Helm bei der Animation korrekt mitbewegt wird? Ich bin dankbar für jeden Tip. Gruß Hellhound
×
×
  • Create New...