Inny problem z kryształami

Programowanie w Unity.

Inny problem z kryształami

Postprzez czelkiz » 16 Sie 2018, 18:48

Pomocy! Nie wiem co mam robić mam pewien kod który mi źle działa i nie wiem w czym rzecz. Kiedy zdobywam kryształy wszystko jest ok, tylko kiedy zbieram ostatni kryształ to jest napisane "dalej", a nie "zakończono poziom" po tym kryształ znika.
Prosiłbym o pomoc. Tutaj kod:

using UnityEngine;
using System.Collections;
using System;

public class Crystal : MonoBehaviour
{

void OnTriggerEnter(Collider collision)
{
if(collision.gameObject.name != "Sphere")
{
return;
}

if(leaveCrystals() == 1)
{
Debug.Log("Zakończono poziom");
}
else
{
Debug.Log("Dalej");
Destroy(gameObject);
}

}

int leaveCrystals()
{
Crystal[] crystals = FindObjectOfType<Crystal>();
return crystals.Length;
}
}
czelkiz
 
Posty: 4
Rejestracja: 16 Sie 2018, 18:29
Has thanked: 0 time
Been thanked: 0 time

Re: Inny problem z kryształami

Postprzez Wichur » 20 Sie 2018, 05:08

Bo nie zwiekszach ilosci tylko zmniejszasz.
Crystal[] crystals = FindObjectOfType<Crystal>(); przeszukuje objekty Crystal a w ontriggerenter masz Destroy(),
Mozesz np. zrobic statyczna klase, ktora bedzie trzymala ilosc zebranych krysztalow i w takim razie zamiast tego if(leaveCrystals() == 1) zrobisz cos w stylu:
Kod: Zaznacz wszystko
if(InventoryCollection.Crystals == 1)
{
Debug.Log("Zakończono poziom");
}
else
{
Debug.Log("Dalej");
Destroy(gameObject);
InventoryCollection.Crystals++;
}

Kod: Zaznacz wszystko
public static class InventoryCollection
{
private static int _crystals = 0
public static int Crystals
{
get {return _crystals;}
set {_crystals = value; }
}
}
Awatar użytkownika
Wichur
 
Posty: 98
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time

Re: Inny problem z kryształami

Postprzez czelkiz » 23 Sie 2018, 17:44

Wichur, zrobiłem tak jak mi napisałeś i prawie wszystko działa poprawnie. No właśnie "Prawie". Błędne jest to że kiedy zrestartuje mi się poziom to np. Mam 3 kryształy na mapie. Jeżeli na początku zdobyłem 1 kryształ i poziom został wczytany ponownie to wtedy jak wejdę w 1 kryształ, a następnie w inny to od razu pojawia się że zakończono poziom mimo, że został mi jeszcze jeden do zdobycia.
Da się to jakoś naprawić?
czelkiz
 
Posty: 4
Rejestracja: 16 Sie 2018, 18:29
Has thanked: 0 time
Been thanked: 0 time

Re: Inny problem z kryształami

Postprzez Ether_141 » 23 Sie 2018, 19:44

Na początku poziomu ustawiaj liczbę zebranych kryształów na 0.
Awatar użytkownika
Ether_141
 
Posty: 375
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Inny problem z kryształami

Postprzez czelkiz » 25 Sie 2018, 12:27

Ether_141
Mógłbyś podać przykład?
czelkiz
 
Posty: 4
Rejestracja: 16 Sie 2018, 18:29
Has thanked: 0 time
Been thanked: 0 time

Re: Inny problem z kryształami

Postprzez Wichur » 25 Sie 2018, 16:05

Takir proste rzeczy sprawiają CI problem?

Najprosciej, gy włączasz poziom to resetujesz ilosc: IventoryCollection.Crystals = 0;

lub

if(InventoryCollection.Crystals == 1)
{
Debug.Log("Zakończono poziom");
IventoryCollection.Crystals = 0;
}
Awatar użytkownika
Wichur
 
Posty: 98
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time

Re: Inny problem z kryształami

Postprzez czelkiz » 25 Sie 2018, 20:40

Wichur

if(InventoryCollection.Crystals == 1)
{
Debug.Log("Zakończono poziom");
IventoryCollection.Crystals = 0;
}

nie działa, jest tak samo
czelkiz
 
Posty: 4
Rejestracja: 16 Sie 2018, 18:29
Has thanked: 0 time
Been thanked: 0 time

Re: Inny problem z kryształami

Postprzez Wichur » 25 Sie 2018, 21:05

Musi dzialac, nie widze co masz w innych skryptach ale tak jak pisalem wczesniej jak i Ether_141, przy zaladowaniu levelu ustaw ilosc zdobytych krysztalow na 0 i bedzie dzialac
Awatar użytkownika
Wichur
 
Posty: 98
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time


Wróć do Skrypty

Kto jest na forum

Użytkownicy przeglądający to forum: Google [Bot] oraz 11 gości