Unity je výkonný nástroj pro vytváření her a aplikací, který umožňuje vývojářům implementovat různé funkce. Jedním z důležitých aspektů vývoje je ukládání dat. Často je nutné zachovat Datum, aby bylo možné sledovat pokrok hráče, události nebo jiné časové parametry.
Uložení data do Unity lze implementovat pomocí třídy PlayerPrefs, která poskytuje snadný způsob, jak ukládat a přijímat data. Chcete-li uložit datum, musíte jej převést na řádek a uložit pomocí metody PlayerPrefs.SetString().
Chcete-li například uložit aktuální datum, můžete použít následující kód:
string currentDate = DateTime.Now.ToString("dd.MM.yyyy");
PlayerPrefs.SetString("savedDate", currentDate);
Pro získání uloženého data je nutné použít metodu PlayerPrefs.GetString () a poté převést výsledný řádek zpět na datum:
string savedDate = PlayerPrefs.GetString("savedDate");
DateTime date = DateTime.ParseExact(savedDate, "dd.MM.yyyy", CultureInfo.InvariantCulture);
Tímto způsobem můžete uložit a získat datum v Unity a použít jej pro různé účely ve svém projektu. Všimněte si, že třída PlayerPrefs také poskytuje další metody pro ukládání a přijímání dat, takže si můžete vybrat tu, která je pro váš konkrétní úkol nejvhodnější.
Optimalizace uložení data v Unity
Při práci s daty v Unity je třeba zvážit optimalizaci procesu ukládání dat. V tomto článku se podíváme na několik způsobů, jak ušetřit zdroje a urychlit ukládání data ve hře.
Prvním způsobem optimalizace je použití serializace data jako číselného formátu. Místo uložení úplného data a času lze uložit pouze počet sekund, které uplynuly od určitého počátečního okamžiku času. Tím se výrazně sníží množství dat, která je třeba uložit, a tím se ušetří paměť a čas na uložení.
| Metoda | Výhody |
|---|---|
| Unix-čas | - Snadné použití - Malá velikost uložených dat |
| Jiný číselný formát | - Rychlé ukládání a stahování dat - Nemožnost ztratit přesnost |
Druhým způsobem optimalizace je použití komprese dat. Unity má vestavěné nástroje pro kompresi a rozbalování dat,které umožňují výrazně snížit velikost uložených dat. K tomu lze použít třídy BinaryWriter a BinaryReader , které vám umožňují zapisovat data do bajtového proudu a komprimovat jej.
Třetí způsob optimalizace spočívá v zohlednění specifik konkrétní hry a její logiky. Pokud přesnost uloženého data není kritická, lze použít jednodušší algoritmy pro ukládání a stahování. Pokud například Hra běží offline a nevyžaduje synchronizaci se serverem, můžete použít hrubší granularitu uložení data, například uložit pouze den a měsíc, nikoli celý čas.
Získání aktuálního data v Unity
Unity má několik způsobů, jak získat aktuální datum. Zvažte některé z nich:
-
System.DateTime.Now Jedním z nejjednodušších způsobů, jak získat aktuální datum v Unity, je použití statické vlastnosti System.DateTime.Now. Volání této vlastnosti vrátí aktuální datum a čas ve formátu systému.
using System;// . void Start()
using System;// . void Start()
using System;// . void Start()
Při použití některého z uvedených způsobů, nezapomeňte, že pro práci s daty a časem v Unity, musíte připojit jmenný prostor using System;.
Vyberte způsob, jak získat aktuální datum, které je pro váš projekt nejvhodnější, a v případě potřeby jej použijte.
Formátování data pro uložení
Pro formátování data lze použít třídu System.DateTime. Tato třída poskytuje různé metody pro práci s daty a časem.
Před formátováním data musíte získat aktuální datum. K tomu lze použít metodu DateTime.Now. Návratová hodnota této metody je objekt typu DateTime, který obsahuje aktuální datum a čas.
Dále lze použít metodu ToString Chcete-li převést objekt DateTime na řádek. Metoda ToString přijímá formát data a času jako řetězec. Například pro uložení data ve formátu "DD.MM..YYYY", můžete použít následující kód:
string formattedDate = DateTime.Now.ToString("dd.MM.yyyy");
V tomto příkladu" dd "představuje dvouciferné číslo dne," MM "představuje dvouciferné číslo měsíce a" yyyy " představuje čtyřciferné číslo roku.
Výsledné formátované Datum lze uložit do textového souboru nebo databáze. V případě potřeby lze později použít metodu DateTime.ParseExact Chcete-li převést uložený řádek zpět na objekt DateTime.
Je důležité si uvědomit, že data a čas ve hrách lze uložit v různých formátech v závislosti na požadavcích projektu.
Použití správného formátu pro uložení data je důležité pro jeho následné zpracování a zobrazení. Nesprávný formát může vést k nepředvídatelným výsledkům a chybám v logice hry.
Uložení data do PlayerPrefs
Chcete-li uložit datum do PlayerPrefs, musíte jej převést na řádek s určitým formátem. Nejpohodlnějším a nejběžnějším formátem pro ukládání dat je formát ISO 8601. V tomto formátu jsou data zaznamenána následovně: GGG-MM-DD. Například datum 1. ledna 2025 bude zaznamenáno jako "2025-01-01".
Níže je uveden příklad kódu, který ukládá aktuální datum do PlayerPrefs:
DateTime currentDate = DateTime.Now; string dateString = currentDate.ToString("yyyy-MM-dd"); PlayerPrefs.SetString("SavedDate", dateString); PlayerPrefs.Save();
V tomto příkladu používáme třídu DateTime k získání aktuálního data a času. Poté Datum převedeme na řetězec pomocí metody ToString zadáním formátu "yyyy-MM-dd". Výsledný řetězec je uložen v PlayerPrefs pomocí metody SetString. Nakonec volání metody Save zajistí, že data budou uložena.
Chcete-li v budoucnu získat uložené datum z PlayerPrefs, můžeme použít následující kód:
string savedDateString = PlayerPrefs.GetString("SavedDate"); DateTime savedDate = DateTime.ParseExact(savedDateString, "yyyy-MM-dd", null);
V tomto kódu používáme metodu GetString k získání uloženého řádku a metodu ParseExact k převodu řetězce zpět na datum. Uvádíme stejný formát "yyyy-MM-dd", který jsme použili při ukládání.
Nyní máte znalosti potřebné k uložení a získání data v PlayerPrefs. Tuto funkci můžete použít k uložení a obnovení dat ve hře, jak chcete.
Použití vlastního formátu pro uložení data
Pokud jde o uložení data v Unity, obvykle se používá standardní formát nebo funkce poskytované systémem. Někdy je však nutné použít vlastní formát k uložení data.
Za tímto účelem je možné vytvořit vlastní třídu nebo strukturu, která bude obsahovat potřebná pole pro reprezentaci data, jako je Rok, Měsíc, Den atd. Poté můžete použít metody k převodu tohoto formátu na standardní formát nebo zpět.
Můžete například vytvořit třídu s názvem CustomDate a přidat do ní pole pro rok, měsíc a den:
public class CustomDateTuto třídu pak můžete použít k uložení data do vašeho projektu Unity:
CustomDate customDate = new CustomDate();customDate.year = 2025;customDate.month = 10;customDate.day = 15;SaveData(customDate);
Metodu SaveData lze definovat ve vašem skriptu pro ukládání dat a použít k uložení hodnot polí do paměti, databáze nebo souboru.
Když chcete počítat uložené datum, můžete použít opačný proces-přečíst hodnoty polí z uloženého zdroje a vytvořit instanci CustomDate pomocí těchto hodnot:
CustomDate savedCustomDate = LoadData();int year = savedCustomDate.year;int month = savedCustomDate.month;int day = savedCustomDate.day;// Используйте значения полей для выполнения операций, требующих даты
Tento přístup umožňuje použít vlastní formát k reprezentaci data ve vašem projektu Unity, což může být užitečné v některých případech, kdy je vyžadována větší flexibilita a přizpůsobitelnost.
Příklady použití uložení data v Unity
1. Uložení posledního data vstupu do hry
Můžete uložit datum posledního vstupu hráče do hry a sledovat jeho aktivitu. Níže je uveden příklad kódu:
// Сохраняем текущую дату при входе в игруPlayerPrefs.SetString("LastLoginDate", System.DateTime.Now.ToString());// Получаем сохраненную дату последнего входаstring lastLoginDate = PlayerPrefs.GetString("LastLoginDate");Debug.Log("Last login date: " + lastLoginDate);
2. Sledování časových omezení
Pokud má vaše hra časová omezení, jako jsou denní odměny, pak si můžete uložit datum poslední odměny, abyste zkontrolovali, zda je na novou odměnu dostatek času. Níže je uveden příklad kódu:
// Сохраняем дату последней наградыif (!PlayerPrefs.HasKey("LastRewardDate"))// Получаем сохраненную дату последней наградыstring lastRewardDate = PlayerPrefs.GetString("LastRewardDate");// Проверяем, прошло ли достаточно времени для новой награды (например, 24 часа)System.DateTime lastRewardDateTime = System.DateTime.Parse(lastRewardDate);System.TimeSpan timeSinceLastReward = System.DateTime.Now - lastRewardDateTime;if (timeSinceLastReward.TotalHours >= 24)/ Выдаем новую наградуPlayerPrefs.SetString("LastRewardDate", System.DateTime.Now.ToString());Debug.Log("Reward given!");>
3. Uložení data úkolu
Ve hrách, kde hráč plní úkoly nebo mise, můžete uložit datum dokončení každého úkolu, abyste sledovali pokrok a zabránili opětovnému spuštění. Níže je uveden příklad kódu:
// Uložíme datum dokončení úkolu s ID 1playerprefs.SetString("Task1CompletionDate", System.DateTime.Now.ToString());// Ověřujeme, zda byl úkol s identifikátorem 1 již splněn (PlayerPrefs.HasKey("Task1CompletionDate"))To je jen několik příkladů použití uložení data v Unity. Tyto příklady můžete přizpůsobit svým konkrétním potřebám a požadavkům hry.