


Сохранение на языке C# в Unity 3d
Делаю головоломку на Unity 3d. Сижу спокойно и делаю, и вдруг до меня допирает, что нужно сделать сохранение. В том-то и заключается мой вопрос. Если понадобится, вот все мои скрипты:
Скрипт PlayerController:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerController : MonoBehaviour
{
[SerializeField] KeyCode keyOne;
[SerializeField] KeyCode keyTwo;
[SerializeField] Vector3 moveDirection;
private void FixedUpdate()
{
if (Input.GetKey(keyOne))
{
GetComponent<Rigidbody>().velocity += moveDirection;
}
if (Input.GetKey(keyTwo))
{
GetComponent<Rigidbody>().velocity -= moveDirection;
}
if (Input.GetKey(KeyCode.R))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
if (Input.GetKey(KeyCode.Q))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
}
private void OnTriggerEnter(Collider other)
{
if (this.CompareTag("Player") && other.CompareTag("Finish"))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
}
}
Скрипт Activator (кнопки на поле)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Activator : MonoBehaviour
{
public GameObject[] firstGroup;
public GameObject[] secondGroup;
public Activator button;
public Material normal;
public Material transparent;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Cube") || other.CompareTag("Player"))
{
foreach (GameObject first in firstGroup)
{
first.GetComponent<Renderer>().material = normal;
first.GetComponent<Collider>().isTrigger = false;
}
foreach (GameObject second in secondGroup)
{
second.GetComponent<Renderer>().material = transparent;
second.GetComponent<Collider>().isTrigger = true;
}
GetComponent<Renderer>().material = transparent;
button.GetComponent<Renderer>().material = normal;
}
}
}
Для сохранения прогресса игрока вам нужно использовать PlayerPrefs. Вы можете сохранять и загружать значения переменных, таких как количество очков, уровень, здоровье и т.д.
В вашем случае, вы можете сохранить номер текущего уровня, на котором находится игрок. Для этого вам нужно добавить следующий код в скрипт PlayerController:
private void SaveGame()
{
PlayerPrefs.SetInt("Level", SceneManager.GetActiveScene().buildIndex);
}
private void LoadGame()
{
int level = PlayerPrefs.GetInt("Level");
SceneManager.LoadScene(level);
}
Вы можете вызвать метод SaveGame() в тех местах, где вы хотите сохранить игру, например, когда игрок проходит уровень. А метод LoadGame() нужно вызвать при запуске игры, чтобы загрузить сохраненный уровень.
Также не забудьте добавить проверку наличия сохраненного значения, чтобы избежать ошибок:
private void LoadGame()
{
if (PlayerPrefs.HasKey("Level"))
{
int level = PlayerPrefs.GetInt("Level");
SceneManager.LoadScene(level);
}
else
{
SceneManager.LoadScene(0); // загрузить первый уровень
}
}
Надеюсь, это поможет вам добавить сохранение в вашу игру!