Ich versuche ein Quest-System zu erstellen. Ich habe QuestCreator, Quest und mehrere objektive Klassen, die eine Schnittstelle erben (TalkObjective, LocationObjective usw.)Speichern von mehreren Datenarten
Im Konstruktor der Quest-Klasse habe ich eine Liste wie List<IObjective>
erstellt. Es hat nicht funktioniert.
Dann habe ich eine Klasse erstellt, um alle Arten von Listen zu halten. Aber ich verlor die Fähigkeit, meine Ziele zu ordnen.
Meine Frage ist; Gibt es einen besseren Weg/Design, das zu tun?
[Bearbeiten]
Es tut mir Leid, dass ich es nicht detailliert genug war. Seit ich meinen Code geändert habe, kann ich ihn hier nicht mehr posten. Ich habe versucht, den gleichen Code zu erstellen, aber dieses Mal gibt mir der Code keinen Fehler. Also löse ich das Problem alleine.
Ich verwendete ein Tutorial, das nicht abgeschlossen/aufgegeben wurde. Here is the link to github
Ich baute mein Item/Inventory System mit abstrakten Klassen und es war das erste, was mir in den Sinn kam. Aber meine Absicht war es, dieses Quest-System so zu gestalten, wie es der Ersteller des Tutorials entworfen hat, damit ich seinen Weg kennen lernen kann.
Ich wollte Objekte verschiedener Objective-Klassen in einer Liste mit der Schnittstelle, die sie in der üblichen Weise verwenden.
public class QuestCreator : MonoBehaviour {
#region fields
private List<IQuestObjective> objectives;
private GameObject itemManager;
private ItemDatabase itemdb;
private Location location;
private Quest quest;
//For Saving Quest
private Quest_data quests;
#endregion
void Update()
{
//Just for the test purpose
if (Input.GetKeyDown (KeyCode.E))
{
itemManager = GameObject.Find ("GameManager");
itemdb = itemManager.GetComponent<ItemDatabase>();
Item item = new Item();
Item item2 = new Item();
item = itemdb.weapon_database[0];
item2 = itemdb.weapon_database [1];
CollectionObjective collectionObjective = new CollectionObjective ("Find", 3, item, "Find this precious item");
CollectionObjective collectionObjective2 = new CollectionObjective ("Find", 1, item2, "Find Sword of Warrior from Dark Passage");
LocationObjective locationObjective = new LocationObjective ("Go to Green Valley", "Go to " + location, location, false);
objectives = new List<IQuestObjective>();
objectives.Add(collectionObjective);
objectives.Add (collectionObjective2);
objectives.Add (locationObjective);
QuestText questText = new QuestText();
QuestIdentifier questIdentifier = new QuestIdentifier();
questText.Title = "Finding Sword of Warrior";
questText.DescriptionSummary = "Summary...";
questText.Hint = "Hint...";
questIdentifier.QuestID = 1;
questIdentifier.SourceID = 1;
quest = new Quest (questIdentifier, questText, objectives);
Debug.Log (quest.Objectives[1].Description);
Debug.Log (quest.Objectives.Count);
}
}
Bearbeiten Sie Ihre Frage etwas Code zu erhalten, und auch, erklären, was Sie unter „nicht funktioniert“. –
Es klingt, als ob Sie mit der Liste in die richtige Richtung gingen. Wie Sohar vor mir gesagt hat, bitte zeigen Sie Ihren Code und teilen Sie uns alle Fehler mit, die Sie erhalten –
Ben