Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Сохранение на языке 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); // загрузить первый уровень
}
}

Надеюсь, это поможет вам добавить сохранение в вашу игру!