Spawnowanie przeciwników.

Ogólne pytania na temat Unity3D

Spawnowanie przeciwników.

Postprzez norbertc » 15 Lut 2021, 11:31

Witam. Tworzę grę w unity i mam problem. Chodzi o spawnowanie przeciwników. Chcę aby na ekranie mógł być tylko 1 przeciwnik na raz. Gdy ten przeciwnik zostaje zabity przez gracza tworzy się nowy. Utworzyłem skrypt który ma się tym zajmować, jednak nie wiem czemu ale nie działa. Bardzo proszę o wysłanie gotowego skryptu, który działał by tak jak napisałem wyżej.
norbertc
 
Posty: 6
Rejestracja: 20 Sty 2021, 09:03
Has thanked: 0 time
Been thanked: 0 time

Re: Spawnowanie przeciwników.

Postprzez Wichur » 15 Lut 2021, 11:59

Pokaż kod to Cię naprowadzimy, proszenie o gotowy kod nie podniesie Twojego doświadczenia
Awatar użytkownika
Wichur
 
Posty: 148
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time

Re: Spawnowanie przeciwników.

Postprzez norbertc » 15 Lut 2021, 12:49

zmienna "enemyOnScreen" określa czy przeciwnik znajduje się na ekranie.
"sc.enemyHP" określa stan zdrowia przeciwnika. Gdy osiągnie zero przeciwnik powinien zostać usunięty.

NIe działa ustawianie zmiennej "enemyOnScreen" na false po pokonaniu przeciwnika.


void Update()
{
enemyBehaviour sc = enemyObject.GetComponent<enemyBehaviour>();

while(enemyOnScreen == false)
{
Instantiate(enemyObject, gameObject.transform.position, Quaternion.identity);
enemyOnScreen = true;
}

while(sc.enemyHP <= 0)
{
enemyOnScreen = false;
}
norbertc
 
Posty: 6
Rejestracja: 20 Sty 2021, 09:03
Has thanked: 0 time
Been thanked: 0 time

Re: Spawnowanie przeciwników.

Postprzez Wichur » 15 Lut 2021, 14:24

Ogólnie, kod jest mega brzydki. ale tak:
GetComponent nie uzywaj w Update tylko w start bo to zabiera sporo obliczenia
Nie uzywaj while w update, bo to nie ma sensu. Update i tak wykonuje sie co klatke

Możesz zrobic to w prosty sposob
Daj zmienna globalna np. public GameObject enemyGameObject = null;
a w update:
if(enemyGameObject == null)
enemyGameObject = Instantiate(enemyObject, gameObject.transform.position, Quaternion.identity);

if(sc.enemyHP <= 0)
{
Destroy(enemyGameObject)
enemyGameObject = null)
}
Awatar użytkownika
Wichur
 
Posty: 148
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time

Re: Spawnowanie przeciwników.

Postprzez norbertc » 15 Lut 2021, 15:07

DZIAŁA !!! Czy mógłbyś mi wytłumaczyć jak działa twój kod ? I jeszcze jedno: gdy dałem GetComponent poza metodą Update wszystkie funkcje czerpiące z skryptu "enemyBehavour" przestały działać. Czy jest jakiś sposób aby GetComponent było poza metodą Update i funkcję czerpiące z "enemyBehavour" działały ??
norbertc
 
Posty: 6
Rejestracja: 20 Sty 2021, 09:03
Has thanked: 0 time
Been thanked: 0 time

Re: Spawnowanie przeciwników.

Postprzez Wichur » 15 Lut 2021, 20:26

1. Sprawdzasz czy enemyGameObject jest null, jesli tak to go przypisujesz nowym prefabem - Instantiate i gdy znow bedzie null to akcja sie bedzie powtarzac

2. mozesz ewentualnie zrobic tak:
utworzyc zmienna globalna
enemyBehaviour sc = null;

a w Update
if(sc == null) sc = enemyObject.GetComponent<enemyBehaviour>();
Awatar użytkownika
Wichur
 
Posty: 148
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time


Wróć do Wsparcie Unity

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 3 gości

cron