Jump to content
Unity Insider Forum

Thariel

Members
  • Content Count

    466
  • Joined

  • Last visited

  • Days Won

    18

Everything posted by Thariel

  1. Meinst du ein 3d Balkendiagramm in der "Spielwelt" und jetzt willst du ein UGUI Text über einem Balken fliegen lassen? Das geht ganz einfach, indem du dieses Script auf den UGUI Text legst und das Objekt (dein Balken) als Referenz hinzu fügst. public Transform tObject; void Update() { transform.position = Camera.main.WorldToScreenPoint(tObject.position); }
  2. Hi Ich suche schon länger ein Buch oder eine andere Quelle, die erklärt, wie man selbst Rätsel erfindet. Ich meine damit eine Sammlung von Techniken und Vorgehensweisen, wie man ein Rätsel oder ein bestimmter Rätseltyp erfinden oder wie man vorgeht. So wie ein Spiel über Game Design, aber halt über Rätsel Design. Kennt jemand so ein Buch?
  3. Ich bin ehrlich gesagt sehr neidisch auf die Grafiken, Models und Animationen, die du erstellst. Bei mir ist es nämlich immer genau anders rum, ich bin immer total fortgeschritten mit den technischen Dingen und Spielmechaniken, aber der Inhalt fehlt mir immer und muss ihn mir mühsam zusammen suchen. Wir würden uns sicher gut ergänzen 😂 Musik gibt es sehr viele, würde da nicht extra jemanden dafür bezahlen. Zum Beispiel kannst du dir ein Envato Elements Abo gönnen, dann kannst du schon mal viel SFX und Musik (und auch viel anderes wie PS Pinsel, Web Vorlagen, ...) runterladen. Ansonsten: Weiter so! 😀
  4. Thariel

    Tree

    Ich habe auch die Bäume erst mal als Objekte gesetzt, weil ich sie interaktiv machen wollte, doch das Resultat sind Probleme mit der Performance. Zudem hast du ziemliche Frame Drops, je nach dem, wie viel Bäume die Kamera gerade sieht. Ich empfehle dir die Bäume mit dem Terrain Tool zu setzen und danach kannst du ein Script entwickeln, dass an jede position eines Baumes ein GameObject mit einem Capsule Collider setzt. Die ist dann der Baum, mit dem du interagieren kannst. Du kannst mittlerweile die Bäume per Script sehr gut verändern und drehen. Einfach das Terrain Tool zum platzieren ist nicht so cool. Die Bäume deswegen als einzelne Objekte zu platzieren, würde ich nicht machen.
  5. Hab das Problem nicht heraus gefunden und andere Wasser Shader hatten das selbe Problem. In Vergangenheit ist es auch vorgekommen, dass Wasser Systeme nach Updates einfach plötzlich nicht mehr funktionieren oder "Deprecated" werden. Deshalb hab ich mir den Amplify Shader Editor geholt und mir mein eigenes Wasser mit Unterwasser Effekt erstellt. Hat etwa 3 Tage arbeit gekostet, aber jetzt ist es genau so, wie ich es haben möchte und bin sehr glücklich mit dem Resultat.
  6. Thariel

    function call

    Du verarschst uns doch 😁 Oder du bist Lehrer und planst eine Projektwoche und bist im falschen Film gelandet 😆 Da weiss ich leider auch nicht, wie du deine Klasse in andere Projekte integrierst.
  7. Thariel

    function call

    Zum Beispiel so: //irgend ein script public class WndMarkers : MonoBehaviour { public static WndMarkers singleton { get; private set; } void Awake() { if (singleton == null) singleton = this; } public void MeineFunktion() { Debug.Log("Es funktioniert!"); } } Jetzt kannst du die Funktion im Editor Script und auch von überall sonst aufrufen: WndMarkers.singleton.MeineFunktion();
  8. Das komische ist ja, dass sich der Effekt auf die absoluten Y Koordinaten der Kamera beschränkt. Wenn ich mit der Kamera nach oben schaue, dann siehst du was ich meine. Habe hier übrigens eine ganz neue Kamera erstellt und nur das notwendigste hinzugefügt.
  9. Ne das ist halt ein dungeon crawler mit tiles, bestehend aus einzelnen Wänden, Pfosten und Böden. Das Wasser ist Aquas und ist rund und gross skaliert. Das Problem entsteht auch mit anderen Systemen wie Lux Water. An den steilen Wänden verzerren sich die Effekte des Caustic Projectors, da muss ich mir auch noch was einfallen lassen... aber alles der Reihe nach 😁 Hast du denn eine Idee, was das Problem sein könnte?
  10. Hi Ich hab ein kurioses Problem und finde einfach keine Hilfe oder auch nur jemand der ein ähnliches Problem hat. Alle Image Effects die ich auf die Kamera lege, sind nur auf der oberen Hälfte zu sehen. Das passiert bei allen Image Effekte. Hab gerade verschiedene Wassersysteme ausprobiert und bei jedem Unterwasser Effekt das selbe. Egal wie tief die Kamera im Wasser ist. Wenn ich die Kamera nach oben/unten drehe, bleibt der Effekt auf der Höhe der Kamera (Y=0). Hat irgendwer eine Idee?! 😨
  11. Macht schon mal einen guten ersten Eindruck 😀 Ich weiss nicht ob die Musik im Spiel oder nur im Video ist, aber sie ist ziemlich dominant und verschluckt die kleinen Umgebungsgeräusche. Könnte mir vorstellen, dass man sich mit weniger oder gar keiner Musik, viel besser in die Katze hineinversetzen kann, wenn die Sound Effekte der Umgebung reichhaltig sind. Könntest ja eine Funktion "Lauschen" machen und dann hört man weiter entfernte Objekte. So wie ein radar um Dinge zu finden.
  12. Hi Hat jemand eine Idee, wie ich die Kette am besten in Maya "im ganzen" Biegen kann, ohne jedes einzelne Glied positionieren zu müssen? Möchte die Kette über das Rad legen... Danke schon mal
  13. Das ist nicht skalieren was du da machst Du erstellst lediglich ein neues kleineres Bild mit dem Ausschnitt eines grösseren. Schau dir mal Texture2D.Resize an, war aber mit dem Ergebnis nie wirklich zufrieden. Wenn du etwas recherchierst findest du auch viele Snippets die du nutzen kannst. Aber eigentlich brauchst du das Bild ja nicht zu skalieren, du kannst es einfach im Image kleiner darstellen und wenn du ein Aspect Ratio Fitter hinzufügst, hast du alles was du brauchst
  14. Warum skalieren? Weil du ein paar KB sparen willst? 😁 Ich speichere es einfach ab und stelle es verkleinert dar (Image). Dann geht das Speichern auch etwas schneller. Du kannst dir ja mal dieses Asset anschauen. Ist kostenlos und hab ich mir auch gerade geholt zum testen. Scheint nice zu sein. Kannst du auch extrem hochauflösende Screenshots machen (4K, 8K, ...). https://assetstore.unity.com/packages/tools/instant-screenshot-24122
  15. Achso, stimmt. Ich packe meine immer in den Streaming Assets Ordner, damit sie offen liegen
  16. Doch, aber das ist ein grosser Vorteil. So kann die Community selbst Übersetzungen erstellen und das Spiel wird so modifizierbar. Du kannst auch viel einfacher Fehler korrigieren ohne gleich das Spiel neu zu builden (wie @MaZy oben erwähnt hat).
  17. Nunja, im Endeffekt macht sein script nichts anderes als einfach linear Text auszugeben. Da kann ich auch einfach ein Textfile erstellen und abwechselnd in einem Fenster anzeigen. Mein System kann verschiedene Positionen im Gespräch zwischenspeichern, Optionen nach Bedingungen anzeigen und ein völlig freier Gesprächsverlauf ausgeben. Ist nur mühsam das File zu schreiben. Wenn du mal dem Gesprächsverlauf folgst, dann siehst du, dass es ein ganzer Dialog mit einer Quest ist, die man abschliessen kann. Genau so könnte es auch in einem RPG wie Gothic ablaufen. In den nächsten Tagen wird das Tema für mich sehr aktuell, sobald ich die NPC AI fertig habe. Dann werde ich schauen, wie ich es diesmal angehen werde. Die Herausforderung ist vor allem: Die Gespräche laufen nicht linear ab, sondern in Schlaufen mit verschiedenen "Levels". Das geht fast nur mit einem Node-Basiertem System. Aber ich brauche die Dialoge eigentlich nur für die Intro Sequenz, deshalb werde ich da was einfaches bauen. Es gibt auch Dialog Editore. Vielleicht findest du ja einen guten und man könnte das exportierte XML File einfach in Unity interpretieren
  18. Thariel

    Fight!

    Ob ein Angriff statt findet, weiss das Enemy erst, wenn Schaden ausgeteilt wird. Der Spieler könnte sich ja kurz vor dem Hit noch wegdrehen. Aber du könntest auch ein "Kampfmodus" machen: Der Spieler wechselt in den Kampfmodus mit [TAB] und kann mit Maustasten angreifen. Andere Tiere erkennen von weitem, dass eine Bedrohung auftaucht. Der Spieler (ist ja ein Tier), bewegt sich vielleicht anders und knurrt bisschen. Der Vorteil ist, dass der Spieler wieder den Kampfmodus verlassen kann und die Maustasten kannst du dann für andere Aktionen brauchen wie Sammeln, Buddeln, Looten etc...
  19. Thariel

    Fight!

    Ich mache das immer mit Raycasts. Wenn ein Angriff gestartet wird, starte ich ein Timer, der den Schadens-Raycast genau dann startet, wenn die Hit Animation ihren Höhepunkt hat. Ich sorge immer dafür, dass die Angriffs-Animationen (First Person) immer direkt durch die Mitte des Bildschirms (Fadenkreuz) gehen und auch der Raycast geht einfach von der Kamera richtung Vector3.forward. Die glaube die Collider-Idee ist etwas umständlicher. Da musst du auf viel mehr achten. Beim Raycast machst einfach eine simple, Zeit verzögerte abfrage. Ich hab dann ein Damage-Interface gemacht. Wenn der Hit Collider ein GetCompont<IDamage>() hat, einfach Damage austeilen. PS: Da hat Sascha recht, meistens wird da von Anfänger völlig übertrieben mit "Realismus". Der Spieler erwartet kein echter Realismus und wirklich realistische Spiele wären total Langweilig.
  20. Jetzt hab ichs raus gefunden! Type[] arguments = prop.GetValue(obj).GetType().GetGenericArguments(); Type keyType = arguments[0]; Type valueType = arguments[1]; Type dictType = typeof(Dictionary<,>).MakeGenericType(keyType, valueType); var dict = Activator.CreateInstance(dictType);
  21. Bei mir hat das immer funktioniert. Ich schätze mal, dass etwas in deinem Script oder so nicht funktioniert. Ich rate dir mal ein ganz neues Projekt zu erstellen und es einfach zu testen. Hilfreich wäre es, wenn du etwas mehr Infos gibst, zum Beispiel bisschen Code. Lädst du kurz vorher die Szene neu?
  22. Hi Ich entwickle gerade eine Klasse, um beliebige Objekte in XML und wieder zurück zu konvertieren. Ist alles ziemlich schwierig 😮 Jetzt versuche ich gerade, aus dem XML das Dictionary "stats" wiederherzustellen. <?xml version="1.0" encoding="utf-8"?> <XmlTest> <health>10</health> <speed>3.5</speed> <isDeath>false</isDeath> <stats> <!--Dictionary--> <row> <key>strength</key> <value>5</value> </row> <row> <key>armor</key> <value>0</value> </row> </stats> </XmlTest> Das XElement "stats" übergebe ich also meiner Funktion: public static void GetDictionaryFromXElement(XElement elDictionary, object obj, PropertyInfo prop) { var dict = (IDictionary)Activator.CreateInstance(prop.GetType()); foreach (XElement elRow in elDictionary.Elements()) { object key; if (dict.Keys.GetType() == typeof(int)) { string sValue = elRow.Element("key").Value; int i = 0; int.TryParse(sValue, out i); key = i; } else Debug.LogError("Variable type not handled: " + prop.PropertyType); /// hier ein teil ausgeschnitten um das script kürzer zu halten dict.Add(key, value); } prop.SetValue(obj, dict); } Jetzt habe ich das Problem, dass dict.Keys.GetType() nicht den typ des "Keys" zurück gibt, sondern "System.Collections.Generic.Dictionary`2[System.String,System.String]". Trotz Suche habe nicht nicht herausgefunden, wie ich das Dictionary füllen kann, ohne vorher den Datentyp zu kennen. Ich müsste einfach den Datentyp des "Key" und des "Value" Wertes wissen, damit ich das ganze abarbeiten kann. Wer kann mir da helfen?
  23. Hi Ich kenne mich mit ScriptableObjects nicht aus, aber ich habe ein einfaches Dialog System entwickelt. Dazu habe ich einfach ein LUA File (XML würde auch gehen) verwendet. Darin habe ich verschiedene "Stages" definiert. Jede stage enthält entweder Informationen, was der Npc sagt oder Auswahlmöglichkeiten, die der Spieler Antworten kann. Die Variable "nextStage" gibt an, welche Stage als nächstes kommt (wieder NPC sagt was oder Spieler antwortet was). Dazu habe ich noch eine "requirements" Variable bei den Antwortmöglichkeiten gemacht. Die Antwort erscheint also nur, wenn der Spieler die "requirements" erfüllt... zum Beispiel ein bestimmter Gegenstand im Inventar hat. Ist leider ziemlich kompliziert die Datei zu schreiben. Wenn du ein System entwickeln willst, um die Dialoge auf komfortable Art zu designen, wäre ich sehr interessiert 🙂 So sieht so eine Datei aus: defineDialog { id = "sailorfrank", name = "Frank", startStageId = "s0", autoStartRadius = 0, stages = { s0 = { say = { speaker = "npc", text = "Warum nur immer ich?", audio = "", actions = nil, nextStage = "s1" }, options = nil }, s1 = { say = nil, options = { option1 = { text = "Was ist los?", requirements = nil, actions = nil, nextStage = "s2" }, option2 = { text = "Ich muss weiter.", requirements = nil, actions = nil, nextStage = "" } } }, s2 = { say = { speaker = "npc", text = "Jemand hat meine Schuhe geklaut! Gestern hatte ich sie noch.", audio = "", actions = nil, nextStage = "s3" }, options = nil }, s3 = { say = { speaker = "npc", text = "Es sind ganz normale Schiffsstiefel.", audio = "", actions = nil, nextStage = "s4" }, options = nil }, s4 = { say = nil, options = { option1 = { text = "Wenn ich sie sehe, werde ich bescheid geben.", requirements = nil, actions = { SetStage = "s6" }, nextStage = "s5" }, option2 = { text = "Viel Glück!", requirements = nil, actions = nil, nextStage = "" } } }, s5 = { say = { speaker = "npc", text = "Das wäre super!", audio = "", actions = nil, nextStage = "" }, options = nil }, s6 = { say = nil, options = { option1 = { text = "Wegen deinen Stiefeln...", requirements = nil, actions = nil, nextStage = "s7" }, option2 = { text = "Ich gehe jetzt.", requirements = nil, actions = nil, nextStage = "" } } }, s7 = { say = { speaker = "npc", text = "Ja?", audio = "", actions = nil, nextStage = "s8" }, options = nil }, s8 = { say = nil, options = { option1 = { text = "Ich habe sie gefunden. Hier sind sie.", requirements = { InventoryContainsItem = "BOOTS=1" }, actions = nil, nextStage = "s10" }, option2 = { text = "Noch nichts neues.", requirements = { InventoryNotContainsItem = "BOOTS=1" }, actions = nil, nextStage = "s9" } } }, s9 = { say = { speaker = "npc", text = "Dann such weiter, ok?", audio = "", actions = nil, nextStage = "s6" }, options = nil }, s10 = { say = { speaker = "npc", text = "Das war echt nett von dir! Vielen Dank!", audio = "", actions = { SetStage = "s11" }, nextStage = "" }, options = nil }, s11 = { say = { speaker = "npc", text = "Hey! Danke nochmals, dass du meine Stiefel gefunden hast!", audio = "", actions = nil, nextStage = "" }, options = nil } } }
  24. Indem du die Ausgabe formatierst. Zum Beispiel so: string datum = dateTime.ToString("dd.MM.yyyy"); Da gibt es sehr viele Möglichkeiten.
  25. Thariel

    Iso Cammera.

    Ich würde es so machen: using UnityEngine; using System.Collections; public class CameraController : MonoBehaviour { public Transform player; public float speed = 5.0F; public Vector3 offset = new Vector3(0, 5, 0); void Update () { transform.position = Vector3.Lerp(transform.position, player.transform.position, speed * Time.deltaTime) + offset; } } Jetzt das Script auf die Kamera legen und den Player auf den Slot ziehen. Jetzt verfolgt die Kamera den Player in einer flüssigen Bewegung.
×
×
  • Create New...