Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Formát pro uložení hry ? (Unity3D)

Aktivity
Avatar
Garrom Orc Shaman:25.9.2016 20:02

Zdravím všechny. Nezná někdo formát do kterého bych mohl zapisovat int, float, string a bool a mohl k hodnotám snadno přistupovat ?

//Příklad
int money = ser.ReadInt("savedMoney");
ser.WriteInt(money, "savedMoney");

"ser" je odkaz na serializér, ne rozkaz k vykonání potřeby...... jen zmiňuji :-`

Zkrátka abych k hodnotám mohl přistupovat pomocí jména hodnoty a nemusel hledat v polích řádků (představte se že jedna uložená hra má 28 řádků... uložených her je 80). Přemýšlel jsem o .ini souborech (podobně jako to bylo v nástroji Game Maker) bohužel Unity3D (spíše celý .net) neposkytuje vestavěné řešení pro práci s .ini soubory.

Existuje nějaká alternativa k .ini souborům kde bych mohl hledat hodnoty podle jména ?

  • DrMrkev
Odpovědět
25.9.2016 20:02
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Štěpán Wünsch:25.9.2016 20:39

Určitě prostuduj XML

 
Nahoru Odpovědět
25.9.2016 20:39
Avatar
Odpovídá na Štěpán Wünsch
Erik Šťastný:25.9.2016 20:55

Jo ! :D Dlouho nerefreshnutá stránka :)

 
Nahoru Odpovědět
25.9.2016 20:55
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:25.9.2016 20:56

Spíše se koukni na AppSettings, to je asi nejbližší alternativa k .ini souborům. Btw, zrovna na ty .ini soubory by jsi na 100% něco našel na nugetu, vždyť to i sám napíšeš za pár minut.

 
Nahoru Odpovědět
25.9.2016 20:56
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Garrom Orc Shaman
D0ll0k:25.9.2016 21:20

Zkus se mrknout na youtubovy kanal Speed Tutor. Udelal malou serii na jednoduche ukladani s EasySave.

https://m.youtube.com/watch?v=UMpGJuf6h24
Nahoru Odpovědět
25.9.2016 21:20
Veni, vidi, programmato
Avatar
Marian Benčat:25.9.2016 23:41

nechce nahodou ukladat ulozene hry? proc tedy tady vsichni doporučujete .ini, .xml nebo NEDEJBOZE appsettings... ?

Vše to bude jen 100x složitější než naprosto primitivní serializace do binárního souboru:

https://msdn.microsoft.com/…vs.110).aspx tady se koukni mrkev,.

Nahoru Odpovědět
25.9.2016 23:41
Totalitní admini..
Avatar
Garrom Orc Shaman:26.9.2016 15:11

ten .xml soubor vypadá použitelně :-)
Marian Benčat měl jsem za to že do binárky se ukládají objekty a ne hodnoty(možná se pletu)

<?xml version="1.0" encoding="utf-8"?>
<SavedGamesFile>
  <SavedLevel>3</SavedLevel>
  <SavedMoney>250</SavedMoney>
  <SavedName>HardGuy</SavedName>
</SavedGamesFile>
Nahoru Odpovědět
26.9.2016 15:11
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Garrom Orc Shaman:26.9.2016 16:24

mám menší problém, zápis jde v pohodě ale když chci číst pomocí tohoto kódu :

public static void Main(string[] args)
{
        using (XmlReader xr = XmlReader.Create(@"soubor.xml"))
        {

        }
}

dostanu tyto chyby

  • V oboru názvů XmlReader neexistuje název typu nebo oboru názvů Create (pravděpodobně jste neuvedli odkaz na sestavení). (CS0234)
  • XmlReader je obor názvů, ale používá se jako typ.

nevím přesně jek to funguje teď ale zkoušel jsem net.framework 3.5 a 4.0 a na obou se stejným výsledkem.

Nahoru Odpovědět
26.9.2016 16:24
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Marian Benčat
Jan Vargovský:26.9.2016 17:38

Co máš proti appsettingům lol?

 
Nahoru Odpovědět
26.9.2016 17:38
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:26.9.2016 18:10

appsetting sám generuje xml dokument s nastavením, já nechci automaticky generované dokumenty protože nad nimi nemám plnou kontrolu. Představ si že později udělám editor uložených pozic.... který nebude fungovat protože přesně nevím co je uvnitř xml dokumentu. Když budu xml dokument vytvářet sám nejen že budu přesně vědět co v něm je ale navíc tam budu moct dávat uložené pozice, nastavení a údaje sdílené mezi všemi uloženými hráči (např. aktivovaný cheat-mod, ocenění nebo secrety).
proti appsettingům nic nemám jen to zrovna v tomto případě nevidím jako nejvhodnější řešení.

Nahoru Odpovědět
26.9.2016 18:10
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:26.9.2016 18:22

To jsem se neptal tebe, ale nevadí. Původně jsem četl alternativa k .ini, tak mě jako první napadla appsettings sekce, každopádně po tom, co tu čtu co přesně potřebuješ se to opravdu nehodí. Jen mě zajímá reakce od Mariana, jestli má snad na settingy aplikace něco lepšího :)

 
Nahoru Odpovědět
26.9.2016 18:22
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:26.9.2016 18:46

A Jó :-D jsem si vůbec nevšimnul že to není pro mně... mně se ukázalo upozornění ale jestli to byla reakce na můj komentář nebo jen přibyl komentář do vlákna co jsem založil tam nikde nepíšou ...
to potvrzuje jednu z mích hlášek :

Každý je občas idiot, záleží na tom jak často a na jak dlouho

Nahoru Odpovědět
26.9.2016 18:46
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:26.9.2016 19:44

Marian Benčat má něco "lepšího" na ukládání nastavení .... Soudě podle komentáře mu na to připadá vhodný binární zápis :-D :-D :-D
Vždiď binárka je v podstatě otisk paměti.... neumím si představit jak tam budu hledat hodnoty podle jména :-D

jinak ten problém z 8th příspěvku pořád platí... byl bych rád kdyby mi někdo pomohl jelikož mně to brzdí od práce.

Nahoru Odpovědět
26.9.2016 19:44
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Neaktivní uživatel:26.9.2016 20:09

Vytvoř si třídu, která bude odsahovat dejme tomu slovník (když chceš hledat dle jména) - ta bude reprezentovat uloženou hru. Při uložení to serializuješ, a při načítání deserializuješ - dostaneš ten objekt se slovníkem. V něm pak budeš hledat dle jména. 80x28 řádků snad není takový nápor na RAMku...

Nahoru Odpovědět
26.9.2016 20:09
Neaktivní uživatelský účet
Avatar
Odpovídá na Garrom Orc Shaman
Luboš Běhounek Satik:26.9.2016 20:17

Vždiď binárka je v podstatě otisk paměti.... neumím si představit jak tam budu hledat hodnoty podle jména

Binárka není otisk paměti, binárka je akorát soubor, do kterýho data neukládáš v formě čitelný pro člověka (resp. to není tvoje priorita, ale např. stringy v běžný binárce obvykle přečteš), takže např. čísla jsou v binární formě.

V binárce nehledáš nic podle jména, tam přesně víš, kde co máš a prostě to načteš do nějaký struktury, který to odpovídá :)

Nahoru Odpovědět
26.9.2016 20:17
https://www.facebook.com/peasantsandcastles/
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:26.9.2016 20:43

On to myslel ale dobře. Ty si přece ty hodnoty při ukončení serializuješ (uložíš) a pak při znovu spuštění si je deserializuješ (načteš) a pracuješ pořád s tvými proměnnými nebo nějakou instanci.

 
Nahoru Odpovědět
26.9.2016 20:43
Avatar
Marian Benčat:26.9.2016 20:57

Proti appsettings nemám vůbec nic.. ale opravdu to není místo, kam bys měl ukládat nějaké věci typu save game, kde:

  1. pokud možno nechceš, aby ti to každý vocas mohl zeditovat
  2. struktura appsettings bude hodně růst s každým dalším savem, to je poměrně nežádoucí
  3. Poměrně na prd se s tim pracuje...

Díky bohu za lidi, kteří ví jak funguje serializace a deserializace a je jim tedy jasný, že si můžou objekt (třeba Dictionary) serializovvat binárně, uložit do souboru a vice versa..

Jsou tedy schopni bez problemu při spuštění programu načíst všechny .bin soubory, deserializovat a mají veškerou práci hotovu, protože mají
List<SaveGame> a tedy s tím už pracují jako s objektem.

Nahoru Odpovědět
26.9.2016 20:57
Totalitní admini..
Avatar
Garrom Orc Shaman:27.9.2016 9:32

Dobrá, už mlčím. Ale docela by mně zajímalo jak vyřešit problém z osmého příspěvku, pořád platí, pro jistotu ho zopakuji.
Z tohoto kódu :

public static void Main(string[] args)
{
        using (XmlReader xr = XmlReader.Create(@"soubor.xml"))
        {

        }
}

dostanu tyto chyby

  • V oboru názvů XmlReader neexistuje název typu nebo oboru názvů Create (pravděpodobně jste neuvedli odkaz na sestavení). (CS0234)
  • XmlReader je obor názvů, ale používá se jako typ.
Nahoru Odpovědět
27.9.2016 9:32
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Garrom Orc Shaman:27.9.2016 14:41

Dobrá, v kódu problém není, třída System.Xml byla poškozená tak jsem .net opravil pomocí instalačního balíčku.
Když už máme formát nastává otázka jak číst podle jména aneb. abych nemusel projíždět všechny řádky a jen zadal jméno elementu jehož hodnotu chci. Díval jsem se na zdejší učební materiály a tam je dokument projížděn řádek po řádku. Existuje nějaká možnost jak posunout reader na element s určitým jménem ? něco jako :

// Je to jen příklad, metoda nejspíše neexistuje, xr je reference na instanci XmlReader
Player.Hp = xr.GoToElement("SavadHealth").Value;
Nahoru Odpovědět
27.9.2016 14:41
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Marian Benčat:27.9.2016 15:04

Muzu se opet zeptat.. kdyz uz tedy chces pouzivat XML z nejakeho duvodu.. proc tedy neserializujes / nedeserializujes do XML? Pak takoveto veci totiz ABSOLUTNE nemusis resit.. proste si nadefinujes tridu, ktera reprezentuje tvuj save game.. Ať je to klidně na styl dictionary, pokud tam budeš mít spoustu klíčů.. ale proč se pachtit s xpathem a dalsima vecma...?

Nahoru Odpovědět
27.9.2016 15:04
Totalitní admini..
Avatar
Odpovídá na Garrom Orc Shaman
Neaktivní uživatel:27.9.2016 15:12

Možná že chceš LINQ to XML - http://stackoverflow.com/…-to-read-xml. Ale vážně nechápu proč mermomocí vyžaduješ XML...

Nahoru Odpovědět
27.9.2016 15:12
Neaktivní uživatelský účet
Avatar
Garrom Orc Shaman:27.9.2016 15:37

Xml bych chtěl používat protože mi bylo naznačeno že z xml dokumentu můžu vyžadovat hodnotu jen za pomocí jména jako tomu bylo v nástroji Game Maker s použitím .ini ....
začínám pochybovat že to je pravda a začínám si myslet že není možné z nějakého souboru chtít hodnotu aniž bych musel ručně projel všechny řádky.
také bych chtěl formát do kterého bych mohl tímto způsobem ukládat hodnoty (jen hodnoty, ne objekty) což měl být xml dokument.

Nahoru Odpovědět
27.9.2016 15:37
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Neaktivní uživatel:27.9.2016 15:41

protože mi bylo naznačeno že z xml dokumentu můžu vyžadovat hodnotu jen za pomocí jména

Na tohle přece slouží slovník - třída Dictionary. Tu už bys měl znát. Já a Marian Benčat se ti to snažíme opakovaně naznačovat. Už se mi to nechce psát znovu, pojeď si dřívější příspěvky - serializace a deserializace...

Nahoru Odpovědět
27.9.2016 15:41
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Garrom Orc Shaman:27.9.2016 15:47

Jo ahá ... to naznačování slovníku mi trochu ujelo (respektive jsem nad tím slovem nepřemýšlel a měl za to že myslíte nějaký česko - programátorský slovník... proč mi někdo neřekl hned že to je třída ?).
Myslím že se na ten slovník podívám :-)

Nahoru Odpovědět
27.9.2016 15:47
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Neaktivní uživatel
Garrom Orc Shaman:27.9.2016 16:14

Vždiď slovník je generická kolekce.... můžu do něj uložit jen jeden dat.typ možná bych mohl použít jako dat.typ třídu object (jelikož to je parrent ostatních datových typů) ale nejsem si jist jestli by to fungovalo

Nahoru Odpovědět
27.9.2016 16:14
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Garrom Orc Shaman
gcx11:27.9.2016 16:22

Promiň za offtopic reakci, ale docela mi to vypaluje oči, píše se " Vždyť "

 
Nahoru Odpovědět
27.9.2016 16:22
Avatar
Odpovídá na gcx11
Garrom Orc Shaman:27.9.2016 16:25

Ou, to se omlouvám... chybička se vloudila. Příště se to už nestane ;-)

Nahoru Odpovědět
27.9.2016 16:25
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Neaktivní uživatel:27.9.2016 17:07

No a do XML si můžeš uložit kolik dat. typů? Jeden - všechno je tam totiž text. Takže stejně budeš parsovat ze stringů. Jak říkáš, do Dictionary si můžeš uložit objekt, takže i když budeš přetypovávat, alespoň to bude mít nějaký pevný datový typ (jakože Integery, Stringy, Doubly zabalené v Object).

Nahoru Odpovědět
27.9.2016 17:07
Neaktivní uživatelský účet
Avatar
Odpovídá na Garrom Orc Shaman
Marian Benčat:27.9.2016 17:15
Dictionary<string, string>

nebo

Dictionary<string, Person>

nebo cokoliv jineho.. tedy jak potřebuješ.. key bude string a hodnota může být cokoliv si umaneš..

Editováno 27.9.2016 17:16
Nahoru Odpovědět
27.9.2016 17:15
Totalitní admini..
Avatar
Garrom Orc Shaman:27.9.2016 17:19

Tak jsem dal dohromady vše co jste tu řekli a funguje to...

Já fakt nevím komu to uznat jako řešení .... Zase se nehlaste všichni :-D

Jinak díky všem :-)

Nahoru Odpovědět
27.9.2016 17:19
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Neaktivní uživatel:27.9.2016 17:22

Dej si řešení na tento svůj příspěvek, protože jsi to konečně dal po 2 dnech dohromady :-D

Nahoru Odpovědět
27.9.2016 17:22
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Garrom Orc Shaman:27.9.2016 19:48

Asi napíšu knihu "Autista Programátorem : Řádek za dva dny" :-D
Ale co, když se budu snažit... dokážu cokoliv (uznávám že látat nezvládnu ať se budu snažit sebevíc.I tak to zaokrouhlím na "Cokoliv")

Nahoru Odpovědět
27.9.2016 19:48
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Garrom Orc Shaman
Jan Vargovský:27.9.2016 20:38

Jo, to je úplný základ, který by si měl znát. Jestli to pak někdy nemusíš zkoumat a je ti šumák co tam je za data, tak použij tu binární serializaci (kvůli rychlosti), až narazíš na hranice XmlSerializeru, tak se podívej na DataContractSe­rializer.

 
Nahoru Odpovědět
27.9.2016 20:38
Avatar
Odpovídá na Jan Vargovský
Garrom Orc Shaman:28.9.2016 12:15

Dobře, díky za typ.
Zkoumat bych to potřeboval spíše ze začátku abych mohl uložené hry měnit a rychle se dostat do levlu který zrovna dělám(až to budu vydávat mám v plánu tam dát encoding)

Nahoru Odpovědět
28.9.2016 12:15
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Marian Benčat:28.9.2016 12:21

Tak jako. ja si myslim, ze to chapeme.. Unity3D láká na dělání her a snaží se dát najevo, že k tomu člověk nemusí vědět programovat a složí si hru z tutoriálů a scriptů ze storu...

it's a trap.

Nahoru Odpovědět
28.9.2016 12:21
Totalitní admini..
Avatar
Odpovídá na Garrom Orc Shaman
Luboš Běhounek Satik:28.9.2016 12:53

Asi napíšu knihu "Autista Programátorem : Řádek za dva dny"

To uz se mi s C++ taky parkrat stalo - dva dny clovek v C++ hleda, co zpusobuje nekde access violation, aby pak zjistil, ze je to nejaka blbina v nejaky uplne jiny casti kodu a oprava tkvi v prepsani par znaku :)

Nahoru Odpovědět
28.9.2016 12:53
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Marian Benčat
Garrom Orc Shaman:2.10.2016 18:39

Teoreticky by to šlo ale neuvěřitelně se to prodraží.

Zjednodušený nákupní seznam :

  • Platform mesh level pack 5.00 $
  • Platform script pack 2.50 $
  • Happy background music 4.00 $
  • Sfx 2.30 $
  • Game saving/loading scripts 2.70 $
  • Sprites pack 2.00 $
  • Particles pack 2.00 $
  • Advenced animation tool 4.00 $

Poznámka : ceny jsou spíše orientační.

Dohromady : 24.50 $
převedeno na koruny :
588.90 Kč
... Myslím že se vážně vyplatí to umět než vyhazovat peníze za něco co si můžeš udělat sám ;-)

Nahoru Odpovědět
2.10.2016 18:39
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Marian Benčat:2.10.2016 18:50

takhle presne ale vznikaji ty budgetovky.. daji 10 000 za materialy.. poskladaji to, prodaji 1 000 kopii a jsou spokojeni..

Nahoru Odpovědět
2.10.2016 18:50
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Garrom Orc Shaman:3.10.2016 15:19

To musím souhlasit ale ušetřit se dá alespoň na skriptech v případě že ovládáš programovací jazyk a jsi schopen si je napsat sám. Kromě toho když si skripty napíšeš sám jsou přesně dělané pro tvůj projekt a nemusíš řešit jak přinutit pracovat společně různé kousky od různých autorů.

Nahoru Odpovědět
3.10.2016 15:19
Life for Code, Code for Life. I chose my path, I should stick on it.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 40 zpráv z 40.