Как сделать систему сохранения игры в Unity 6
Как сделать систему сохранения игры в Unity
Мы создадим сохранение в JSON-файл с названием сцены и текущими данными игры.
📂 1. Создай файл SaveSystem.cs
Этот скрипт будет сохранять и загружать игру.
using UnityEngine;
using System.IO;
[System.Serializable]
public class SaveData
{
public string sceneName;
public float playerX, playerY, playerZ; // Координаты игрока
}
public static class SaveSystem
{
public static void SaveGame(Transform player)
{
SaveData data = new SaveData
{
sceneName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name,
playerX = player.position.x,
playerY = player.position.y,
playerZ = player.position.z
};
string json = JsonUtility.ToJson(data, true);
string filePath = Application.persistentDataPath + $"/Save_{System.DateTime.Now:yyyy-MM-dd_HH-mm-ss}.json";
File.WriteAllText(filePath, json);
Debug.Log("Игра сохранена в: " + filePath);
}
public static SaveData LoadLatestSave()
{
string directory = Application.persistentDataPath;
string[] files = Directory.GetFiles(directory, "Save_*.json");
if (files.Length == 0)
{
Debug.LogWarning("Нет сохраненных файлов!");
return null;
}
string latestFile = files[files.Length - 1]; // Берем последний файл
string json = File.ReadAllText(latestFile);
return JsonUtility.FromJson<SaveData>(json);
}
}
📂 2. Измени MainMenu.cs
Добавляем кнопки для сохранения и загрузки.
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
public GameObject menuPanel;
public Transform player;
private bool isMenuOpen = false;
void Start()
{
menuPanel.SetActive(false);
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
ToggleMenu();
}
}
void ToggleMenu()
{
isMenuOpen = !isMenuOpen;
menuPanel.SetActive(isMenuOpen);
if (isMenuOpen)
{
Time.timeScale = 0f;
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
else
{
Time.timeScale = 1f;
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
}
public void SaveGame()
{
SaveSystem.SaveGame(player);
}
public void LoadGame()
{
SaveData data = SaveSystem.LoadLatestSave();
if (data != null)
{
SceneManager.LoadScene(data.sceneName);
}
}
public void NewGame()
{
SceneManager.LoadScene("GameScene"); // Название стартовой сцены
Time.timeScale = 1f;
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
public void ExitGame()
{
Application.Quit();
Debug.Log("Выход из игры!");
}
}
📌 Как это работает?
-
Сохранение
- При нажатии "Сохранить игру" создается JSON-файл с позицией игрока и названием сцены.
- Файл сохраняется в
C:\Users\ТВОЙ_ПОЛЬЗОВАТЕЛЬ\AppData\LocalLow\ТВОЯ_ИГРА.
-
Загрузка
- При нажатии "Загрузить игру" ищется последний сохраненный файл.
- Загружается нужная сцена.
📌 Что еще можно улучшить?
✅ Добавить сохранение инвентаря, оружия и других данных.
✅ Добавить респавн игрока на сохраненной позиции.
✅ Сделать список сохранений с выбором.
Сейчас же у тебя будет автосохранение с разными файлами при каждом нажатии! 🚀
🕹 Геймдев: Unity, C#, GameDev, разработка игр, 3D, 2D, Indie, FPS, проект
🎮 Игровой процесс: инвентарь, оружие, стрельба, персонаж, физика, враги, AI, геймплей
🔧 Функции: сохранение, загрузка, меню, пауза, UI, HUD, квесты, уровни, анимация
🌍 Графика: текстуры, материалы, освещение, шейдеры, пост-обработка, VFX
🎶 Звук: музыка, звуковые эффекты, аудио, шаги, стрельба, голос
📱 Платформы: ПК, Android, iOS, VR, WebGL, консоли