Jump to content
Unity Insider Forum

Thariel

Members
  • Content count

    410
  • Joined

  • Last visited

  • Days Won

    12

Thariel last won the day on February 10 2017

Thariel had the most liked content!

Community Reputation

83 Excellent

About Thariel

  • Rank
    Advanced Member
  • Birthday 11/30/1988

Contact Methods

  • Website URL
    http://www.lost-in-nature.com

Profile Information

  • Gender
    Male
  • Location
    Bern
  • Interests
    Krafttraining, Spieleentwicklung, Studio Fotografie

Recent Profile Visitors

6,861 profile views
  1. 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.
  2. 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.
  3. Thariel

    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
  4. Schau hier: https://docs.unity3d.com/Manual/Tilemap-Hexagonal.html
  5. Kann dir zwar nicht helfen, aber du weisst schon, das Unity 2d Hexagonale Tilemaps mitbringt? GameObject->2D Object->Hexagonal Tilemap
  6. Thariel

    PBR Stone als Terain über Gaia ?

    Wird übrigens hier direkt am Anfang bei 1:12 erklärt:
  7. 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.
  8. 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.
  9. 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!! 😀
  10. Thariel

    FPS Anzeige

    Freut mich, dass es dir gefällt 🙂
  11. 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?
  12. 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")); } }
  13. Thariel

    In Konstruktor "null" zurück geben?

    Okay, danke euch
  14. 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) { } }
  15. 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

×