Jump to content
Unity Insider Forum

MaZy

Members
  • Content Count

    557
  • Joined

  • Last visited

  • Days Won

    18

Everything posted by MaZy

  1. Nein kein Odin. Also mein Beispiel zeigt auch keine Werte an. War auch für mich nicht wichtig. Könnte es eventuell mit Custom Inspector anzeigen lassen, aber hab sowas für ScriptableObjects nie gemacht.
  2. Glückwunsch für den neuen AssetStore Packet. Ich persönlich bin nicht so der Fan davon (bezogen auf das Video) und ich meine das gab es frei zu downloaden. Aber wenn ich mal sowas brauche mache ich passend zum Objekt. Beispiel passend zu meinem Projekt, Health, Shield.. (siehe unten) alles in einem ScriptableObject und das benutze ich das als Kommunikations (Ja Events gibt es da auch). Ich benutze sehr selten mittlerweile Singletons. Nur bei Komplexen ein System Sachen die einmal da sind (Beispiel mein InputReader Klasse) oder Kleinigkeiten wie (public static) Player.localPlayer. Bei komplizierteren Sachen stell ich mir das aber harter vor. Ich frage mich zum Beispiel, wie man das verwenden könnte, wenn man jetzt kleinere Minibosse hat, die ab und zu da sind dann im HUD einen Healthbar anzeigen möchte. Muss ich für jeden SO Asset erstellen? Gut es könnten ja alle, den einen Asset teilen, aber was wenn mal zwei Minibosse gleichzeitig gibt und ich will beide Healthbars anzeigen lassen.. Dann lässt sich das nicht so leicht teilen. Ein Beispiel wie ich zum Beispiel mein Health und Shield UI update. [CreateAssetMenu] public class DamageEventSO : ScriptableObject { public EventValue<float> Health; public EventValue<float> Shield; } public struct EventValue<T> { public UnityAction<T> OnValueChanged; T value; public T Value { get => value; set { this.value = value; OnValueChanged?.Invoke((T)(object)this.value); } } } So wie man sieht, ist das hier generic und brauche da nicht floats, ints oder sonst ähnliches.
  3. Bewegt er sich auch nicht, wenn du dein Charakter in entgegen gesetzte Richtung bewegst?
  4. Vom was redest nun? Transforms oder Rectransform (also Spielobjekte oder UIobjekte). Je nach dem wird nach Hierarchy, Z-Achse, Render Order, oder Layer sortiert. 1. SpriteRenderer oder Sprites gibt es in UI gar nicht einfach so. Es gibt Image und ImageRaw, wo man Sprites oder Texturen zu weisen kann, denn die SpriteRenderer selbst benutzen Sprites aus dem Assetordner. Du hast vllt SpriteRenderer (das GameObject) da einfach rein geschoben, anders kann ich mir das nicht erklären. Das heißt du kannst dafür Images benutzen. Deswegen gibt es da keine Orders in den Components. Man benutzt dafür die Hierarchy wie Malzbie schon geschrieben hat. 2. Du muss deutlicher werden. Man kann nicht nachvollziehen, weil du davon ausgehst, dass wir es schon verstehen. Deswegen hat schon Malzbie auch nicht verstanden und mir geht es gerade genauso. Du scheinst, aber etwas zu verwechseln und gehst halt mit den Gedanken weiter. Ist jetzt nur meine Vermutung.
  5. MaZy

    Instantiate

    Also ich kann mal zu meinem jüngsten Erfahrung sagen, dass ich Pooling verwendete habe für Particle Systeme. Ohne das Pooling hatte ich um die 30 Fps, danach ging es auf 60 hoch (ohne FPS Limit um die 200+ FPS).
  6. 100 Schiffe kämpfen ohne Network Culling. Das bedeutet alle bekommen Daten unabhängig davon wie weit sie weg von einander sind. Lasst euch nicht von dem Arrow gewackel nicht irritieren. Es laggt nicht sondern, es sucht den Mittelpunkt und durch den Particles versetzt sich das jedes mal (hab vergessen den Mode zu ändern). https://i.imgur.com/aEuVL7w.gifv
  7. Ich hab bei beiden versucht. Ging nicht. Fokus war da, weil alle movement also auch AddForce wird ausgeführt, sonst sollte es nicht tun. Generell tue ich meine Inputs nicht in den FixedUpdate rein.
  8. Das dürfte nicht gehen, da ja ein Handshake oder so aufgebaut wird und die sind höchstwahrscheinlich unterschiedlich, aber man kann den node.js client in Unity benutzen und damit verbinden.
  9. Du muss mal gucken, ob halt an den gelben Rectangle liegt oder an den Unity Recttansform. Musst mal halt da rumspielen denke ich mal.
  10. Man sieht beim zweiten Bild schlecht, aber da ist ein gelber Rechteck, wo man bestimmt, wie weit der Text gehen darf. Den hab ich bei mir angepasst. Der gelbe Rechteck gibt es standardmäßig bei TM
  11. Ich kenne mich mit der TextMesh version nicht aus (und da es TM ist liegt der Fehler wahrscheinlich nicht an Unity), aber der normale Dropdown Element hat ein GameObject drinne welches sich Template nennt. Den kann man es bearbeiten. Zu den Abständen zwischen den Items gibt es keine Layouteinstellungen. Irgendwie wird das von selbst berechnet. Wenn ich also dein Bild anschaue liegt es wahrscheinlich an den Items. Deren Recttramsform größe ist irgendwie falsch. Denke mal bei TM ist das so ähnlich. Edıt hab mır mal TM Dropdown angeschaut. Tatsächlich ist das bei mir auch verbuggt. Der Text war bei mir übelst groß und daher nicht richtig lesbar. Wenn man das per Hand korrigiert, wird es normal.
  12. Ok hat lange gedauert, aber man muss mit serializeObject arbeiten. Man muss also in meinem fall das hier machen SerializedObject scenenObjectSO = new SerializedObject(scenenObjects); var scenenNetId = scenenObjectSO.FindProperty("scenenNetId"); scenenNetId.intValue = i; scenenObjectSO.ApplyModifiedProperties(); SerializedObject netObjectSO = new SerializedObject(netObject); var netIdProp = netObjectSO.FindProperty("netId"); netIdProp.intValue = i; netObjectSO.ApplyModifiedProperties();
  13. Hallo, ich habe einen Script welches im Editor automatisch läuft. Der überwacht, ob sich in der Hierarchy was geändert hat. Wenn ja sucht es nach bestimmten Components und setzt dann die Werte (einfach jeden eine bestimmte Zahl zuweisen). Doch sobald man von ein anderen Scenen in die Scene in Playmode wechselst sind die Werte plötzlich wieder zurück gesetzt zu den Wert, den ich per Hand eingegeben habe ODER es nimmt den Standardwert von Prefab oder so. Ich vermute mal, dass mir irgendwas wie speichern fehl, aber finde dazu kaum was. Es hat was zwar mit Editor zu tun, aber erbt den Editor Script nicht. Auch was mir eingefallen ist, dass normaleweise ja wenn man in der Scene im Inspector vom Prefab Werte ändert, dass es in Fettschrift angezeigt wird. Das passiert beim Script auch nicht. using Maz.Network.UnityEngine; using System.Linq; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; [InitializeOnLoad] public static class NetworkSceneObjectEditor { static NetworkSceneObjectEditor() { if(!EditorApplication.isPlaying) EditorApplication.hierarchyChanged += OnHierarchyChanged; } static void OnHierarchyChanged() { if (EditorApplication.isPlaying) return; var all = Resources.FindObjectsOfTypeAll<NetworkSceneObject>(); var networkSceneObjects = all.Where(obj => (obj.hideFlags & HideFlags.HideInHierarchy) != HideFlags.HideInHierarchy); //Debug.LogFormat("There are currently {0} GameObjects visible in the hierarchy.", networkSceneObjects.Count()); int i = 0; foreach (var o in networkSceneObjects) { var netObject = o.GetComponent<NetworkObject>(); if (netObject == null) { Debug.Log("NetworkObject is missing! NetworkSceneObject will not work"); continue; } o.scenenNetId = i; netObject.NetId = i; //EditorUtility.SetDirty(o); //EditorUtility.SetDirty(netObject); //EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); i++; } Debug.Log($"Hiearchy changed"); } } Hab paar Dinge versucht mit speichern der Scene oder SetDirty, aber da merke ich, dass dann dieser Event gespamt wird. Hab keine weiteren Ideen mehr.
  14. Komischerweise nach dem ich Einkaufen war (gestern) und wieder zurück kam funktionierte es wieder normal. Also alles normal wie im Editor sowohl auch im Build. Ich verstehe echt nicht, was das Problem war. Ich frage das in Update ab. War auch mal in FixedUpdate drinne. Eine zweite Maus oder ähnliches hab ich nicht. Also mit mouseScrollDelta hab ich auch versucht. Da passierte das gleiche. Ja ich habe schon daran gedacht und auch mal die variable addiert. Also hatte ich mwheel += usw. benutzt. Das Ergebnis war gleich. Ja hab ein paar ältere hab aber noch nicht getestet. Aber jetzt gehts ja komischerweise.
  15. Hallo ich benutze Input.GetAxis("Mouse ScrollWheel") um beim Schiff die Düsen zu steuern. Es funktioniert im Editor super und da kommen werte raus wie 0.1 oder 0.2, aber beim Build da kommt meistens 0 raus und dann irgendwann zufällig kommt 0.1 oder. Ich muss also dauerhaft scrollen, damit irgenwann endlich ein Wert unter oder über 0 kommt. Wie kann man das Problem beheben? Benutze version 2019.1.9f void Inputs() { float mwheel = Input.GetAxis("Mouse ScrollWheel"); nextSpeed = 0f; if (mwheel > 0) { nextSpeed = 1f; } else if (mwheel < 0) { nextSpeed = -1f; } }
  16. In den neuen Unity Versionen wird dieses Fenster entfernt. Danach kommt so ein Dialog nicht mehr. Man kann das unter Project Settings einfach oben rechts bei der Suche "Display" eingeben und sollte dir das schon anzeigen. Wenn du meinst, ob man nur bestimmte Auflösungen anzeigen kann - das glaube ich geht nicht.
  17. MaZy

    YouTube Lizenzkram

    Ich kenne mich da auch nicht aus, aber hab mal jemanden auch über Youtube kontaktiert und er meinte, wenn ich sein Lied kaufe, kann ich das in meinem Videos verwenden (aber auch seinen Namen irgendwo erwähnen). War ein Euro von daher ^^. Ich glaube da wäre ich aber rechtlich trotzdem im Nachteil, falls er irgendwann doch meint, darf es nicht verwenden.
  18. man kann auch einfach nur so machen: playerStateChanged?.Invoke();
  19. Funktioniert das von Sascha nicht? Müsste ja eigentlich. Ich hab nur Facepunch Steamworks benutzt. Da hatte ich so ein Problem noch nicht. Da gibt es auch ein Beispiel, wie man Bilder holen kann und so.
  20. Du kannst Events erstellen. Beispiel mit UnityAction oder UnityEvents kannst du die Werte übergeben. Wenn du z.B. Trigger oder Collision benutzten tust um Health zu verändern, kannst du da dann per event.Invoke(health) machen oder so. In deinen UI Script würde dann nur OnHealthChanged(float health) funktion stehen und da drinne verändert man den Health. Ich habe da meist ein DamageSystem Script, wo ich solche Dinge vorbereite. Die UI Scripte können dann die events von da aus subscriben.
  21. Die Clients wissen nie von einander etwas. Man muss schon denen das mitteilen. Also in dem Fall wie du schon sagtest per RPC. EDIT: Ich meine aber, dass Photon ein Beispiel map hatte mit Teams. Kannst ja da reingucken.
  22. Zu meinem Network System zeige ich hierwie ein ServerLogic bei meinem Networksystem, mit einem Chatserver Beispiel, funktioniert:
  23. Ich habe einige Spiele in 2D gemacht. Die sind sogar im Play Store zu finden. Sehr verschiedene Genres. Ich habe diesen Feature (von Photoshop) nie gebraucht. Konnte ja auch einiges im Inspector einstellen oder mit Strg Snapping aktivieren. Mein letztes Großprojekt war sogar 1 zu 1 Pixel Spiel. Ich habe aus PNG dateien Maps im Spiel generiert. Sprich die Farben im Bild waren ein Objekt im Spiel.
  24. Ich nehme als jahrelanger Programmierer auch immer die zweite Variante. Aber Visual Studio korrigiert das zu der ersten Variante. Dann ändere ich es auch nicht mehr ab. // Also so if (health <= 0) { if (EventManager) { EventManager.Broadcast("OnPlayerDead", player); } else { Debug.LogError("EventManager kaputt!") } } // Statt so if ( health <= 0 ) { if( EventManager ) { EventManager.Broadcast( "OnPlayerDead", player); } else { Debug.LogError("EventManager kaputt!") } } Und wenn man mich fragt wieso? Weil: if ( health <= 0 ) if (EventManager) EventManager.Broadcast("OnPlayerDead", player); else Debug.LogError("EventManager kaputt!") Haben eine kleine Ähnlichkeit Aber ist echt Geschmacksache. Visual Studio verbessert meine Bedingungen immer mit einen Space zwischen den Klammern z.B. ( health <= 0 ). mag ich nicht so.
×
×
  • Create New...