Wie programmiert man einen Forschungstisch wie in Rimworld?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Studium / Ausbildung

ReinholzMessner 
Beitragsersteller
 28.05.2020, 23:01

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?

m8fun  29.05.2020, 09:49
@ReinholzMessner

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.