Ron Dragor Geschrieben 20. Dezember 2011 Melden Share Geschrieben 20. Dezember 2011 Das ist auch der Titel meines ersten Buches. Eine Leseprobe gibt es kostenlos über meine Homepage: http://www.mysteria-arts.de Da könnt ihr euch auch in die Geschichte etwas einlesen. Nun habe ich lange Zeit nach einer geeigneten Engine gesucht, und bin bei Unity gelandet. Erster Versuch war mit UDK. Damit kam ich jedoch nicht klar. Mit den Tuts vom Softwareentwicklerblog konnte ich nach 3 Tagen mehr machen, als mit UDK nach 2 Wochen! Geplant ist eine nahezu 1:1 Umsetzung zum Buch. Benutzte Software: Unity 3 Photoshop MAYA Sculptris Mudbox Motion Builder Terragen 2 Realflow Endorphin Nun. Es ist derzeit ein Einmannprojekt. Das Einarbeiten in diese Programme hat schon ein paar Jahre gedauert. Mein erstes MAYA 3D-Modell entstand 2004. Hilfe ist daher sehr willkommen. Das Spiel soll irgendwann ja auch mal auf den Markt. Ich stecke derzeit etwas fest und möchte hier um Rat fragen: Ich habe ein Charakter-Menue erstellt und das Inventar selbst ist ein Scrolldown menue. Nun bin ich am überlegen, wie ich das Ganze am besten löse. Derzeit habe ich das Menue für jeden Charakter in einem eigenen Script erstellt. Die Frage ist nun, wie ich das bei einem Stufenanstieg regeln soll. Der ist in einem eigenen Script. So kann ich aber die Charawerte, die im Scrolldownmenue stehen nicht so einfach ändern. Deshalb habe ich überlegt, ein Mastermenue tu machen, in dem ich alle feste stehenden Anzeigen unterbringe, und das Scroll-Down in ein separates Script packe. Macht das Sinn? Ein Charaktermenue-Script hat immerhin schon über 3200 Zeilen. Das wird irgendwann zu unübersichtlich. Hier mal 2 Screenshots: Menue mit den Charawerten: Menue mit Inventar: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
damuddamc Geschrieben 20. Dezember 2011 Melden Share Geschrieben 20. Dezember 2011 Du hast für jeden Charakter das Menü extra geschrieben? Wieso machst du sowas für was gibt es denn Vererbung und Objektorientierung... Wenns so sein sollt empfhele ich dir dein gesamtes Charakter System so um zu schreiben das du nur ein Menü brauchst und lediglich jeweils die Werte des Charakters um den es sich dreht aus diesem ausliest! Bei Fragen helfe ich gern! Gruß Stephan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ron Dragor Geschrieben 20. Dezember 2011 Autor Melden Share Geschrieben 20. Dezember 2011 So hab ich mir das auch gedacht. Ich hab das erste Charaktermenue erstellt, auch um das GUI-Design aufzubauen. Für die anderen Charas war das dann nicht viel arbeit. Einfach kopieren. Jetzt hab ich ein Blanko "Master Menue" erstellt. in diesem will ich dann die Werte der Charas einlesen. Das mit der Vererbung kanns Du mir gerne mal erklären. Denn nach meinem bisherigen Wissenstand müsste ich dann die Werte der Charas in einer If, oder While Schleife einlesen. So nach dem Motto: if (Mortac_ist_angewählt) .... Bzw, mit Case. Aber bei 100 spezifischen Charawerten und 26 Charas ist das eine menge Arbeit... Ich habe für den Spielbeginn für jeden Charakter ein Basic-Script: Basic_Mortac.js: var NEU : boolean; function Update () { NEU = Menue.NEU; //Charaktervariablen von Mortac // Basics PlayerPrefs.SetString("Name_01", "Mortac"); PlayerPrefs.SetString("Race_01", "Caldobaraner"); PlayerPrefs.SetString("Class_01", "Wissenschaftler"); PlayerPrefs.SetInt("Level_01", 1); PlayerPrefs.SetInt("LE_01", 50); PlayerPrefs.SetInt("LEMAX_01", 50); PlayerPrefs.SetInt("AE_01", 0); PlayerPrefs.SetInt("AEMAX_01", 0); PlayerPrefs.SetInt("LP_01", 0); PlayerPrefs.SetInt("EXP_01", 0); PlayerPrefs.SetInt("WST_01", 0); PlayerPrefs.SetInt("MST_01", 0); PlayerPrefs.SetInt("RS_01", 3); // Eigenschaften // Positive PlayerPrefs.SetInt("MU_01", 8); PlayerPrefs.SetInt("KL_01", 19); PlayerPrefs.SetInt("KK_01", 25); PlayerPrefs.SetInt("CH_01", 8); PlayerPrefs.SetInt("GE_01", 3); PlayerPrefs.SetInt("RE_01", 9); PlayerPrefs.SetInt("SN_01", 10); PlayerPrefs.SetInt("FF_01", 16); PlayerPrefs.SetInt("IN_01", 15); PlayerPrefs.SetInt("ER_01", 20); // Negative PlayerPrefs.SetInt("BL_01", 3); PlayerPrefs.SetInt("AG_01", 2); PlayerPrefs.SetInt("AN_01", 5); PlayerPrefs.SetInt("HA_01", 1); PlayerPrefs.SetInt("HL_01", 4); PlayerPrefs.SetInt("AR_01", 6); PlayerPrefs.SetInt("GG_01", 1); PlayerPrefs.SetInt("GW_01", 2); PlayerPrefs.SetInt("JZ_01", 2); // Berechnung des Ausdauer Basiswert: var AU : int; var KK : int; var LE : int; KK = PlayerPrefs.GetInt("KK_01"); LE = PlayerPrefs.GetInt("LE_01"); AU = LE + KK; PlayerPrefs.SetInt("AUMAX_01", AU); // Fertigkeiten // Körperliche PlayerPrefs.SetInt("Klettern_01", 5); PlayerPrefs.SetInt("Reiten_01", 3); PlayerPrefs.SetInt("FahrzeugLenken_01", 10); PlayerPrefs.SetInt("Schleichen_01", 8); PlayerPrefs.SetInt("Schwimmen_01", 6); PlayerPrefs.SetInt("Springen_01", 7); PlayerPrefs.SetInt("Zechen_01", 9); // Gesellschaftliche PlayerPrefs.SetInt("Ueberzeugen_01", 2); PlayerPrefs.SetInt("Feilschen_01", 1); PlayerPrefs.SetInt("Gassenwissen_01", 3); PlayerPrefs.SetInt("Luegen_01", 9); PlayerPrefs.SetInt("Menschenkenntnis_01", 4); PlayerPrefs.SetInt("Schaetzen_01", 5); // Natur PlayerPrefs.SetInt("Faehrtensuche_01", 9); PlayerPrefs.SetInt("FallenStellen_01", 13); PlayerPrefs.SetInt("Jagen_01", 3); PlayerPrefs.SetInt("Angeln_01", 0); PlayerPrefs.SetInt("Pflanzenkunde_01", 4); PlayerPrefs.SetInt("Tierkunde_01", 1); PlayerPrefs.SetInt("Magiekunde_01", 3); PlayerPrefs.SetInt("Heilkunde_01", 2); PlayerPrefs.SetInt("Wildnisleben_01", 1); // Wissen PlayerPrefs.SetInt("Alchemie_01", 0); PlayerPrefs.SetInt("Kriegskunst_01", 1); PlayerPrefs.SetInt("Zauberkunst_01", 0); PlayerPrefs.SetInt("Mechanik_01", 14); // Berufliche PlayerPrefs.SetInt("Abrichten_01", 0); PlayerPrefs.SetInt("Kochen_01", 5); PlayerPrefs.SetInt("Goldschmieden_01", 1); PlayerPrefs.SetInt("Schmieden_01", 0); PlayerPrefs.SetInt("Bogenbau_01", 0); PlayerPrefs.SetInt("Ruestungsbau_01", 0); PlayerPrefs.SetInt("SchloesserKnacken_01", -5); PlayerPrefs.SetInt("Taschendiebstahl_01", 0); } Dann habe ich ein weiteres Script für jeden Chara: Mortac.js: // ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ // Variablen einlesen: // ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ // Charaktervariablen var Testing : int = 100; static var Name = PlayerPrefs.GetString("Name_01"); static var Race = PlayerPrefs.GetString("Race_01"); static var Class = PlayerPrefs.GetString("Class_01"); static var Level = PlayerPrefs.GetInt("Level_01"); static var LE = PlayerPrefs.GetInt("LE_01"); static var LEMAX = PlayerPrefs.GetInt("LEMAX_01"); static var AE = PlayerPrefs.GetInt("AE_01"); static var AEMAX = PlayerPrefs.GetInt("AEMAX_01"); static var AU = PlayerPrefs.GetInt("AU_01"); static var AUMAX = PlayerPrefs.GetInt("AUMAX_01"); static var LP = PlayerPrefs.GetInt("LP_01"); static var EXP = PlayerPrefs.GetInt("EXP_01"); static var Kontrolle : int = 0; static var LEVEL : int = 0; static var EXPNEXT : int = 0; static var ATN : int = 0; static var ATF : int = 0; static var MAG : int = 0; static var PA : int = 0; static var AW : int = 0; static var MAR : int = 0; static var WST = PlayerPrefs.GetInt("WST_01"); static var MST = PlayerPrefs.GetInt("MST_01"); static var RS = PlayerPrefs.GetInt("RS_01"); // Eigenschaftsvariablen // Positive static var MU = PlayerPrefs.GetInt("MU_01"); static var KL = PlayerPrefs.GetInt("KL_01"); static var KK = PlayerPrefs.GetInt("KK_01"); static var CH = PlayerPrefs.GetInt("CH_01"); static var GE = PlayerPrefs.GetInt("GE_01"); static var RE = PlayerPrefs.GetInt("RE_01"); static var SN = PlayerPrefs.GetInt("SN_01"); static var FF = PlayerPrefs.GetInt("FF_01"); static var IN = PlayerPrefs.GetInt("IN_01"); static var ER = PlayerPrefs.GetInt("ER_01"); //Negative static var BL = PlayerPrefs.GetInt("BL_01"); static var AG = PlayerPrefs.GetInt("AG_01"); static var AN = PlayerPrefs.GetInt("AN_01"); static var HA = PlayerPrefs.GetInt("HA_01"); static var HL = PlayerPrefs.GetInt("HL_01"); static var AR = PlayerPrefs.GetInt("AR_01"); static var GG = PlayerPrefs.GetInt("GG_01"); static var GW = PlayerPrefs.GetInt("GW_01"); static var JZ = PlayerPrefs.GetInt("JZ_01"); // Fertigkeiten // Körperliche static var Klettern = PlayerPrefs.GetInt("Klettern_01"); static var Reiten = PlayerPrefs.GetInt("Reiten_01"); static var FahrzeugLenken = PlayerPrefs.GetInt("FahrzeugLenken_01"); static var Schleichen = PlayerPrefs.GetInt("Schleichen_01"); static var Schwimmen = PlayerPrefs.GetInt("Schwimmen_01"); static var Springen = PlayerPrefs.GetInt("Springen_01"); static var Zechen = PlayerPrefs.GetInt("Zechen_01"); // Gesellschaftliche static var Ueberzeugen = PlayerPrefs.GetInt("Ueberzeugen_01"); static var Feilschen = PlayerPrefs.GetInt("Feilschen_01"); static var Gassenwissen = PlayerPrefs.GetInt("Gassenwissen_01"); static var Luegen = PlayerPrefs.GetInt("Luegen_01"); static var Menschenkenntnis = PlayerPrefs.GetInt("Menschenkenntnis_01"); static var Schaetzen = PlayerPrefs.GetInt("Schaetzen_01"); // Natur static var Faehrtensuche = PlayerPrefs.GetInt("Faehrtensuche_01"); static var FallenStellen = PlayerPrefs.GetInt("FallenStellen_01"); static var Jagen = PlayerPrefs.GetInt("Jagen_01"); static var Angeln = PlayerPrefs.GetInt("Angeln_01"); static var Pflanzenkunde = PlayerPrefs.GetInt("Pflanzenkunde_01"); static var Tierkunde = PlayerPrefs.GetInt("Tierkunde_01"); static var Magiekunde = PlayerPrefs.GetInt("Magiekunde_01"); static var Heilkunde = PlayerPrefs.GetInt("Heilkunde_01"); static var Wildnisleben = PlayerPrefs.GetInt("Wildnisleben_01"); // Wissen static var Alchemie = PlayerPrefs.GetInt("Alchemie_01"); static var Kriegskunst = PlayerPrefs.GetInt("Kriegskunst_01"); static var Zauberkunst = PlayerPrefs.GetInt("Zauberkunst_01"); static var Mechanik = PlayerPrefs.GetInt("Mechanik_01"); // Berufliche static var Abrichten = PlayerPrefs.GetInt("Abrichten_01"); static var Kochen = PlayerPrefs.GetInt("Kochen_01"); static var Goldschmieden = PlayerPrefs.GetInt("Goldschmieden_01"); static var Schmieden = PlayerPrefs.GetInt("Schmieden_01"); static var Bogenbau = PlayerPrefs.GetInt("Bogenbau_01"); static var Ruestungsbau = PlayerPrefs.GetInt("Ruestungsbau_01"); static var SchloesserKnacken = PlayerPrefs.GetInt("SchloesserKnacken_01"); static var Taschendiebstahl = PlayerPrefs.GetInt("Taschendiebstahl_01"); Level = PlayerPrefs.GetInt("Level_01"); // ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ // Variablen aktualisieren: // ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ function Update () { // Charaktervariablen Testing = 100; Name = PlayerPrefs.GetString("Name_01"); Race = PlayerPrefs.GetString("Race_01"); Class = PlayerPrefs.GetString("Class_01"); LEVEL = PlayerPrefs.GetInt("Level_01"); LE = PlayerPrefs.GetInt("LE_01"); LEMAX = PlayerPrefs.GetInt("LEMAX_01"); AE = PlayerPrefs.GetInt("AE_01"); AEMAX = PlayerPrefs.GetInt("AEMAX_01"); AU = PlayerPrefs.GetInt("AU_01"); AUMAX = PlayerPrefs.GetInt("AUMAX_01"); LP = PlayerPrefs.GetInt("LP_01"); EXP = PlayerPrefs.GetInt("EXP_01"); WST = PlayerPrefs.GetInt("WST_01"); MST = PlayerPrefs.GetInt("MST_01"); RS = PlayerPrefs.GetInt("RS_01"); // Eigenschaftsvariablen // Positive MU = PlayerPrefs.GetInt("MU_01"); KL = PlayerPrefs.GetInt("KL_01"); KK = PlayerPrefs.GetInt("KK_01"); CH = PlayerPrefs.GetInt("CH_01"); GE = PlayerPrefs.GetInt("GE_01"); RE = PlayerPrefs.GetInt("RE_01"); SN = PlayerPrefs.GetInt("SN_01"); FF = PlayerPrefs.GetInt("FF_01"); IN = PlayerPrefs.GetInt("IN_01"); ER = PlayerPrefs.GetInt("ER_01"); //Negative BL = PlayerPrefs.GetInt("BL_01"); AG = PlayerPrefs.GetInt("AG_01"); AN = PlayerPrefs.GetInt("AN_01"); HA = PlayerPrefs.GetInt("HA_01"); HL = PlayerPrefs.GetInt("HL_01"); AR = PlayerPrefs.GetInt("AR_01"); GG = PlayerPrefs.GetInt("GG_01"); GW = PlayerPrefs.GetInt("GW_01"); JZ = PlayerPrefs.GetInt("JZ_01"); // Eigenschaftsberechnungen // ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ // Attacke Nahkampf ATN = ((MU + GE + KK) / 5); // Attacke Fernkampf ATF = ((KL + GE + KK) / 5); // Attacke Magiekampf MAG = ((MU + GE + KK) / 5); // Parade Nahkampf PA = ((RE + GE + KK) / 5); // Ausweichen AW = ((SN + RE + GE) / 4); // Magieresistenz MAR = ((MU+KL+LEVEL)/3-2*AG); // Ausdauer AU = LE + KK; AUMAX = LEMAX + KK; // Berechnung zum Stufenanstieg // ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ EXPNEXT = (Level +1 ) * (Level + 1) * 100; while (EXP >= EXPNEXT) { Level = Level + 1; return; } // ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ // Fertigkeitsvariablen // Körperliche Klettern = PlayerPrefs.GetInt("Klettern_01"); Reiten = PlayerPrefs.GetInt("Reiten_01"); FahrzeugLenken = PlayerPrefs.GetInt("FahrzeugLenken_01"); Schleichen = PlayerPrefs.GetInt("Schleichen_01"); Schwimmen = PlayerPrefs.GetInt("Schwimmen_01"); Springen = PlayerPrefs.GetInt("Springen_01"); Zechen = PlayerPrefs.GetInt("Zechen_01"); // Gesellschaftliche Ueberzeugen = PlayerPrefs.GetInt("Ueberzeugen_01"); Feilschen = PlayerPrefs.GetInt("Feilschen_01"); Gassenwissen = PlayerPrefs.GetInt("Gassenwissen_01"); Luegen = PlayerPrefs.GetInt("Luegen_01"); Menschenkenntnis = PlayerPrefs.GetInt("Menschenkenntnis_01"); Schaetzen = PlayerPrefs.GetInt("Schaetzen_01"); // Natur Faehrtensuche = PlayerPrefs.GetInt("Faehrtensuche_01"); FallenStellen = PlayerPrefs.GetInt("FallenStellen_01"); Jagen = PlayerPrefs.GetInt("Jagen_01"); Angeln = PlayerPrefs.GetInt("Angeln_01"); Pflanzenkunde = PlayerPrefs.GetInt("Pflanzenkunde_01"); Tierkunde = PlayerPrefs.GetInt("Tierkunde_01"); Magiekunde = PlayerPrefs.GetInt("Magiekunde_01"); Heilkunde = PlayerPrefs.GetInt("Heilkunde_01"); Wildnisleben = PlayerPrefs.GetInt("Wildnisleben_01"); // Wissen Alchemie = PlayerPrefs.GetInt("Alchemie_01"); Kriegskunst = PlayerPrefs.GetInt("Kriegskunst_01"); Zauberkunst = PlayerPrefs.GetInt("Zauberkunst_01"); Mechanik = PlayerPrefs.GetInt("Mechanik_01"); // Berufliche Abrichten = PlayerPrefs.GetInt("Abrichten_01"); Kochen = PlayerPrefs.GetInt("Kochen_01"); Goldschmieden = PlayerPrefs.GetInt("Goldschmieden_01"); Schmieden = PlayerPrefs.GetInt("Schmieden_01"); Bogenbau = PlayerPrefs.GetInt("Bogenbau_01"); Ruestungsbau = PlayerPrefs.GetInt("Ruestungsbau_01"); SchloesserKnacken = PlayerPrefs.GetInt("SchloesserKnacken_01"); Taschendiebstahl = PlayerPrefs.GetInt("Taschendiebstahl_01"); Das Basic Script wird nur beim Beginn eines neuen Spiels ausgeführt. Danach wird mit dem "Mortac.js" gearbeitet. Dauerhafte Werteveränderungen werden dann in der PlayerPrefs gespeichert. Derzeit sind da noch ein paar Testvariablen drin. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ron Dragor Geschrieben 21. Dezember 2011 Autor Melden Share Geschrieben 21. Dezember 2011 Ok. Ich hab mir das mit der Vererbung mal zu gemüte geführt. Ist soweit kein Problem und extrem hilfreich. In JS scheint das aber nicht so gut zu funktionieren. da hab ich geteilte Meinungen gelesen. Wäre es sinnvoll, komplett auf C# unzusteigen, oder gibt es da Funktionen in JS, die man in C# nicht machen kann? Ich denke mal, der Zugriff von einem C#-Script auf ein JS ist nicht so unproblematisch, oder? Da die Befehle ähnlich sind, wäre es zum derzeitigen Standpunkt weniger ein Problem meine JS in C#-Scripte umzuschreiben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 21. Dezember 2011 Melden Share Geschrieben 21. Dezember 2011 In Javascript solltest du alles hin bekommen, was in c# geht. Von der Funktionsvielfalt sind sie in etwa gleich. Da du aber, wie du schreibst, offen für c# bist, solltest du es einfach mal versuchen. Ich selber werde früher oder später wohl auch auf c# umschwenken. Jedoch gehe ich einen anderen Weg des lernens. Erstmal alles verstehen und mit der einfacheren Scriptspache erstellen, dann auf die sauberere Sprache wechseln. Seine Projekte in 2 Sprachen zu basteln halte ich für nicht besonders sinnvoll. c# scripte werden vor den javascripts ausgeführt, was bei gleichzeitigem lauf beider scripte zu problemen führen könnte. Man kann dem aber entgegen wirken. So jetzt zu deinem Problem. Du scheinst da recht linear ran zu gehen. Erzeugst einen Cahrakter, gibst ihm eine eigene GUI, machst das selbe mit dem Nächsten... Das würde funktionieren, ist aber nicht klug. Ich will es mal an deinen Caharkerbögen erklären: Der Unterschied zwischen den Charakterbögen der einzelnen Helden ist doch eigentlich nur der Inhalt, der dort als icon, Avatarbild oder als Text angezeigt wird. Alles andere bleibt gleich. Die Berechnung, die Anordnung der Slots, das Inventar an sich. Also nutzt du nur eine GUI für alle deine Helden, denn diese GUI wird ja auch nur einmal angezeigt. Was du machen musst, ist eine Unterscheidung zu erstellen. Wenn du dir den Held 1 anzeigen lassen willst, dann musst du Unity sagen, dass jetzt nur diese Werte ausgelesen werden. Beim Held 2 sind es andere Werte. Du wirst mit Arrays arbeiten müssen um die Slots im Inventar zu bedienen. Wenn jetzt jeder Slot eine eigene Nummer hat, dann kannst du diese Nummer als Platz(Stelle) im InventarArray nutzen. Dort wird dann abgespeichert welcher Gegenstand in dem Slot ist oder ob er leer ist. Diese Nummern nutzt du dann für andere Arrays, wo die Gegenstände abgelegt sind u.s.w. Wie du siehst, brauchst du für jeden Held ein Array für die Slots. Außerdem brauchst du für jeden Held Varialblen für seine Eigenschaften. Da bietet es sich an Klassen zu erzeugen, wo alles drin steht. Diese Klassen kannste auslesen und auch bearbeiten. Und wenn du jetzt ein ExtraArray für das Inventar hast, dann kanst du mit einem Befehl alle Slots des Helden ins Inventararray übergeben (Welches ja nur zum Sehen da ist) und wenn du in diesem Inventar etwas änderst, dann schreibst du das halt auch in die Klasse rein. Fazit: Erzeuge Klassen Erzeuge Script Module denen du Werte übergibst und die dann Werte zurück geben. 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 21. Dezember 2011 Melden Share Geschrieben 21. Dezember 2011 Das einzige Problem mit JavaScript ist, dass die Klassendefinition, wie sie in jedes C#-Script gehört, implizit ist. Das class Scriptname : MonoBehaviour denkt sich der Compiler also bei JS immer hinzu. Schreibt man also seine eigene Klassendefinition in ein JavaScript-Script, schreibt man eigentlich eine Klasse in eine Klasse, also eine Embedded Class. Soweit ich weiß unterscheidet der Compiler da aber, sodass es funktioniert, aber wirklich hübsch ist das nicht. Dass das nicht gerade schön ist, ist aber afaik das einzige Problem Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hendrik Geschrieben 21. Dezember 2011 Melden Share Geschrieben 21. Dezember 2011 Generell ist JavaScript nunmal fürs Internet erfunden worden. (1995 von einem Netscape (Browser) Entwickler), das merkt man der Sprache halt an. Ich persönlich greife lieber zu Hochsprachen, da sie nunmal auf den nativen, lokalen Ressourcenzugriff ausgelegt sind (Datein speichern etc.), im Grunde genommen ist es aber Geschmackssache. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
damuddamc Geschrieben 22. Dezember 2011 Melden Share Geschrieben 22. Dezember 2011 Also zu deinem Problem, erstell dir am Besten eine Einzige Klasse die du "Character" oder wie auch immer nennst, und diese Klasse besitzt alle Eigenschaften die alle deine Figuren gemeinsam haben, damit meine ich nicht Inhaltlich sondern allgemein.. denn jede Figur hat ja einen Namen oder auch Lebenspunkte: - Name - Avatar - HP - MP - Angriffsstärke - Verteidigungsstärke - Items (Array) - Laufgeschw. - etc. Für diese Klasse schreibst du beispielsweise genau einmal ein GUI - Inventar und dann nie wieder! Jetzt erstellst du dir einfach für jede Figur ein Prefab was für mich in Unity am meisten Sinn macht, und weisst dann den Prefabs die Unteschiedlichen Werte zu die sich Inhaltlich zwischen den Figuren Unterscheiden.. jede bekommt ihren eigenen Namen und ein anders Bild etc.! Solltest du einmal an den Punkt kommen das du für beispielsweise einen besonders mächtigen Character noch zusätzliche Werte brauchst dann leitest du einfach eine neue Klasse von "Character" ab wodurch diese alle Eigenschaften und methoden von der Elternklasse erbt, auch die Funktion zum zeichnen des Inventars! Jetzt kannst du Funktionen die du um etwas erweitern musst, beispielsweise eben die GUI Funktion fürs Inventar um die neuen Werte ebenfalls anzeigen zu können überschreiben.. damit du aber nicht den kompletten Code den du in "Character" schonmal in dieser Funktion geschrieben hast kopieren musst, nur um eben ein paar neue Anzeigen rein zu basteln, gibt es zumindest in C# die Möglichkeit über "basic.Methodename()" eine Methode aus der Elternklasse auf zu rufen... wodurch du nur den tatsächlich neuen Code hinzufügen musst! Weiß aber nicht ob das so auch in JS funtzt... Was ich dir auch raten würde wäre nicht alles über PlayerPrefs zu machen und erst recht nicht in der UpdateMethode... kann mir nicht vorstellen dass das auf dauer performant ist! In die PlayerPrefs kannst du dann etwas reinspeichern wenn dus wirklich brauchst, für Speicherstände eben aber nicht um irgendwelche Werte zwischen zu speichern um sie im nächsten Frame wieder ab zu fragen! Du liest dir beim Spielstart einmal aus den Playerprefs die passenden Werte zu deinem Char aus und weisst sie diesem zu, mehr nicht... und beim speichern schreibst du sie eben wieder hinein, auch deine ganzen static Variablen machen für mich nicht sehr viel Sinn.. lass das static lieber weg... auf den ersten Blick ist es vlt. schön einfach static Vars zu verwenden.. aber sobald du 2 Objekte/Figuren (was auch immer) von der gleichen Klasse im Spiel hast.. teilen sie sich eben diese Werte! Gruß Stephan 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ron Dragor Geschrieben 22. Dezember 2011 Autor Melden Share Geschrieben 22. Dezember 2011 Ok. Danke für die Tipps! Ich werde das mal umsetzen und das Ergebnis dann posten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ron Dragor Geschrieben 25. Dezember 2011 Autor Melden Share Geschrieben 25. Dezember 2011 Frohe Weihnachten allerseits! So. Ich hab das hingekriegt. Mit der Vererbung spart man eine Unmenge Arbeit. Hab da ein kleines anderes Problem: Ich habe nun ein anderes Problem. Damit ich weiter viel unnötige Arbeit sparen kann, und das Ganze übersichtlich bleibt, habe ich mit folgendes überlegt: Ich möchte im HUD-Script einen Int im Menue-Script festlegen, wenn man den Avatar eines Charakters anklickt. if (GUI.Button(new Rect(213,535,145,145), CharaAvatar1)) { A_Scripte.GetComponent<Menue>().Wahl = 1; if (GUI.Button(new Rect(213,535,145,145), CharaAvatar2)) { A_Scripte.GetComponent<Menue>().Wahl = 2; Funktioniert einwandfrei. Nun habe ich im Menue-Script folgendes: public void Charakterwahl () { switch (Wahl) { case 1: Name = A_Scripte.GetComponent<Mortac>().Name; LE = A_Scripte.GetComponent<Mortac>().LE; EXP = A_Scripte.GetComponent<Mortac>().EXP; break; case 2: Name = A_Scripte.GetComponent<Mortira>().Name; LE = A_Scripte.GetComponent<Mortira>().LE; EXP = A_Scripte.GetComponent<Mortira>().EXP; break; } } Ist natürlich viel Arbeit.... Deshalb wollte ich das über eine Variable lösen. Aber mir fehlt wiedereinmal die korrekte Synthax: public void Charakterwahl () { switch (Wahl) { case 1: CharWahl = Mortac; break; case 2: CharWahl = Mortira; break; } } Name = A_Scripte.GetComponent<CharWahl>().Name; LE = A_Scripte.GetComponent<CharWahl>().LE; EXP = A_Scripte.GetComponent<CharWahl>().EXP; Um die Variable CharWahl zu deklarieren hatte ich folgende Möglichkeiten versucht: public string CharWahl; public Component CharWahl; string CharWahl; Component CharWahl Die Fehlermendung kam immer in Zeile: Name = A_Scripte.GetComponent<CharWahl>().Name; Kann mir da jemand helfen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.