Jump to content
Unity Insider Forum

Thariel

Members
  • Content count

    415
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by Thariel

  1. Thariel

    Berufliche Zukunft

    Ich hab dir auch ein Ratschlag. Entweder findest du ihn total albern oder er wird dir sehr weiter helfen... ist eher ein spiritueller Ratschlag, hilft mir aber immer wieder sehr, die richtige Entscheidungen zu treffen. Vor allem wenn es darum geht, Lebensentscheidungen zu treffen wo auch Angst eine Rolle spielt (tauge ich dazu / schaff ich das überhaupt / bin ich nicht zu alt dafür / was werden nur die anderen Leute über mich denken / ... /). Nimm dir ein Moment Zeit und stell dir vor, wie du 80 Jahre alt bist und auf dem Sterbebett liegst. Stell dir vor, wie du jetzt an diesen Moment hier denkst. Was würde sich dein 80-jähriges ICH wünschen, wie du dich jetzt entschieden hast? Mutig oder ängstlich? Was wäre schlimmer, wenn du etwas Probiert hast, das klappt oder auch nicht oder einfach nichts gemacht hättest, nur weil dich nicht sicher bist, ob du dazu taugst? So wie du das beschreibst könnte man meinen, dass du bei einer Umschulung alles bisherige gelernte vergessen würdest, das ist aber nicht so! Und wenn es wirklich nicht klappt, machst du eben wieder was anderes und es fällt vielleicht eine gute Geschichte ab! Am schlimmsten ist es, wenn du mal bereust, nichts versucht zu haben. Entweder du GEWINNST oder du LERNST.
  2. Thariel

    Mathematische Frage

    Hi Ich habe eine mathematische Frage und weiss gerade nicht, wie ich das am besten Löse und weiss auch nicht, nach welchem Begriff ich suchen könnte. Im Spiel kann man Fischfallen bauen. Eine Falle fängt 10 Fische pro Tag. Wenn man zwei fallen direkt nebeneinander baut, fängt man aber natürlich nicht 20 Fische, weil die Menge an Fisch im Ozean begrenzt sind. Eine Falle hat eine Effektifität von 100%. Zwei Fallen nebeneinander eine Effektivität von 66% (100/1.5). Die Effektivität nimmt mit der Distanz aber wieder zu. Ab 30m Distanz, ist die Effektivität wieder 100% (100/1). Also Distanz: 0<---------------------------------------->30 Effektivität: 1.5<---------------------------------------->1 Das heisst, bei einer Distanz von 15m. wäre die Effektivität beider Fallen bei 80% (100/1.25) und würden zusammen 16 Fische fangen, statt 20. Meine Fragen: Wie nennt man diese Art von Berechnung, wonach müsste ich suchen? Gibt es dafür in Unity oder C# eine Funktion? Wie berechne ich das genau, dass ich die Effektivität erhalte, wenn ich die Distanz kenne? Danke schon mal
  3. Thariel

    Mathematische Frage

    Ja genau 🤣 Habs jetzt so ähnlich gemacht: float effLoss = (distance / 30.0F) * 0.5F; effLoss = 0.5-effLoss; effLoss++; //jetzt ist effLoss zwischen 1-1.5 in Relation zu den 0-30m Danke nochmals
  4. Thariel

    Mathematische Frage

    Es ist keine Kurve, sondern Linear/Proportional. Schaue mir das mal an, aber ich glaube Log/Log10 fällt schon mal weg. Distanz 0 = Effektivität 1.5 //Alle Zwischenschritte Distanz 15 = Effektivität 1.25 //Alle Zwischenschritte Distanz 30 = Effektivität 1 EDIT: Ich glaube ich habs jetzt raus!
  5. Thariel

    Laptop anforderungen für unity?

    Hi Unity läuft fast überall. Es kommt darauf an, was du mit Unity machst und wie gross dein Projekt ist. Ich empfehle unbedingt mindestens 8GB Ram, mit 4 kommst du nicht weit. Ehrlich gesagt, würde ich dir grundsätzlich von einem Labtop abraten, ausser du brauchst das Labtop wirklich fürs Studium oder die Schule (weil du es dort benutzen musst). Selbst dann würde ich so schnell wie möglich trotzdem noch ein PC zulegen. Ich denke aber schon, dass du auf deinem Labtop Unity kennen lernen kannst und einiges schon ausprobieren kannst.
  6. Hi Suche eine elegante Lösung für folgendes Problem (schwierig zu erklären): Der Spieler kann viele verschiedene Strukturen bauen und jede Struktur hat ein eigenes Script mit einer eigenen Logik (AnimalTrap.cs, Campfire.cs, ...). Jede Struktur hat auch ein passendes UI Fenster, das geöffnet wird, wenn der Spieler [E] drückt (WndAnimalTrap.cs, WndCampfire.cs, ...). Die UI Fenster haben verschiedene Slots, in die der Spieler Items vom Inventar setzen kann. Dies ist immer das selbe Script (SlotScript.cs). Die Haupt-Scripte mit der Logik (AnimalTrap.cs, Campfire.cs, ...) nutzen diese Items. Das Problem: Wenn ein Spieler ein Item vom Inventar auf ein Slot zieht, enthält der Slot das Item. Das Item wird also zerstört, wenn der Spieler das Fenster wieder schliesst, es muss aber vorhanden bleiben, weil das Haupt-Script mit der Logik (AnimalTrap.cs, Campfire.cs, ...) das Item verwendet (z.B. in AnimalTrap.cs wird ein Item als Köder benutzt), auch wenn das Fenster geschlossen wurde. Das Item soll aber auch vom Haupt-Script verwendet werden, wenn das Fenster geöffnet ist. Also: AnimalTrap.cs existiert immer und liegt auf dem GameObject. WndAnimalTrap.cs existiert nur, wenn das Fenster geöffnet ist. SlotItem.cs ist ein child von WndAnimalTrap.cs und kann mit einem Item (Köder) beladen werden. [AnimalTrap.cs] <--[Item baitItem]-->[WndAnimalTrap.cs]<--[Item baitItem]-->[SlotScript.cs] AnimalTrap.cs und SlotItem.cs müssen aber gleichzeitig auf das Item (baitItem) zugreifen können. AnimalTrap.cs berechnet dauernd die Haltbarkeit des Köders und wie viel TIere gefangen werden, EGAL ob das Fenster geöffnet ist oder nicht. Am einfachsten wäre es, wenn ich beim öffnen des Fenster einfach das Item mit ref übergeben könnte und SlotItem.cs ändert dann direkt das Item in AnimalTrap.cs, aber das geht ja leider nicht (.net v4.0 unterstützt das nicht). Versteht jemand, was ich meine? Ist etwas schwer zu erklären und mir fällt wirklich keine "elegante" Lösung ein. PS: Oder ganz einfach erklärt, SlotScript.cs soll eine variable in einem anderen Script manipulieren, ohne dass es dieses kennt. Erst beim erstellen kann dieses Scipt irgendwie übergeben werden.
  7. Danke für die Antworten. Habe jetzt eine Lösung gefunden, die elegant genug ist und auch noch andere Vorteile bietet. Habe das SlotScript.cs in UiSlotScript.cs umbenannt und ein neues Script SlotScript.cs erstellt, sowie alle public Variablen und das Item Objekt hinein verschoben und es liegt jetzt direkt auf dem GameObject neben AnimalTrap.cs, welche eine Referenz darauf hat. Jetzt kann ich also den Slot direkt im GameObject Einstellen und brauche jetzt nicht mal mehr für jede ähnliche Struktur ein neues UiWindow, weil ich alles in der Struktur selbst Einstelle. Beim öffnen des Fensters übergebe ich dann einfach das Script selbst (Wnd.Show(this)) und das UiSlotScript nutzt einfach die Variablen von SlotScript.cs.
  8. Thariel

    [gelöst]Ein paar kleinere Fragen

    Wenn ich so Ruckler habe, habe ich bis jetzt immer mit dem Profiler herausgefunden, woran das lag: In Unity Window->Analysis->Profiler https://docs.unity3d.com/Manual/ProfilerWindow.html
  9. Schau hier: https://docs.unity3d.com/Manual/Tilemap-Hexagonal.html
  10. Kann dir zwar nicht helfen, aber du weisst schon, das Unity 2d Hexagonale Tilemaps mitbringt? GameObject->2D Object->Hexagonal Tilemap
  11. Thariel

    PBR Stone als Terain über Gaia ?

    Wird übrigens hier direkt am Anfang bei 1:12 erklärt:
  12. Thariel

    PBR Stone als Terain über Gaia ?

    Welche Ressourcen Gaia benutzt wird in einer "Gaia Resource" Datei definiert. Diese sind im Ordner Gaia->Data. Wenn dn in der Hierarchy auf Gaia->Coverage Texture Spawner klickst siehst du im Inspector ganz oben bei Spawner Settings welche Ressourcen-Datei verwendet wird. In dieser Ressourcen-Datei kannst du unter "Texture Prototypes" definieren, welche Texturen Gaia wo auf das Gelände "malen" soll. Das was du getan hast ist lediglich die Textur ersetzt. Sobald du Gaia erneut die Texturen generieren lässt, ist die alte wieder da.
  13. Thariel

    Game ohne code?

    Mit so einem Tool wird @Blubberbob nicht einfach einfach Spiel erstellen. Auch mit Visual Scripting ist es ne menge Arbeit. Und du machst am Ende die selbe Logik, Visual Scripting ist immer noch Scripting. Ist da der Sprung von von einem richtig guten Visual Scripter zum Programmierer so gross? Für einen Prototypen reicht Visual Scripting vielleicht, aber ich schätze es reicht nicht für ein richtiges Projekt. Ich würde @Blubberbob empfehlen, einfach mal mit Visual Scripting zu beginnen und einen Prototypen zu erstellen.
  14. Thariel

    Game ohne code?

    Denke schon, dass du ohne Programmierung was hinbekommst. Aber du bist halt immer limitiert. Programmieren tust du ja nicht nur, mit welcher Taste welche Animation abgespielt werden soll, sondern auch kompliziertere Dinge wie Speicher/Lade-System, Inventar, Item-Management, ein System um grössere Levels preformant zu halten. Ich wüsste nicht, wie ich das ohne Programmierkenntnisse alles handeln sollte. Wenn du ein richtiges, grösseres Projekt umsetzen willst, kommst du da nicht drum rum. Ausser du bezahlst jemand, freiwillige wirst du dafür nicht finden. Aber verstehe dein Problem nicht, Programmieren macht Spass!! 😀
  15. Thariel

    FPS Anzeige

    Hier mein Script zur Anzeige der FPS. Einfach der Szene hinzufügen (vorzugsweise auf ein Text Ui) und eine Referenz eines beliebigen Text Ui hinzufügen. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// This script calculate the current fps and show it to a text ui. /// </summary> public class UiDisplayFps : MonoBehaviour { public string formatedString = "{value} FPS"; public Text txtFps; public float updateRateSeconds = 4.0F; int frameCount = 0; float dt = 0.0F; float fps = 0.0F; void Update() { frameCount++; dt += Time.unscaledDeltaTime; if (dt > 1.0 / updateRateSeconds) { fps = frameCount / dt; frameCount = 0; dt -= 1.0F / updateRateSeconds; } txtFps.text = formatedString.Replace("{value}", System.Math.Round(fps, 1).ToString("0.0")); } }
  16. Thariel

    FPS Anzeige

    Freut mich, dass es dir gefällt 🙂
  17. Hi Entwickle ein System zum bauen von Gebäuden und Einrichtung. Wenn ich eine Fackel an eine Wand baue und die Wand danach wieder lösche, soll die Fackel benachrichtigt werden und entweder herunter fallen oder zerstört werden. Das ist leider ziemlich kompliziert. OnCollisionStay kommt nicht in Frage, obwohl ich damit ein ganzes System entwickelt habe (da die Funktion für jede Collision einzeln aufgerufen wird, musste ich dem Objekt erst Rigidbody hinzufügen, eine Liste erstellen, paar Frames warten mit Coroutine, nur um alle relevanten Collider zu erhalten). Zudem funktioniert es nicht mit MeshCollider. Am einfachsten wäre es, wenn die "anderen" Objekte sich selbst testen würden. Also erst noch mit OverlapBox finden, aber dann muss ich für jedes Objekt extra dafür "ausrüsten", welche grösse der OverlapBox etc. Ich könnte beim Bauen auch eine Referenz erstellen. Wird aber beim Laden eines Spielstandes lustig, für alle Objekte die Referenzen zu finden. Gibt es da keine elegantere Lösung?
  18. Thariel

    In Konstruktor "null" zurück geben?

    Okay, danke euch
  19. Hi Ich habe ein Objekt in dem ich Daten zum Speicherslot speichere (datum, version, spielzeit, ...) und das Objekt beinhaltet auch eine Funktion SaveToFile() und LoadFromFile(). Ich möchte jetzt das Objekt beim erstellen direkt aus einem File Laden können, falls das File nicht existiert, soll das Objekt gerade erstellende Objekt "null" sein. Ist so etwas möglich? Beispiel: ///irgendwo SaveSlot slot = new SaveSlot(@"c:\slot.xml"); //slot soll jetzt null sein, wenn das file nicht existiert oder ein fehler beim laden entstanden ist public class SaveSlot { public SaveSlot(string file) { //geht natürlich so nicht return LoadFromFile(file); } public bool LoadFromFile(string file) { if(!File.Exist(file) retrun null; } public void SaveToFile(string file) { } }
  20. Gibt es ein Preformance-Verlust, wenn man alle Texturen auf Read/Write setzt?

    1. devandart

      devandart

      Ich denke je nachdem, wie du Performance definierst. Wenn du Read/Write aktivierst, hast du die Textur zweimal im Arbeitsspeicher liegen, das ist denke ich der größte Unterschied.

      Mehr Info findest Du dazu hier: https://docs.unity3d.com/Manual/BestPracticeUnderstandingPerformanceInUnity4.html

    2. Thariel

      Thariel

      Es geht halt darum, dass ich eine Wiki Seite zu meinem Spiel erstelle und ich viele Daten wie Items und Icons automatisch exportiere und hochlade. Das geht nur, wenn sie readable sind. Ich frage mich, ob ich den Aufwand betreiben soll, jedes mal vor einem export alle Icons auf readable zu stellen und wieder zurück.

      Wahrscheinlich tu ich das...

      Gut zu wissen, dass sie dann zweimal im Arbeitsspeicher sind, das soll ja nicht sein, da ich das nur im Editor benötige.

    3. devandart

      devandart

      Ich habe es nicht getestet, aber Du solltest zur Design Time das ganze per Code ändern können. Du setzt also die Textur auf readable und danach wieder auf non readable. Die Diskussion und ein Beispiel findest Du hier:

      https://stackoverflow.com/questions/25175864/making-a-texture2d-readable-in-unity-via-code

  21. Hi! Ich habe in Maya 2018 eine komplexe Geometrie und ich möchte sie: Duplizieren Verkleinern Das kleine Modell vom grossen subtrahieren Jetzt sollte das grosse Modell innen hohl sein und überall ein gleich dicker Rand haben. Das Problem: Beim skalieren wird immer Richtung Pivot skaliert, ich möchte aber, dass es überall gleichmässig nach innen skaliert, so wie beim extrudieren. Wer kann mir helfen? Edit: Oder anders gefragt, wie höhlt man ein Modell aus? ^^
  22. Thariel

    OnMouseUp, OnDrag Alternative für Mobile

    OnMouseUp und OnDrag mische ich nicht zusammen. Für ein Drag nehme ich OnBeginDrag OnDrag und OnEndDrag. Vielleicht hilft dir das ja was
  23. Thariel

    Mehrere Canvas-Objekte in Szene

    Ich nutze immer ein Image als Background (z.B. Rot) und ein zweites Child-Image als eigentlichen Balken (z.B Grün). Danach ändere ich die grösse des Childs rectTransform.deltaSize = new Vector2(health, 10) um die Lebenspunkte anzuzeigen. Positionieren tu ich das ganze einfach mit transform.position = Camera.main.WorldToScreenPoint(target.position).
  24. Bei meinem Spiel Lost in Nature verwende ich auch eine Textdatei. Die sieht ungefähr so aus: $BUTTON_OK=Ok $ITEM_NAME_STONE=Stein $ITEM_DESC_STONE=Ein ganz normaler Stein. Davon gibt es für jede Sprache eine eigene Datei. In Unity habe ich dann statt den richtigen Text für den Button $BUTTON_OK genommen. Auf dem Canvas GameObject liegt ein Script das alles automatisch übersetzt indem es alle wichtigen Komponenten durchgeht: void Start() { Text textArray = GetComponentsInChildren<Text>(true); foreach (Text text in textArray) { text.text = Localization.Get(text.text); } } Dann das selbe noch mit Button. Die Funktion Localization.Get ist eine statische Klasse, die vorher die Textdatei gelesen hat (nur einmal beim Spielstart) und den Inhalt in ein Dictionary<string,string>() speichert aus den geforderten Content zurück gibt.
  25. Hi Wer hat eine Idee, wie man ein Pfeil in einem Bogen auf einen Gegner zu feuern? Ohne Schwerkraft, ohne Collider, ohne Rigidbody oder sonstigen Schnickschnack. Der Pfeil fliegt immer gleich schnell und trifft das Ziel immer.
×