Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
1

2D C#, Как сделать сохранение рекорда

22.12.2018, 17:49. Показов 4922. Ответов 16

Можете помочь. Есть скрипт Score (очки)
И два текста это сам Score и HighScore
Как сделать так что например набрал 10 очков и умер эти очки они сохранились в тексте HighScore а Score обнулился через PlayerPrefs

Сам Скрипт
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class Score : MonoBehaviour {
 
    public static int scoreAmount;
    public Text scoreText;
    public Text highScore;
 
    void Start () {
        scoreAmount = 0;
    }
 
 
    // Update is called once per frame
    void Update () {
        scoreText.text = "" + scoreAmount;
    }
}
Скрипт монеты из-за которой прибавляются очки Score
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class coin : MonoBehaviour {
 
    void Start (){
        Invoke("DestroyObj", 5);
    }
 
    void OnTriggerEnter2D(Collider2D shit) {
        if (shit.gameObject.tag == "Player") {
            Score.scoreAmount += 1;
            Destroy (gameObject);
        }
    }
 
    void DestroyObj () {
        Destroy (gameObject);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2018, 17:49
Ответы с готовыми решениями:

Как сделать систему рекорда с разными сценами в юнити 2д?
Я не могу делать систему рекорда с разными сценами в юнити 2д на windows вот скрипт Score: using...

Сохранение рекорда (Flappy Bird)
Есть счётчик очков (score). Но не знаю, как сделать сохранение рекорда. Когда птичка умирает,...

Как сделать сохранение
Есть программа для вот её задание (Постановка задачи. Составить программу для наблюдения за...

Как сделать сохранение?
как сделать сохранение всех сточек в текстовый файл для этой программы? подскажыте...

16
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
22.12.2018, 17:51 2
vladhv,
C#
1
PlayerPrefs.GetInt("BestScoreKey", BestScoreValue);
это поставить по ключу BestScore значения BestScoreValue, а зачем тебе Score держать в реестре? Если он после в оперативке только нужен, каждую новую игру он же будет начинаться с нуля.
0
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 18:05  [ТС] 3
Так вот Score обнуляется а про HighScore он должен сохранять прежние числа Score.
И если там Score больше значение HighScore то он повышается и после как игрок умер он должен сохранится и после перезагрузки сцены не пропасть

Составьте скрипт как должно +- выглядеть
0
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
22.12.2018, 18:14 4
vladhv,
C#
1
2
3
4
5
6
    private void Lose()
    {
        if (Score > PlayerPrefs.GetInt("BestScore", 0))
            PlayerPrefs.SetInt("BestScore", Score);
        Score = 0;
    }
0
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 18:48  [ТС] 5
Я незнаю так или нет но
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class Score : MonoBehaviour {
 
    public static int scoreAmount;
    public Text scoreText;
    public Text highScore;
 
    void Start () {
        scoreAmount = 0;
        highScore.text = PlayerPrefs.GetInt("HighScore", highScore);
 
    }
 
 
    // Update is called once per frame
    void Update () {
        scoreText.text = "" + scoreAmount;
    }
    private void Lose()
    {
        if (Score > PlayerPrefs.GetInt("HighScore", 0))
            PlayerPrefs.SetInt("HihgScore", Score);
        scoreAmount = 0;
    }
}
Добавлено через 29 минут
Теперь проблема такая что набираются очки и в Score и в HighScore
И после смерти HighScore не сохраняется и все обнуляется. Почему?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
public class Score : MonoBehaviour {
 
    public static int scoreAmount;
    public static int highScoreAmount;
    public Text scoreText;
    public Text highScore;
 
    void Start () {
        scoreAmount = 0;
        highScoreAmount = PlayerPrefs.GetInt("HighScore");
 
    }
 
 
    // Update is called once per frame
    void Update () {
        scoreText.text = "" + scoreAmount;
        PlayerPrefs.SetInt ("HighScore", 0);
    
    if (scoreAmount > PlayerPrefs.GetInt("HighScore", 0)) {
            PlayerPrefs.SetInt("HighScore", scoreAmount);
        PlayerPrefs.Save ();
        }
    }
}
0
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
22.12.2018, 20:06 6
Цитата Сообщение от vladhv Посмотреть сообщение
public static int scoreAmount;
* * public static int highScoreAmount;
возможно из-за статических переменных?
0
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 20:30  [ТС] 7
Возможно, но если убирать scoreAmount = 0
То после смерти сохраняется и Score и HighScore
А если поставить то при смерти все обнуляется
0
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
22.12.2018, 21:04 8
vladhv, тебя не смущает что scoreAmount не меняет своего значения?
0
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 21:11  [ТС] 9
Как раз scoreAmount меняет свое значение но после перезапуска она возвращается числа в 0 так как значение в методе Start
А scoreAmount это число привязанное к тексту Score
Тогда как мне сохранять HighScore и обнулять Score и его значения scoreAmount
Уже все поперепробывал
А если ставить обнуление очков в Update после PlayerPrefs он при собирании объектов которые дают те самые очки просто пишется 0 на обоих текстах Score и HighScore

Добавлено через 1 минуту
Щас скриншот прикреплю
0
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
22.12.2018, 21:42 10
Цитата Сообщение от vladhv Посмотреть сообщение
scoreAmount меняет свое значение
где?
0
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 21:57  [ТС] 11
У меня два скрипта еше и монетка
На монетке висит

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class coin : MonoBehaviour {
 
    void Start (){
        Invoke("DestroyObj", 5);
    }
 
    void OnTriggerEnter2D(Collider2D shit) {
        if (shit.gameObject.tag == "Player") {
            Score.scoreAmount += 1;
            Debug.Log ("Собрана Score");
            Destroy (gameObject);
        }
    }
 
    void DestroyObj () {
        Destroy (gameObject);
    }
}
Она прибавляет по одному очку при соприкосновении

И сбрасывается два значения highScoreAmount и scoreAmount
Хотя должно обнуляться только scoreAmount]
А она обнуляет всё
0
Миниатюры
2D C#, Как сделать сохранение рекорда   2D C#, Как сделать сохранение рекорда  
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 21:58  [ТС] 12
C#
1
2
3
4
5
6
7
void OnTriggerEnter2D(Collider2D shit) {
        if (shit.gameObject.tag == "Player") {
            Score.scoreAmount += 1; // <---
            Debug.Log ("Собрана Score");
            Destroy (gameObject);
        }
    }
0
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
22.12.2018, 22:27 13
vladhv, у тебя VS? Пользуйся отладчиком, если нет то Debug.Log в помощь, у тебя все через одно место сделано, почему ты работаешь со статическими переменными которые пересекаються с простымы, так легко запутаться.
0
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 22:31  [ТС] 14
Если убрать статическую переменную то в консоль выдает ошибку

An object referense is requided to access non-static member 'Score.scoreAmount'
0
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
22.12.2018, 22:44 15
vladhv, интересно почему, да?

Екземпляр класса создай
0
2074 / 1328 / 768
Регистрация: 26.10.2018
Сообщений: 3,845
22.12.2018, 22:49 16
Может сначала с# подучить, а потом за юнити браться?
0
0 / 0 / 0
Регистрация: 17.12.2018
Сообщений: 30
22.12.2018, 22:51  [ТС] 17
Все равно все обнуляется
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2018, 22:51

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как сделать сохранение профилей?
Например надо создать профиль &quot;Настройки-1&quot; В этот профиль записать. 1.Напряжение 100вольт 2.Ток...

Как сделать сохранение в игре?
Недавно я решился попробовать создать RPG игру на C++ поскольку с языком у меня особых проблем...

Как сделать сохранение из PictureBox?
Всем привет, помогите плиз! Я написал код для сохранения картинки из picturebox, но когда я...

Как сделать запрет на сохранение?
Подскажите друзья! имеется дбгрид в нем 3 поля 1 из которых нельязя изменить мне нужно чтобы если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.