Avatar
peter54321
Člen
Avatar
peter54321:

Zdravím,
Zrejme velmi jednoduchá otázka viete mi s nou pomôcť?
teraz to mám takto a nefunguje mi to

using UnityEngine;
using System.Collections;

public class Achievements : MonoBehaviour
{
        static int jumps = 0;
        static int deads = 0;
        int launch = 0;
        int starts = 0;

        void Awake()
        {
                launch++;
        }
        void Start()
        {
                starts = PlayerPrefs.GetInt ("S");
                jumps = PlayerPrefs.GetInt ("J");
                deads = PlayerPrefs.GetInt ("D");
                launch = PlayerPrefs.GetInt ("L");
                starts++;
        }
        void Update()
        {
                guiText.text = "Launch = " + launch + " Start = " + starts + " Jumps = " + jumps + " Deads = " + deads;
        }
        void OnDestroy()
        {
                PlayerPrefs.SetInt ("S", starts);
                PlayerPrefs.SetInt ("J", jumps);
                PlayerPrefs.SetInt ("D", deads);
                PlayerPrefs.SetInt ("L", launch);
        }
        public static void Jumps()
        {
                jumps++;
        }
        public static void Deads()
        {
                deads++;
        }
}
 
Odpovědět 29.9.2014 19:37
Avatar
Odpovídá na peter54321
Ondřej Štorc:

A jaká konkrétní část nefunguje?

Nahoru Odpovědět 29.9.2014 20:26
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
peter54321
Člen
Avatar
peter54321:

Nefunguje mi pičítadlo spustený hry
Launch stale mi ukazuje 0.
Ono by sa to malo pričitovat po každom spustený hry.

 
Nahoru Odpovědět 29.9.2014 21:09
Avatar
Odpovídá na peter54321
Michal Štěpánek:

a kam ten počet ukládáš?
Podle mě se vždycky při spuštění nastaví

int launch = 0;

pak se přičte

launch++;

a při ukončení se ta hodnota zase ztratí...

čím se spouští toto:

void Awake()
{
  launch++;
}

?

Editováno 30.9.2014 6:26
Nahoru Odpovědět 30.9.2014 6:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
peter54321
Člen
Avatar
Odpovídá na Michal Štěpánek
peter54321:

launch ukladám v

void OnDestroy()
        {
                PlayerPrefs.SetInt ("S", starts);
                PlayerPrefs.SetInt ("J", jumps);
                PlayerPrefs.SetInt ("D", deads);
                **PlayerPrefs.SetInt ("L", launch);**
        }

OnDestroy sa urobí keď zatvoríš aplikáciu.
A v Starte hodnotu launchu nahrávam.

void Start()
   {
           starts = PlayerPrefs.GetInt ("S");
           jumps = PlayerPrefs.GetInt ("J");
           deads = PlayerPrefs.GetInt ("D");
           **launch = PlayerPrefs.GetInt ("L");**
           starts++;
   }

void Awake() sa spraví iba raz. Keď sa otvorí skript.
PS: Ostatné hodnoty pracujú správne.

 
Nahoru Odpovědět 30.9.2014 6:55
Avatar
Odpovídá na peter54321
Michal Štěpánek:

Mě šlo spíš o to, kde se ta hodnota toho "launch" uchovává?
Při novém načtení hry by se od tamtud měla vytáhnout a pak přičíst (++), ale podle mě se vždy při spuštění nastaví na 0

Nahoru Odpovědět 30.9.2014 8:03
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
zpavlu
Redaktor
Avatar
zpavlu:

http://www.zive.cz/…default.aspx
Jedno z řešení .
PZ

Nahoru Odpovědět 30.9.2014 14:37
PZ
Avatar
peter54321
Člen
Avatar
Odpovídá na Michal Štěpánek
peter54321:

launch sa ukladá v

PlayerPrefs.SetInt ("L", launch);

a nahrava sa v

launch = PlayerPrefs.GetInt ("L");
 
Nahoru Odpovědět 30.9.2014 14:58
Avatar
Odpovídá na peter54321
Michal Štěpánek:

Ano, to vidím, ale to je za běhu programu.
A po ukončení programu ta hodnota "launch" zůstane někde zachovaná?

Nahoru Odpovědět 30.9.2014 15:11
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vodslon
Člen
Avatar
Odpovídá na peter54321
vodslon:

Potřebuješ mít napříkad externí soubor s daty, někde kde to číslo zůstane uchované, třeba v XML,SQl,textáku atd..Kam program když se spustí vstoupí přečte si hodnotu a přičte k ní jedna a zase ho uloží. Teda to je jediný způsob, jak to řeším já, ale je funkční.

 
Nahoru Odpovědět 30.9.2014 16:56
Avatar
Vojtěch Pospíchal:

Pokud se nepletu, tento člověk pracuje v Unity. A v Unity funguje PlayerPrefs jako funkce jenž ukládá zadaná data do registrů. Takže problém není v ukládání dat, ale v jejich zpracování. Takže: Problém je v tom, že autor evidentně nezvládá základy Unity.. Vezmeme si postupně, co se ve skriptu stane s proměnou Launch:

V prvním kroku je nastavena na 0.

Což je v pohodě, protože později se má načíst pomocí PlayerPrefs..

Ve druhém kroku, (Ve funkci Awake) se nastaví její hodnota na 1..

Což je také v pohodě, to přeci chceme... Nebo ne?

Samozřejmě že ne... Protože ve třetím kroku nahrajeme hodnotu uloženou v registrech.. (Funkce Start se totiž zavolá až po funkci Awake!).. Takže načteme hodnotu 0..

A jsem v jádru problému... Ať máme v proměnné Launch cokoli, po tomto kroku máme vždy opět 0..

A v posledním kroku si proměnou Launch = 0 pro jistotu ještě uložíš...

Příště prosím zkus používat Debug funkce místo dotazování se naprostých základů...

 
Nahoru Odpovědět 30.9.2014 17:08
Avatar
peter54321
Člen
Avatar
peter54321:

Dobre vďaka za kritiku
V podstate by to malo vypadať takto

void Awake()
{
        launch = PlayerPrefs.GetInt ("L");
        launch++;
}
void OnDestroy()
{
        PlayerPrefs.SetInt ("L", launch);
}

Ale mám problém ked reštartujem level tak sa Awake ubobí opať ako to opravím?

 
Nahoru Odpovědět 30.9.2014 19:14
Avatar
peter54321
Člen
Avatar
Odpovídá na peter54321
peter54321:

Potrápil som mozoček a použil som staic bool tak to už ide

 
Nahoru Odpovědět 30.9.2014 19:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.