Wie programmiert man einen Forschungstisch wie in Rimworld?
Wie oben schon stehend würde ich gerne wissen ob jemand eine Idee hat wie man ein ähnliches Forschungssystem programmiert (mit Unity C#) wie in Rimworld.
Ich würde mich über eine Antwort freuen. Ich fange gerade erst mit programmieren an und würde mich deshalb über ein bisschen Hilfe freuen.
Dankeschön
2 Antworten
Also im Prinzip möchtest du etwas haben mit dem du Sachen freischaltest, nachdem die vorherige Forschung(en) abgeschlossen wurden. Ich würde jetzt für die Forschung eine Klasse anlegen.
public class Research
{
public string name = "";
public int duration = 0;
public bool completed = false;
public List<Research> require = new List<Forschung>();
//Constructor, damit du die Klasse einfacher erstellen kannst
public Research(string _name, int _duration)
{
name = _name;
duration = _duration;
};
public void addRequirement(Research r)
{
require.Add(r);
};
};
Jetzt brauchst du ein anderes Script, welches die Forschungen speichert. Sowas wie ein GameController, quasi ein GameObject was nur 1x existiert und in dem Fall als Speicher fungiert. Dieses Script startet dann auch die Forschung.
GameController (MonoBehaviour) (BEISPIEL)
List<Research> research = new List<Research>();
void Start()
{
//[...] anderes Zeug machen
research.Add(new Research("Forschung 1", 120));
research.Add(new Research("Forschung 2", 50));
getResearchByName("Forschung 2").addRequirement(getResearchByName("Forschung 1")); // Forschung 2 benötigt Forschung 1
// du legst hier so viele Forschungen wie du möchtest an. Sollte Forschung 2 auch "Forschung 1 1/2" benötigen, kannst du diese auch noch hinzufügen
getResearchByName("Forschung 2").addRequirement(getResearchByName("Forschung 1 1/2"));
};
//Gibt true oder false zurück, ob alle requirements abgeschlossen wurden
bool canResearch(string query)
{
Research res = research.Find(r => r.name = query);
foreach(Research r in res.require)
{
if(!r.completed)
return false;
};
return true;
};
Research getResearchByName(string query)
{
return research.Find(r => r.name = query);
};
Ein User-Interface musst du dir natürlich selber in Unity bauen, aber hier hast du einen Ansatz für die Logik dahinter - schau dir einfach den Code an und versuche Ihn zu verstehen, bei Fragen kann ich dir da gerne weiterhelfen.
Achso, es kann sein, dass du etwas aus System.Collections importieren musst, bin mir aber nicht sicher was genau. Deine IDE wird dir bei List<Research> aber sicher einen Vorschlag geben.
Na klar, gerade wenn man anfängt zu programmieren hat man Sachen, die eigentlich simpel zu lösen sind, man aber keinen Ansatz hat wie man das umsetzen soll.
Wenn du meinst das so einigermaßen verstanden zu haben, kannst du ja mal in der Research Klasse eine Funktion anlegen, welche dir zurückgibt, ob der Research abgeschlossen ist oder nicht.
Wie wärs wenn du mit nem Hello World auf der Kommandozeile anfängst? Die haben erstmal 300.000$ eingenommen und können sich davon fähige Leute leisten die das schon ihr ganzes Leben machen. Wenn man in einem Satz zusammenfassen könnte wie man sowas macht würde es wohl kaum so teuer sein.
Cool danke ich versuchs. Weil ich hab nun mal erst nur so die basics drauf wie movment und so weiter. Wärst du für weitere fragen offen wenn nötig?