Я строию 2-й астероидный шутер в единстве C#. Мне нужно сохранить сердца игрока на следующий уровень. Поэтому я просто сделал счет, чтобы сохранить то, что мне нужно, это сохранить сердце. Счет сохраняется на следующем уровне, поэтому он работает следующим образом: на первом уровне у вас есть, например, в конце 3000 пунктов, и вы переходите на уровень nesxt, тогда он начнет формировать 3000, но если вы нажмете на перезагрузку или если oyu quit you start from 0 и fro первого уровня. Вот как результат работает так же, как и с сердцами. Итак, если вы закончите первый уровень с 1 сердцем, вам нужно перейти на 2 с 1 сердцем. если вы закончите 2 с 3-мя сердечками tn 3 с 3-мя сердечками, начнется, если вы перезапустите перезагрузку или если вы уйдете, то он начнет формирование по умолчанию. Сердце - это пользовательский интерфейс изображений, я думал, что нужно делать, как scor с prefs игроков, но я не уверен, как это сделать.Сохранить сердечки с PlayerPrefs
if (col.gameObject.tag == "AsteroidBig") {
if (heart.enabled == true && heart1.enabled == true && heart2.enabled == true) {
heart.enabled = false;
Instantiate (explosion, col.transform.position, col.transform.rotation);
Vector3 pos = new Vector3 (0f, 0f, 0f);
Instantiate (player, pos, Quaternion.identity);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
} else if (heart1.enabled == true && heart2.enabled == true) {
heart1.enabled = false;
Instantiate (explosion, col.transform.position, col.transform.rotation);
Vector3 pos = new Vector3 (0f, 0f, 0f);
Instantiate (player, pos, Quaternion.identity);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
} else if (heart2.enabled == true) {
heart2.enabled = false;
Instantiate (explosion, col.transform.position, col.transform.rotation);
Vector3 pos = new Vector3 (0f, 0f, 0f);
Instantiate (player, pos, Quaternion.identity);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
} else if (heart.enabled == false && heart1.enabled == false && heart2.enabled == false) {
Instantiate (explosion, col.transform.position, col.transform.rotation);
Destroy (col.gameObject);
Destroy (this.gameObject);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
GameOverPanel.SetActive (true);
}
}
Если заявление с сердечками выглядит так, оно немного испортилось, но это так. Если вы коснетесь астероида, он проверяет, включено ли 3 сердца, один из них настроен на ложь, тогда, если у вас есть 2 сердца, тогда другой будет ложным и так далее, пока у вас не будет сердец и вы потеряете. Это логика столкновения. Пожалуйста, помогите сохранить это сердце, спросите любой вопрос, потому что я знаю, что он испорчен.
Почему у вас есть сердца как отдельные объекты, а не коллекция? Вы можете просто добавить объекты в «Список() сердца». Ваш оператор if будет просто проверкой свойства 'hearts.Count', и вы можете создать следующий уровень с этим параметром для своих сердец. –
Kolichikov
Вы правы, я должен был подумать об этом, но до сих пор я не знал о списке, но есть ли способ с моим кодом, чтобы он оставался неоткаченным, каким-то образом его сохранить? –
Вы используете SceneManager для загрузки нового уровня? Или просто сбросить текущую сцену? – Kolichikov