Jump to content
Unity Insider Forum

MaZy

Members
  • Posts

    685
  • Joined

  • Last visited

  • Days Won

    32

MaZy last won the day on February 23

MaZy had the most liked content!

About MaZy

  • Birthday 02/20/1988

Profile Information

  • Gender
    Male
  • Location
    Hannover

Recent Profile Visitors

30,813 profile views

MaZy's Achievements

Advanced Member

Advanced Member (3/3)

193

Reputation

  1. Nee keine Verwirrung. Sondern Koordinationsproblem. Woran ich was erkenne? Du meinst wahrscheinlich den Variabletypen? @chrische5hat das schon als Beispiel gezeigt. So mach ich es auch. Auch wie er schon bereits sagt, kann man für sich persönlich machen wie man will, nur war es für mich hart zu lesen. Ich erkenne etwas, weil es sehr gut übersetzt und leserlich geschrieben wurde. IsGravityOn, IsGravityActive, IsGravityEnabled (Oder GravityIsActive bzw IsOn hört sich auch mal besser an) führt alles zu true oder false. Kann man auch kürzen mit GravityActivated, GravityEnabled. PlayerCount = Anzahl der Spieler (Int) Players (oder GetPlayers()) = Ne liste mit Players (List<Int> oder []int usw) Hierbei ist mir nicht wichtig, um zu wissen was für ein Typ das ist, wenn ich es lesen will und verstehen will. Sollte ich damit anfangen zu arbeiten, muss ich so oder so nur einmal wissen, was mich da erwartet. Also je nach Editor z.B. Rider wird es gleich angezeigt, oder in Visual Studio kann man mit Maus drüber bzw. auch kann man bei der Deklaration an anschauen. Das reicht bereits um damit für die nächste Zeit zu arbeiten. Beispiel habe ich hier die Anzahl der Spieler = PlayerCount . Es würde nicht NumberPlayerCount oder IntPlayerCount stehen oder iPlayerCount. Einfach nur PlayerCount, da es üblich ist, dass da ein Int dahinter steckt bzw auch logisch ist. Es wird bestimmt nicht 1,5 Spieler existieren :D. Bei deinem Beispiel ohne int davor also global_freigabe_waffe_1 würde man das nicht so leicht erkennen, aber das liegt auch daran, das es nicht leserlich bzw, nicht herauslesbar. GlobalReleasedWeaponIndex_1 z.B: sagt durch Index. Aber das ist immer noch falsch. Bei mir wäre es, wenn es hart darauf kommt. Globals.ReleaseWeapon(int index) und ändert Werte dann von array oder so ähnlich. Das hab ich nirgends behauptet. Ich hab nur am Rande erwähnt, dass bei mir so ein Problem war und so gelöst habe und ich da in dem Moment für eine Spielefirma gearbeitet habe und sie als Lösung akzeptiert haben. Ich sagte ja nirgends, dass es besser sei oder ich besser bin. Hab halt nur noch erklärt, warum das Problem auftritt. Vorher hatte ich herum probiert. Und wenn ich danach google gibt es endliche Threads, wo viele das gleiche wie bei mir behaupten. Aber natürlich kann es bei dir in dem Fall ganz anderes Problem sein.
  2. Es geht mir nicht um die Übersetzung und was für ein Type das ist, sondern jedes mal sehe ich die ersten Buchstaben, die überall auftauchen und erkenne nicht welche Variable das ist. Das führt bei mir zu Koordinationsprobleme. Ich sehe nicht sofort, wo dasselbe auftauchen könnte, sondern ich sehe erst mal alle gleich. Daher bin ich gezwungen viel mehr zu lesen als ich brauche. Bei gravity reicht ja schon, wenn gravity erkenne und weiß direkt, ok geht um gravity und sehe auch dieses Wort gravity und kann schneller identifizieren. Ob es nun gravityMultiplier ist oder gravityBounce was auch immer ist erst mal egal. Meistens schreibt auch Klassen, wo nicht so viel steht und daher ist das merken auch wesentlich einfacher. Heutzutage brauchen wir das nicht, dass wir den Typen zu erkennen. Unser IDE also Editor zeigt doch bereits an, ob es um Player, float oder sonst was geht. Auch bei Namen. Wenn ich Player sehe weiß ich es ist Player. Steht da playerController oder playerCharacterController (wobei ich das nie Player nenne ehrlich gesagt), weiß ich geht um de Controller. Steht da gravityMultiplier weiß ich entweder float oder int, aber einmal angeschaut, weiß ich dass es float ist und das vergisst man nicht so schnell. Das gleiche machen übrigens im Asset Folder auch. Muss zu geben, da finde ich nicht sooo schlimmer, weil dort auch eher um die Suche geht z.B. wenn man "p" schreibt direkt prefabs angezeigt werden sollen, aber da wir so oder so t:Prefab eingeben können und alle Prefabs angezeigt werden ist das auch unnötig. Wir haben im Asset ordner symbole, die definieren, ob wir ein prefab sehen, ein model sehen, oder texturen usw.
  3. Komisch, ich habe das Projekt nochmal geöffnet, wo ich genau das Problem gelöst habe (dafür wurde ich sogar bezahlt). Grob tue ich das: currentGravity += Physics.gravity.y * gravityMultiplier; if (controller.isGrounded) { currentGravity = Physics.gravity.y * gravityMultiplier; Debug.Log("true"); if (Input.GetKeyDown(KeyCode.Space)) { currentGravity += jumpForce * gravityMultiplier + -Physics.gravity.y * gravityMultiplier; } } else { Debug.Log("false"); } Also wie in Reallife Charakter nach unten bewegen.. gibt es ein Widerstand wird nicht mehr addiert sondern die selbe Gravitation jedes Frame gesetzt.. Wird Space gedrückt, also in Reallife gegen die Gravitation Kraft ausgeführt, bewegt man sich halt nach oben. (ich glaube man kann es auch so berechnen currentGravity += (jumpForce + -Physics.gravity.y) * gravityMultiplier;) Wie du siehst, hab ich nur true stehen. Ich erkläre dir auch warum das so ist. Konzept vom CC. Der CharacterController berührt den Boden.. jedoch ist der CharacterController in dem Frame wo Move() ausgeführt wurde aber im Boden und nicht auf dem Boden und wird daher nach oben verschoben. Sobald er diese Position erreicht hat, wo über den Boden ist, heißt es isGround = false. Allerdings gab da noch eine Sache. Ich glaube isGround zeigt den letzten Wert von der letzten Frame. Sprich, Wenn du Move() einsetzt wird dann isGround auch erst gesetzt. In deinem Fall sollte aber korrekt sein, da du nachdem Move() isGround überprüfst. (Am Rande: Ich muss auch zugeben, dass dein Code echt schwer für mich ist zu lesen. Überall Prefix wie f, und vec3 gibt mir jedes mal kleine Verzögerung bzw. Denkpause um zu erkennen um welchen Variable es gerade geht.)
  4. Lass dein Character immer nach unten bewegen, egal ob er auf dem Boden steht oder nicht. In Reallife ist es genau so. Wir haben ganze Zeit eine Erdanziehung, egal ob wir springen oder auf dem Boden stehen. Würden wir keine Anziehung haben, weil wir den Boden berühren, würden wir kurze zeit auch weg fliegen und wieder auf den Boden sein.. wie bei dir halt true und false, hehe.
  5. Also ich für mich persönlich habe knapp 10 Jahre verschiedene Techniken mit Unity ausprobiert. Habe eigene Libraries geschrieben, die leider auch unfertig sind (kaum Zeit dafür mittlerweile). Hier muss ich auch erwähnen, dass es nur meine persönliche Erfahrung und Meinung ist. Wie man schon durch @Sascha's langen Texten sehen kann, könnte man Bücher schreiben um zu erklären, welche Techniken man verwenden kann. Das ist auch der Grund warum ich mit Youtube Kanal anfing. Nicht um zu zeigen wie man machen sollte, eher um meine eigene Erfahrung, wie ich Sachen bewältige und was ich cool finde usw. Ich verfolge meist eine einzige Regel in Unity. So gut wie möglich alles in seinen eigenen Script packen. Um mal einen guten Beispiel zu geben. Ich benutzte DamageSystem.cs. Dort ist Health zu finden. Allerdings was ist nun hier das Problem? Ist doof zu erweitern. Möchte ich nun Armor hinzufügen muss ich diesen Script bearbeiten. Was ist also besser? Genau, wieso nicht gleich Health.cs, Armor.cs usw. unabhängig davon schreiben. Diese wiederum können so gut aufgebaut werden, dass bereits automatische Events usw. eingebaut werden. Beispiel UnityEvents, Automatische Veränderungschecks (quasi, ist der neue Wert wie der Alte? Nein? Dann Event auslösen usw.) Vorteil hier ist, ich kann beliebige neue Attributen einbauen und DamageSystem muss nicht angefasst werden, in dem ich Component reinziehe oder rausziehe. Hab ich Stamina.cs Component beim Spieler, dann hat er auch Stamina. In dem Fall muss mein DamageSystem gar nicht wissen, um was es geht. Es ist wie Lieferer, der weiß nicht was in dem Paket ist, aber kann damit arbeiten. Ebenfalls kann man auch mit GetComponent abfragen, ob Health, Armor, Stamina usw existiert und je nachdem anders handeln. Nun wie kann ich das nun mit UI dynamisch verbinden? Dasselbe Spiel dort auch. UI Elemente werden aktiviert oder deaktiviert je nachdem welche Componenten es existieren. Mit GetComponent oder TryGetComponent kann man abfragen, ob etwas existiert. Manager Es wurde ja bereits gesagt, dass bei Namen wie Manager Vorteile und Nachteile gibt. Um aber mal Proargumente abzugeben, kam bei mir auch ab und zu vor, dass irgendwo mal "Manager" entstanden ist, da keine eindeutige Namen zugewiesen werden konnte. Eben, weil sie gleich mehrere Aufgaben tun. Das ist manchmal auch gut so, denn ich möchte auch ein Component in Unity haben, dass es möglichst erleichtert etwas leicht zu konfigurieren. Ich bin auch kein Fan davon und benutze wirklich sehr selten sowas oder solche Namen (aber mir geht ja um Pro hier gerade). Für mich sind meist Manager, die irgendwie eine Art Überwachung betreiben. Ein Beispiel ist, wie finde einen bestimmten Gegner auf der Karte. Wo hole ich die Information her. EnemyManager oder EnemyManagement haben solche Informationen meistens (zugeben, würde ich nicht mal so machen, aber war ein Beispiel, was mir spontan einfiel). Z.B. EnemyManager.Find(id). Noch nie ist mir aber im Leben passiert, dass ich durch anderen 3rd Party Libraries bei einem Namen wie "Manager" aufgehalten wurde zu programmieren oder verwirrt war und ich dachte "Oh Gott, ich bin hilflos, was tut denn dieser Manager nun?" (um bissel zu übertreiben :D). Denn allein wenn man "Enemy.cs" sehen würden wissen wir ja auch nicht genau, was dort alles möglich ist. Wir wissen geht um Enemy. Was tut es denn?. Arbeitet Enemy denn mit Transform (also mit movements)? Hat es Health eingebaut? Benutzt es Animationen? Fragen über fragen. Oder sind die alle vllt. in separaten Components usw. unterteilt? Mal ja mal nein (in meinem Fall meistens, ja). Denn bei simplen Namensvergebungen aus Kombination meist aus Nominativ und (nominalisiertes) Verb also "Was ist das?" und "Was tut es?" wie zum Bespiel WorldSpawner, EnemyDamageReceiver" UIElementTransition ist man schnell informiert, aber bei komplexeren wie Util(s), DamageSystem, HUD, UI oder bei komplett erfundenen Namen wie Tama, Checky schauen wir trotzdem die Docs oder Source an um zu verstehen, was genau da möglich ist und passiert. Unabhängig davon behaupte ich mal, dass man selbst bei WorldSpawner dennoch anschauen würden, was eigentlich da alles möglich ist. Dank unser IDE sehen wir ja meist auch was möglich ist (yay!). Natürlich, würde es WorldManager heißen, würden man auch nicht wissen, ob es eine Spawn-Funktion hat und solche aufgeben erledigt. Allerdings hab ich mal solche Klassen gesehen, die auch eine Funktion hatte. Z.B. WorldSpawner.Spawn(World world). Klasse! Nehme als Beispiel mal Mirrors NetworkManager: Das ist ein Runtime - Component. Sowohl Einstellung, aber auch sowohl Aufgaben wie Verbindungaufbauen, Callbacks ausführen etc. tut dieser Manager. Nun was könnte hier der Name am besten sein, um präzise mir verständlich zu machen, was genau die Klasse macht? Man hätte vllt auch gleich Mirror nennen können. Würde trotzdem nichts aussagen für mich. Aber, muss ich denn genau wissen, was im Background passiert? Denn den Usern bzw. Programmierern wollen wir doch so einfach wie möglich machen. Ich will hier jetzt nicht als Pro Manager rüber kommen, aber ich wollte mal auch die guten Seiten mal darstellen, wieso man manchmal Manager verwendet. Ich weiß, nun man könnte ja Unterteilen. Genau dazu komm ich jetzt. Um Mal gegen zu argumentieren. Neben Mirror wurde aus der gleichen Projekt eine andere Version erstellt, nennt sich Mirage. Mirage ist das komplette Gegenteil von Mirrors Vorgehensweise. Mirage fokussiert sich auf die wesentlichen Elemente des C#'s OOP. In Mirage siehst du also die ganzen Unterteilungen zu Configuration, SceneManagement usw. in verschiedenen Komponenten. Eigentlich fand ich die IDEE super, denn genau mein Geschmack... dachte ich. Am Ende hatte mein GameObject nicht nur zwei Components, wie da oben wie wir sehen "NetworkManager" und "Transport", sondern knapp ca. 10 verschiedene. Das ist für mich einfach gesagt Spaghetti. Um mal was zu ändern muss ich die Components durch gehen und bei verschiedenen Stellen etwas einstellen. Ich verliere den Übersicht und lästige hin und her gehen nervt total. Mag sein, dass Mirage hier technisch was falsch tut, aber das ist ein Beispiel, wieso mal ein "Manager" gut tut. Ganz großer Nachteil Ein ganz großer Nachteil bei sowas ist, die Arbeit mit mehreren Personen. Manager sind echt nicht dafür gemacht. Manager sind meistens abhängig bzw. die Scripte sind abhängig von Manager. Das ist genau so auch bei Singleton so. Hab bereits dafür eine gute Technik entwickelt (yay!) und alles ist automatisiert. Sollte ich also mal Singleton, oder Manager verwenden müssen, dann spawnen die auch selbstständig jedes mal, egal in welcher Scene ich starte. Vorteile und Nachteile bei Fehlersuche Ich will ehrlich sein. Ich sehe da kein Unterschied, denn beide sind aufwendig für mich. Wenn man in seinem Manager ein Fehler hat, dann weiß man auch dieser Fehler ist irgendwo in dem Script ist. Aber wenn alles irgendwie miteinander verknüpft hat, auch wenn es decoupled arbeitet, dann hat man z.B. das Problem, dass man alles zurück verfolgen muss, wo dieser Fehler her kommt. Beispiel A->B->D, C->D, E->D, F->D und Der Fehler ist bei D. Nun muss ich heraus finden, wieso dieser Fehler bei D entstanden ist. Wie man durch Pfeile erkennen kann, kommen am Ende alle zu D. Das heißt A, B, C, E, F können dieser Fehler verursacht haben. Was ich zum Beispiel nicht mag, aber in dem Projekt mit arbeite und leider so eine Struktur hat ist z.B. sowas: Uff und wieso hat er Entwickler das so gemacht??? Das tun zum Beispiel auch viele und ich verstehe nicht weshalb sie das tun Hier heißt der Player zwar nur Player, aber ganz klar was wir hier sehen ist, dass es ein PlayerManager ist . Meine Empfehlung.. arbeite hier mit UnityEvents. UnityEvent UnityEvent ist Liebe <3. UnityEvents sorgt dafür, dass man zwei unabhängige Scripte zusammen arbeiten lassen kann, da du die Einstellung durch Inspector durchführst und nicht im Code. Dank Serialization kann Unity die Listener für uns registrieren. Sagen wir mal du hast Shoot() ausgeführt und mit Raycast machst du GetComponent<Health>() und nun kannst du health.ApplyDamage(int dmg) ausführen. Nun willst du ja UI oder Healthbar usw. updaten. UnityEvent kann das tun. Egal ob UI da ist oder nicht.. ApplyDamage wird immer funktionieren und die Scripte sind auch nicht abhängig davon. Man stelle sich UnityEvent wie ein unsichtbarer Middlesman vor. Jemand der für uns eine Aufgabe übernimmt im Background. Nachteil Leider hat auch UnityEvent einen doofen Nachteil, wenn man sie ganz normal verwendet. Wie kannst du nachvollziehen, wo du UnityEvent verwendet hast.? Ist schwer. Kannst du so gut wie gar nicht. Beispiel. Du hast ein UI Script und da steht public void UpdateHealthText(string text). Nun muss du irgendwie herausfinden, wo UpdateHealthText benutzt wird. Kannst du nicht (zumindest fällt mir da keine Idee ein, ob man das im Editor rausfinden kann). Vllt hast du es beim Spieler bei Health.cs verwendet, oder beim Player.cs oder einfach irgendwelche anderen Scripte usw. Fakt ist. Zwar wird ApplyDamage in Health funktionieren.. allerdings beim Invoke des UnityEvents wird eine Fehlermeldung rausspucken, dass UnityEvent eine Funktion nicht mehr findet. Sprich.. man muss darauf auch achten, dass man beim UnityEvent, wieder UpdateHealthText rausnimmt. Wäre eig schön, wenn UnityEvent die möglichkeit hätte sowas zu ignorieren. Dann wäre das kein Problem. Allerdings kann man dafür eigene Visualizer schreiben, wie hier gemacht wurde: https://assetstore.unity.com/packages/tools/utilities/event-visualizer-163380 (ich will nicht lügen, habe es gerade ergooglet). Um das umzugehen gibt es dafür gibt es ein paar Tricks. Listener und Receiver schreiben. Das ist zu deep um jetzt da reinzugehen, aber das Gute bei der Sache ist, dass der Listener immer da ist beim UI als Component und das Receiver genauso da ist beim Health. Der Listener kann quasi schauen, ob eine Instanz existiert if health == null, dann tue nix. Daher, ob du UI löschen tust, oder Health.. keine Fehlermeldung wird entstehen. Meine eigene Lösung dazu war eine anderes eigenes System. Den nannte ich SmartEvents und muss gecodet werden. Heißt hier arbeitet man nicht mit dem Inspector. Ich finde mit IDE zu arbeiten immer bequemer, da ich auch schauen kann, wo was benutzt wird. Dafür sind die IDEs einfach zu gut geworden mittlerweile. Wenn ihr UnityEvent liebt dann bitte downloaded unbedingt das heir: https://github.com/MerlinVR/EasyEventEditor EasyEventEditor fügt mehr Optionen hinzu. Beispiel private Methoden werden auch sichtbar. So oder so verstehe ich nicht, wieso das allgemein nicht möglich ist.. denn manchmal will ich private Methoden nur für UnityEvent benutzen. Wenn man richtig hardcore unterwegs sein will Schaue dir Serialization an. Wie es funktioniert. Wenn man seine eigene Serialization schreiben kann, kann man mächtige Sachen erschaffen. Ein Beispiel. Wir benutzen Tilemap. Wir finden aber Tilemap abzuspeichern sehr krass vom Speicherplatz her. Deswegen speichern wir die wichtigen Daten als JSON ab und lassen in Runtime da wieder lesen. Wir sparen dadurch über 80% Speicherplatz. Denn in der Scene oder als Prefab waren das für uns zu viel Daten. Ich bin leider nicht soweit gekommen, aber quasi damit wollte ich auch meine Scripte entkoppen und mit eigenen Serialization tool arbeiten. Quasi die eigenen EventSysteme werden in JSON abgespeichert und wieder geladen. Leider konnte ich das noch nicht testen, aber die Idee könnte gut funktionieren.
  6. @Banenchen Du solltest deine Fragestellung mal etwas überarbeiten. Die Frage "Warum ... wenn ich dieses Script habe" würde ich jetzt beantworten mit "Weil du diesen Script benutzen tust". Wir kommen also so nicht weiter. Daher was ist dein Problem, wo vermutest du dein Fehler, was hast du probiert und was genau willst du erreichen?
  7. Hallo, der Pseudecode ist jetzt nicht zu Copy&Pasten gedacht. War nur ein Vorschlag, wie du das machen kannst. Die richtigen Variablen und Code musst du natürlich selbst einsetzen.
  8. Also anscheinend arbeitet man bei dir mit den Namen also suche doch nach namen mit ner schleife zb for each oder so und wenn der gesuchte name vorhanden ist, ist das item vorhanden. EquipmentObject item = null; foreach(var equipmentObjectItem in inventory) { if(equipmentObjectItem.name == gesuchtesItemName) { item = equipmentObjectItem; } } if(item != null) { Debug.Log("Gefunden"); } Musst natürlich den Code für dein Script anpassen. Übrigens.. Wieso ist Type ein Enum, wenn man schon mit ScriptableObject arbeitet? Kann man ja dafür auch benutzen.
  9. Im text steht, dass es geht. Wichtig ist, wenn man > overloaded muss auch < existieren.
  10. Ahh verstanden. Also ich würde es lieber nicht dafür meine Festplatte belasten. Egal ob es dabei um eine Kleinigkeit geht :D. Ich hab z.B. HDDs die sich bei Inaktivität ausschalten. Und das sind die meistens beim Zocken auch. Dadurch kriegt mein PC auch minimal mehr Power. Aber das ist ne Kleinigkeit. Ich würde ein Script benutzen und dort die States eines GOs abspeichern. Eigentlich würde ich ja diesen GO duplizieren oder den Original mitnehmen und einfach mit rüber in die neue Scene bringen mit DontDestroyOnLoad. Wäre sogar etwas leichter. Nachdem die Arbeit fertig ist mit Destroy löschen.
  11. @malzbie Der Grund warum ich separiere ist, weil UIs, wenn man etwas dort ändert alles neu geupdatet wird. Performance sinkt dadurch sehr stark. Deswegen sagt man ja auch, dass man Animations bei UIs vermeiden soll, wenn man Performance sparen will. Leute die schwachen PC oder so haben, werden das merken, da alle GOs, die RectTransforms oder CanvasRenderer haben ( eins davon, weiß gerade nicht welches) geupdatet wird. Dies kann aber durch Aufspaltung auf mehrere Canvas optimiert werden. Wenn man zum Beispiel Gegner hat mit Healthbars, die sich ständig ändern, da lohnt sich dann dafür eigenen Canvas zu machen. Wird hier auch kurz erklärt: https://support.unity.com/hc/en-us/articles/115000355466-Split-canvas-for-dynamic-objects Manchmal liegt es auch darum, dass ich gern eigenen Canvas mit Prefab vorbereitet haben will für mehrere Projekte. Beispiel FPS Anzeige.
  12. Ich hab dein Vorhaben nicht genau verstanden. Du hast zwei Scenes und willst in einem erst die Daten speichern (im Spiel?) und dann zu der zweiten wechseln? Was soll hier passieren? Daten laden oder wie? Oder geht es hier um Scene speichern im Editor?
  13. Wir haben in der 2d mmo Projekt eine Scene extra für UI, aber das liegt daran, weil wir zwei verschiedene Versionen vom Spiel haben und wir brauchten am Anfang ein für die Clients den Loginscreen. Für den Client brauchen wir den Loginscreen, Anmeldeverfahren und wie und wann die Welten geladen werden sollen. Deswegen fanden wir am besten, dass wir eine vorbereite Scene haben statt ein Prefab. Vorteil dabei ist, dass wir so oder so per Code alles laden müssten, aber so haben wir eine separate Scene nur für den Client. Das muss beim Server nicht dabei sein. Wenn wir jetzt nicht dynamisch nach Spielstart Scenen geladen hätten, dann hätte ich eher Prefabs benutzt und dazu die nötigen Scripts. Aber was der Unterschied zwischen Prefabs und Scenen? Prefabs sind gameobjects gelagert als Asset. Prefabs können in der Scene platziert werden. Prefabs haben Componenten auf die man ein Referenz aufbauen kann in anderen Componenten. Geht bei Scene nicht und das zu handlen ist auch nicht gerade einfach. Du kannst auch auf diesen Prefab (also Asset) und auf die Werte aus einem Script zugreifen, kannst theoretisch Funktionen aufrufen (ob es sinn macht oder was bringt ist ne andere Sache :D). Sagen wir mal du hast ein Pooling System und willst nun ein Projektil erneut verwenden.. kannst aus dem Prefab die Daten lesen und die Standardwerte eintragen. Prefab finde ich aber auch manchmal problematisch. Ein Beispiel: Ich kann ein Component hinzufügen ohne in den Prefabmode zu gehen, aber es hoch oder zu verschieben erlaubt es nicht, wieso!?. Diese Probleme hab ich bei Scene gar nicht. 2. Beispiel: Bin ich in Prefabmode sehe ich die Objekte in der Scene nicht mehr.. wie soll ich das nun da reinschieben? Multiple Scene geladen kann ich hin und her schieben. Ich persönlich benutze auch mehrere Canvas. Beispiele: FpsCanvas DamagePopupCanvas FadescreenCanvas UICanvas für standard sachen (Health, Timer, Score, Aktionsleiste usw. usw.
  14. Soweit ich bei mir sehen konnte mit der neusten Version (meine ist 2021.2.6f), zeigt es an, was es gerade tut. Was mir eher auf dem "Sack" geht, ist dass man dabei nichts machen kann. Ok, wenn es irgendwas tun muss, sperre bitte doch nicht ganzen Editor. Lass mich in den Settings gehen, oder paar dinge im Projekt anschauen. Vllt will ich ja ne CSharp Datei öffnen und programmieren. Aber nein, warte lieber erst mal.
  15. @Sascha Ich dachte erst du hast geschrieben, dass es nicht von Steamworks sei. Mir ging auch nicht um Klugscheißen oder sonst was, aber dennoch war ich nur verwirrt, warum du meintest, dass es nicht dazu gehören muss. Ich habe nur darauf hinweisen wollen, so wie ich das kenne, dass Steamworks sowas anbietet und hab dazu die Links angegeben wo man unteranderem ISteamNetworkingSockets sieht. Das ist auf jeden Fall unter Steamworks-API-Referenz zu finden. Also Steamworks ist für mich dennoch sehr verwirrt. Da gibt es sehr viele verschiedene Arten. Manchmal blick ich nicht durch, ob es nun Spielserver in Sinne von Liste gemeint ist, oder tatsächlich ein Spielserver. Hier wird das etwas erklärt: https://partner.steamgames.com/doc/features/multiplayer
×
×
  • Create New...