Jump to content
Unity Insider Forum

malzbie

Moderators
  • Content Count

    4,967
  • Joined

  • Last visited

  • Days Won

    320

malzbie last won the day on June 10

malzbie had the most liked content!

Community Reputation

1,506 Excellent

2 Followers

About malzbie

  • Rank
    Moderator
  • Birthday 10/30/1968

Profile Information

  • Gender
    Male
  • Location
    Kassel, Hessen, Deutschland

Recent Profile Visitors

18,500 profile views
  1. Hi! Alle 3 Unity-Lizenstypen sind eigentlich identisch und somit kann jeder Typ auch jedes Projekt öffnen. Das Hauptmerkmal, was den Unterschied der Lizensen ausmacht, ist euer Einkommen. Wenn ihr mehr als 100.000€ im Jahr verdient, dürft ihr keine Personal Version mehr nutzen. Sobald euer Einkommen über 200.000€ im Jahr liegt, dürft ihr keine Plus Version mehr benutzen und müsst dann zur Pro upgraden. Nutzt ihr die Personal Version, dann habt ihr nach dem Build des Spiels automatisch einen Unity Splashscreen, den ihr nicht ausschalten könnt. Erst ab der Plus, könnt ihr den Screen umgehen. Was ihr niemals dürft, ist ein Mischen der Lizenstypen. Denn mit jeder höheren Version bekommt ihr auch mehr Service von Unity. Was da genau alles drin ist und ob ihr den Service braucht, könnt ihr im Store ja erfahren. https://store.unity.com/ Ihr müsst also alle mit der gleichen UnityVersion arbeiten und wenn ihr z.B. die Plus oder Pro benötigt, dann haben alle Teammitglieder diese zu nutzen. So sind jedenfalls die Regeln von Unity, denn die wollen natürlich auch etwas verdienen, wenn ihr etwas verdient.
  2. Dann ist FogOfWarMap Also eine TileMap Klasse?! Egal. Das habe ich im Netz gefunden: Scheinbar sind die Tiles per default so eingestellt, dass du sie nicht mit neuer Farbe versehen kannst. Also musst du das erstmal im Inspector ändern.
  3. Zeig doch mal, was da drin passiert: FogOfWarMap.SetColor
  4. Ja, er compiliert alle Scripts, wenn du auch nur eines änderst. Ist halt so. Aber im Spiel kommt halt nix. Du kannst der Console übrigens auch sagen, dass Meldungen nicht nicht sichtbar sein sollen. Musst dafür nur das mittlere Symbol ausklicken. Du kannst außerdem das const Schlüsselwort verwenden, wenn dieses MaxHealth sich nie ändern wird. Das könnte bei dem einen Dingen die Meldung verhindern.
  5. Das sind ja keine Fehlermeldunge, denn dann wären sie rot. Das sind Hinweise, die immer dann kommen, wenn die Variable private ist. Das System erkennt halt, dass du eine Variable deklariert hast, die aber eigentlich für nix nütze ist. Das wäre bei public variablen zwar nicht anders, aber da das System nicht weiß ob evtl. von einem anderen Script aus etwas damit geschieht, kommt dann eben keine Meldung. So ganz intelligent ist die Meldung nicht, weil sie sowas wie SetActive nicht erkennt. Aber in deinem anderen Beispiel ist maxHealth, wenn du es wirklich nur in der Start zur Übergabe eines Wertes nutzt, auch wirklich sinnlos. Da kannst du auch gleich currentHealth mit dem richtigen Wert beschreiben. Ob man das abschalten kann, weiss ich nicht. Aber selbst wenn nicht, die Meldungen kommen nur, wenn du ein Script bearbeitet hast und dann abspeicherst. Dabei werden all diese Dinge einmal überprüft und dir dann evtl. angezeigt. Danach kommt keine Meldung mehr. Die Meldung macht auch Sinn, da sie dir zu 95% dabei hilft Codeleichen zu entdecken.
  6. Ne, das musst du natürlich nicht. Solch eine Datei kann theoretisch alle Dialoge drin haben. Die Sache ist nur, dass du den Bereich finden musst, den du ändern willst. Ich persönlich würde für jeden einzelnen Charakter eine eigene Datei anlegen, die alle Diealogtexte dieses Charakters drin hat. Und das für jede weitere Sprache nocheinmal. Natürlich können auch alle Sprachen in einer Datei drin sein. Aber so eine Datei wird dann immer unübersichtlicher. So etwa sieht eine JSON Datei aus: {"Q0Z0B":"Guten Tag, der Herr!","Q0Z0P":"Das wäre schön.","Q0Z0N":"Das gefällt mir gar nicht","Q0Z0Q":"Bring bitte den Sack zum Bäcker","Q0Z0V":"Auf wiedersehen!","Q1Z1B":"und so weiter",.......} Du hast immer ein Schlüsselwort (hier Q0Z0irgendwas) in Anführungszeichen, gefolgt von einem Doppelpunkt und dann den Wert dazu. Dann kommt ein Komma und das nächste Datenpaar folgt. Das könnte ewig so weitergehen und vorallem kann der Wert bei einem String auch eine ganze Buchseite lang sein. Da in einer JSON Datei einfach nur eine einzige Textzeile ist, kann man alles ganz einfach per Texteditor editieren. Aber das ist mühsam. Deswegen empfehlt sich ein Hilfstool. Einfach etwas bei dem ich nach Schlüsselwörtern suchen kann und dann den Wert dazu angezeigt bekomme, damit ich dort Änderungen vornehmen kann und das ganze wieder abspeichere. Das Tool sollte natürlich auch in der Lage sein neue Datensätze anzulegen.
  7. @Sascha Falls du mich mich damit meinst : dann habe ich mich da missverständlich ausgedrückt. Ich bezog mich lediglich auf Dialogsysteme. Es gibt einen Haufen Assets die gut sind, weil sie einem Arbeit abnehmen. Aber Dialogsysteme oder auch Inventar Assets gehören, meiner Meinung nach, nicht dazu.
  8. Ist ganz klar: In deiner Fehlermeldung steht ja (frei übersetzt), dass in der FixedUpdate in Zeile 24 etwas mit einem Objekt gemacht werden soll, welches aber nicht bekannt ist. Das gewünschte Objekt ist der controller. Diese Variable sollte ja eigentlich mit einem CharacterController2D verknüpft sein. Ist er aber nicht! Da du die Verknüpfung nicht über Code erstellst, musst du per Hand den gewünschten CharacterController auf den Varaiblen Slot fallen lassen. Erst dann weiß der Code, für welches Objekt die controller Variable eigentlich steht und erst dann kann sie auf dem Objekt auch erst die Move Funktion aufrufen.
  9. Freut mich, wenn ich dir ein paar Ansätze liefern konnte. Ich selber habe noch kein richtiges Dialogsystem gebaut, weil ich es bis jetzt noch nicht gebraucht habe. Aber wie bei fast allen Dingen, die man in Spielen so sieht, versuche ich immer herauszufinden wie dieses Ding wohl gemacht wurde. Ja, und dann Teste ich das ein wenig, ohne jetzt wirklich damit etwas tun zu wollen. Was ich dir noch empfehlen würde: Ein kleines Editor-Programm schreiben, was alle deine Textelemente als JSON-Datei abspeichert. Und in dem du die Texte auch bearbeiten kannst. Denn man kann so eine Datei zwar einfach mit nem Texteditor anschauen und bearbeiten, aber es ist schon recht mühsam, darin dann die richtige Stelle zu finden, wenn du mal was korrigieren willst. Bei meinen Flippern mache ich das auch alles per Hand, weil da ja nicht soo viele Texte drin sind, aber inzwischen, beim 9ten Flipper, wird es echt nervig.
  10. Du kannst auch bei den Importeinstellungen vom Mesh einen Skalierungsfaktor angeben und immer wieder ändern. Nur mal so angemerkt.
  11. Wie du ja selber erkannt hast, macht es nicht viel Sinn, ein vorgefertigtes Asset zu nutzen. Fehler in der Assetprogrammierung mal ausgenommen, wirst du nie die Dinge bekommen die dein Spiel braucht. Also selber schreiben! Da du die Story deines Spiels kennen solltest, solltest du auch alle Dialogelemente der einzelnen Charaktäre kennen. Du solltest auch wissen, bei welchen Bedingungen die Charaktäre welche Texte sagen können. Das gilt genauso für die Texte des Players. Das Wort Charakter sagt ja schon alles! Je nach Spiel muss man sich das Vertrauen oder Wohlwollen eines Charakters erst erarbeiten. Das kann über die richtige Frage oder Antwort geschehen. Das kann auch über erledigte / nicht erledigte Aufgaben geschehen. Bei komplexen Spielen, kann die Freundschaft zum Char A das Gegenteil beim Char B verursachen. Damit das funktioniert musst du für jeden Char einen Status der Beziehung zueinander speichern. Über diesen Staus (können durchaus auch 2 oder noch mehr Werte sein) steuerst du die Frage/Antwortmöglichkeiten. Das bedeutet, dass du die Charaktäre , wie ein Geschichtenschreiber, vorher definiert haben musst. Ja und dann weißt du ja welche Antworten / Informationen dieser Char dir geben kann. Für jeden Status definierst du jetzt die Texte, die im Spiel dann in einer Liste oder einem Dictionary pro Charakter gespeichert sein werden. Über den Status kannst du in der Liste direkt auf die nötigen Texte zugreifen. Diese Texte solltest du als JSON oder XML oder von mir aus auch nur als Textdatei gespeichert haben, die dann im Spiel eingeladen wird und der Liste bzw. dem Dictionary zugewiesen wird. Für jede Sprache hast du eine eigene Datei und je nach Spracheinstellung im Spiel wird dann einfach die entsprechende Datei eingelesen. Wie du das jetzt darstellest, also ob du mit Butons arbeitest oder die Texte mit nem Klick auswählst, ist Nebensache. Die Darstellung ist niemals ein Element eines Dialogsystems. Das Dialogsystem gibt nur Texte aus (und selbst wenn mehrere Antwortmöglichkeiten da sind, sind das ja auch nur Texte) , die anhand des Spielfortschritts, also eines oder mehrerer Parameter, ausgewählt werden. Natürlich musst du die Auswahl der Textelemente auswerten. Je nach Antwort muss du in einen anderen Bereich springen. Hast du mehrere Frage- Antwortoptionen, so verändern diese einfach nur den oder die Parameter. Das Ändern ist aber eine Sache eines anderen Bereiches, also eine Spielelogik Skriptes. Denn es muss ja nicht nur eine Frage oder Antwort zu einen gewissen Dialog führen, sondern auch eine erledigte Mission oder auch ein Gegenstand im Inventar. Beispiel: Char 1 weiß etwas Wichtiges, mag dich aber nicht und gibt dir ersteinmal nur ne standard Antwort. Möglicher Parameter könnte Zuneigungswert sein, der jetzt noch auf 0 steht. Der Player hat für diesen Char erstmal nur 2 Dialogmöglichkeiten. Ein "Hallo, wie geht's" und ein " Bis später!" Denn der Char weist ihn mit der Begrüßung gleich zurück. Char 2 hat von Anfang an einen Zuneigungswert von 1. Der Player kann mit ihm ein Dialog starten bei dem er freundlich sein kann oder eben abwertend. Je nachdem, was er sagt, bekommt er eine entsprechende Antwort und neue Dialogmöglichkeiten. Außerdem ändert sich der Zuneigungswert positiv oder negativ. Es würde jetzt also mit einem "Hallo, wie geht's?" anfangen. Dieses ist noch neutral zu bewerten. Die Antwort wäre jetzt: "Nett, dass du fragst....". Also nächste Dialogsequenz käme jetzt eine positive Antwortmöglichkeit auf die "Nett, dass du fragst.."-Sache, oder eine Negative. Hier würde sich auch der Zuneigungswert verändern. Bei der positiven Entscheidung würde nach einer Antwort des Chars eine weitere Dialogsequenz kommen. Bei einer negativen Entscheidung wäre der Dialog mit einer verärgerten Antwort des Chars ersteinmal zuende. Ob und wie sich der Zuneigungswert dieses Chars wieder ins Positive ändert ist dann eben vom Spiel abhänig. Könnte sein, dass dieser Char einen Cooldown hat und von alleine wieder eine positive Einstellung zu dir bekommt. Wenn du dich aber Positiv geäußert hättest, würdest du im weiteren Dialog erfahren, dass der Char1 unheimlich gerne Äpfel isst. Du sammelst also einen Apfel ein und bekommst beim Char1 jetzt eine Dialogmöglichkeit, den Apfel im anzubieten (abhängig davon, ob den Apfel im Inventar hast). Dieses Würde die Zuneigung vom Char1 erhöhen und eine weitere Dialogsequenz würde erscheinen, bei der du die wichtige Information bekommen würdest. Du hast also Textbausteine für Begrüßung (was auch ein PositiverDialog ist, wo aber einfach nur weiter gesprungen würde) , Verabschiedung, Positiver-Dialog, Negativer-Dialog und Quest. Jeder dieser Bereiche springt in eine entsprechende Funktion. Ja und welche Parameter brauchst du jetzt? In meinem Beispiel eigentlich nur 2. Jeder Char hat einen Zuneigungswert zum Player. Dadurch steuerst du wie die Dialoge ablaufen. Jeder Char hat einen Questwert zum Player. Dadurch steuerst du die Quests oder Hints die dir gegeben werden. Sachen, die erledigt sind sollen ja nich nocheinmal kommen. Und wenn Sachen noch nicht erledigt sind, soll die Antwort entsprechend sein. Die Spielelogik weiß, welche Gegenstände oder erledigte Quests für welchen Char wichtig sind und erhöht diesen Questwert natürlich in Abhängigkeit ob dieses Quest nicht schon einmal erledigt wurde. Deine Texte für den Char und auch für den Player kannst du also mit einer Kombination aus Buchstaben und Zahlen zusammenbauen. Q0Z0 Wären die Texte des Char1 bei der ersten Begegnung. Wobei Q jetzt gar nicht ausgewertet wird. Q1Z0 wären die Texte sobald du einen Apfel hast. Übergibst du den Apfen, würde sich Z erhöhen. Jetzt kämen Dialogtexte von Q1Z1 wo du einen Auftrag annehmen kannst. Tust du es, erhöht sich Q. Tust du es nicht, bleibt alles wie es ist, es sei denn, du beleidigts ihn. Dann würde sich Z verringern und du müsstest ihm ersteinmal wieder einen Apfel bringen um wieder in Dialog zu kommen. Q2Z1 wäre jetzt da, wenn du den Auftrag angenommen hast. Würdest du jetzt mit dem Char sprechen, würde er dich nach dem Auftrag fragen und du könntest das nur verneinen. Q3Z1 wären die Dialoge wenn du den Auftrag erledigt hast und es ihm mitteilen willst. Nachdem du es ihm mitgeteilt hast, würde sich Q und Z erhöhen. Die Zuneigung ist jetzt so hoch, dass du ihn nicht mehr verärgern kannst. Q4Z2 wäre für diesen Char jetzt das Ende. Er hat nichts mehr für dich, ist aber jetzt dein Freund. Die Texte dieser Bereiche wären dann natürlich auch unterschieden. B - Begrüßung, P - positiver Dialog, N - negativer Dialog, Q - Quest, V- Verabschiedung. Je nachdem, ob ein Text dafür da ist, würde das Textfeld auch angezeigt werden, ansonsten ist das Feld nicht da. Das Ganze kann man natürlich noch viel mehr verschachteln, wenn man will. Aber es wird dann auch recht komplex. Wie du in meinem Beispiel siehst, ist das aber eigentlich gar nicht so schwer. Es muss jedoch für ein Spiel angepasst sein, deswegen funktionieren fremde Assets nur bedingt.
  12. Hast du das auch wirklich so gemacht, wie der Sascha es geschrieben hat? Einem GameObjekt untergeordnet und dann das Vaterobjeket auf 1,1,0 skaliert???
  13. Zu deinem Animationsproblem kann ich nicht viel sagen, denn es können viele Dinge sein, die das verursachen. Könnte z.B. daran liegen, dass du bei deiner Animation eine Überblendung drin hast, oder dass die Animation zu wenig Keyframes hat. Ich backe meine Animationen gerne so, dass jedes Frame auch ein Key gesetzt ist. Ich arbeite aber in Cinema4d und kann zu Blender nichts sagen. Was meinst du mit verbrauchen? Performance? Das is unity egal. Wenn du natürlich nur einen Teil der Animation nutzt, verbrauchst du ein klitze kleines Bisschen mehr Plattenplatz, als du eigentlich müsstet. Aber das kannst du auch ignorieren, denn es ist nur wenig.
  14. Willkommen! Also eigentlich ist das ein Designfrage. Denn wie du ja selber schon erkannt hast, gibt es Spiele, bei denen alles gemalt ist, und Andere, die aus Tiles zusammen gebaut werden. Es gibt auch vieles dazwischen. Ein gemaltes Leveldesign hat natürlich den Vorteil, dass es extrem organisch wirkt und auch sehr schön sein kann. Der Nachteil dabei ist der Aufwand, den du betreiben musst. So etwas zu malen dauert unheimlich lange und dann musst du trotzdem manuell noch die ganzen Collider in die Szene setzen. Eine Leveldesign aus Tiles ist relativ schnell erstellt, denn du machst einfach Blöcke, die du aneinander legst. Diese Blöcke können schon gleich einen Collider mit bei haben und somit ist ein Level schnell gebaut. Aber selbst wenn man die Tiles so gut erstellt, dass man keine Übergänge sehen kann, erkennt man doch meistens das Wiederholen eines Musters. Das ist der Nachteil bei Tiles. Jetzt gibt es aber noch die Möglichkeit, die Tiles duch eine davor liegende Ebene aufzuhübschen und die Grafikwiederholungen zu maskieren. Aber dann erhöht sich auch schon wieder die Zeit der Levelerstellung. Fazit: Am schnellen geht es mit Tiles und die bieten sich an, wenn du viele Level erstellen wills. Am schönsten wird es wahrscheinlich mit gemalten Leveln sein. Aber da das viel Zeit kostet, wirst du wahrscheinlich nur wenige Level haben. Somit liegt es an dir!
  15. Also wenn ich den Vertrag sehe, dann bist du nur wegen deiner Verbindung bei denen, mietest dort also keinen Server oder Serverbereich. Ja dann macht das eigentlich nix. Es ist vom Gesetzgeber vor einiger Zeit untersagt worden, bei einer Faltrate die Datenmengen zu berücksichtigen. Wenn ich (und meine Familie) über Netflix oder Amazon Filme/Serien angucke(n), kommen auch mehrere hundert GB zusammen. Ob das nun gesendet oder empfangen ist, ist technisch gesehen egal. Ich würde mir da keinen Kopp machen.
×
×
  • Create New...