Zapisywanie/Wczytywanie Gra textowa

0

Witam. Staram się zrobić grę testową w unity na androida. Aktualnie mam coś takiego i wszystko działa , ale nie wiem jak podejść do kwestii zapisu i wczytywania. chciałbym, aby gra zapisywała na bieżąco, w którym aktualnie obiekcie się znajduję i mogła od tego momentu wczytać . Próbowałem za pomocą PlayerPrefs, ale nie wiem jak podpiąć to pod obiekty. Starałem się wrzucić wszystkie obiekty razem to tablicy i zapisywać aktualne miejsce w tablicy, ale coś nie poszło :D.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
class StoryBlock
{
public string story;
public string option1Text;
public string option2Text;
public StoryBlock option1Block;
public StoryBlock option2Block;
public StoryBlock(string story,string option1Text="",string option2Text="",StoryBlock option1Block=null,StoryBlock option2Block=null)
{
this.story=story;
this.option1Text=option1Text;
this.option2Text=option2Text;
this.option1Block=option1Block;
this.option2Block=option2Block;
}
}
public class StoryMenager : MonoBehaviour
{
[SerializeField] Text mainText;
[SerializeField] Button option1;
[SerializeField] Button option2;

StoryBlock currentBlock;

static StoryBlock block7=new StoryBlock("Zakonczenie-4");//2.2
static StoryBlock block6=new StoryBlock("Zakonczenie-3");//2.1
static StoryBlock block5=new StoryBlock("Text","Wybor1", "Wybor2",block6,block7);//2
static StoryBlock block4=new StoryBlock("Zakonczenie-2");//1.2
static StoryBlock block3=new StoryBlock("Zakonczenie-1");//1.1
static StoryBlock block2=new StoryBlock("Text","Wybor1", "Wybor2",block3,block4);//1
static StoryBlock block1=new StoryBlock("Text","Wybor1", "Wybor2",block2,block5);//0

void Start()
{
    DisplayBlock(block1);

}
void DisplayBlock(StoryBlock block)
{
    
    mainText.text=block.story;
    option1.GetComponentInChildren<Text>().text=block.option1Text;
    option2.GetComponentInChildren<Text>().text=block.option2Text;

    currentBlock=block;
}
public void Button1Clicked()
{
    DisplayBlock(currentBlock.option1Block);
}
public void Button2Clicked()
{
    DisplayBlock(currentBlock.option2Block);
}
void Update()
{
    if (Input.GetKey("escape"))
    {
        Application.Quit();
        
    }
}

}

0

Grę tekstową można przedstawić na diagramie, Przykład.

Jeśli zbudujesz sobie taką strukturę danych, to nie będziesz mieć problemu z określeniem na którym etapie się znajdujesz.
Każdemu liściowi drzewa możesz przypisać jakiś unikalny identyfikator. Przy zapisie gry, zapisujesz go w PlayerPrefs.
Wczytując grę po prostu szukasz (zaczynając od roota) liść drzewa z zapisanym identyfikatorem i ładujesz ten liść jako obecny etap.

O takim czymś zapomnij:

static StoryBlock block7=new StoryBlock("Zakonczenie-4");//2.2
static StoryBlock block6=new StoryBlock("Zakonczenie-3");//2.1
static StoryBlock block5=new StoryBlock("Text","Wybor1", "Wybor2",block6,block7);//2
static StoryBlock block4=new StoryBlock("Zakonczenie-2");//1.2
static StoryBlock block3=new StoryBlock("Zakonczenie-1");//1.1
static StoryBlock block2=new StoryBlock("Text","Wybor1", "Wybor2",block3,block4);//1
static StoryBlock block1=new StoryBlock("Text","Wybor1", "Wybor2",block2,block5);//0

Twoja struktura powinna być taka, że masz blok początkowy (root), a on zawiera referencje do innych bloków. Poszczególne bloki zawierają referencje do kolejnych.
Twoje bloki to by mogły być prefaby/scriptable objecty w zależności od potrzeb. Wszystko wtedy będziesz mógł ustawić w edytorze, a nie w kodzie.

0

Hmmm. Czyli tworze sobie dużo połączonych ze sobą obiektów i w chwili dokonania wyboru jeden wyłączam, a drugi włączam w inspektorze?

0

@GomzoPL: Tak.

0

Super. Dziękuje bardzo za wskazanie drogi :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1