Prefaby ;-;

Ogólne pytania na temat Unity3D

Re: Prefaby ;-;

Postprzez MrNolife12 » 28 Lut 2019, 16:55

Dziękuję za pomoc, kod działa bardzo dobrze a wrogowie stworzeni przez Instantiate podążają za graczem. Aczkolwiek mam mały problem z podglądem sceny, tak jak w załączonym gifie

https://ibb.co/QrXpGDz

Chciałbym też aby mój gracz po zetknięciu się z wrogiem "umierał" aczkolwiek jak na razie tylko przez niego przelatuje. Do czego odnosi się drugi parametr OnTriggerEnter2D a mianowicie "hit"? Wróg jak i Gracz mają Edge Collider 2D, wróg ustawiony na Is Trigger
Kod: Zaznacz wszystko
public void OnTriggerEnter2D(Collider2D hit)
{
if (hit.tag == "Wrog")
        {
                Destroy(gameObject);
        }
}
MrNolife12
 
Posty: 8
Rejestracja: 05 Lut 2019, 16:22
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez Ether_141 » 01 Mar 2019, 19:33

Wróg musi mieć tag Wrog żeby zadziałało.
Awatar użytkownika
Ether_141
 
Posty: 421
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez MrNolife12 » 02 Mar 2019, 16:25

Wróg ma taki właśnie tag
MrNolife12
 
Posty: 8
Rejestracja: 05 Lut 2019, 16:22
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez patrykas1000 » 07 Mar 2019, 11:14

Czy którykolwiek z obiektów ma Rigidbody? To Rigidbody odpowiada za sprawdzanie kolizji i fizykę, jak robisz ruch na transform.position lub transform.Translate to żadne kolizję nie będą działać, ruch takich obiektów jak gracz, przeciwnik, czy inne elementy z fizyką powinien odbywać się przez Rigidbody,
transform.Translate możesz użyć kiedy masz np. drzwi które się otwierają, platformę która chodzi od prawej do lewej niezależnie od otoczenia czy ruch obiektów które nie mają kolizji.
patrykas1000
 
Posty: 343
Rejestracja: 16 Sie 2013, 21:35
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez MrNolife12 » 17 Mar 2019, 10:49

Tak samo wróg jak i gracz, posiada rigidbody 2D
MrNolife12
 
Posty: 8
Rejestracja: 05 Lut 2019, 16:22
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez MrNolife12 » 18 Mar 2019, 16:19

W jaki sposób sprawić aby Instatniate tworzyło wrogów poza ekranem,w losowych miejscach w ramce?
Albo w kilku określonych miejscach?
MrNolife12
 
Posty: 8
Rejestracja: 05 Lut 2019, 16:22
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez Ether_141 » 18 Mar 2019, 18:05

No ustawiasz tam przy tworzeniu inną pozycję.
Awatar użytkownika
Ether_141
 
Posty: 421
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez MrNolife12 » 25 Mar 2019, 14:57

Stworzyłem funkcję służącą do generowania pocisku przez wroga i chciałbym żeby pocisk generował się co sekundę ale skrypt poniżej nie działa :c
Do Strzelaj() odnoszę się w Update() poprzez StartCoroutine(Strzelaj());

Kod: Zaznacz wszystko
IEnumerator Strzelaj()
    {
       
       
            yield return new WaitForSeconds(2);
            var pocisk = Instantiate(Pocisk);

            pocisk.transform.position = transform.position;
            pocisk.transform.rotation = transform.rotation;

            var pociskRigid = pocisk.GetComponent<Rigidbody2D>();
            pociskRigid.velocity = transform.right * Predkosc;

 



    }
MrNolife12
 
Posty: 8
Rejestracja: 05 Lut 2019, 16:22
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez patrykas1000 » 27 Mar 2019, 20:23

Jeżeli wywołujesz StartCoroutine(Strzelaj()) w Update to w każdej klatce gry (np. 60 razy na sekundę) tworzysz nowy coroutine który po 2 sekundach wywołuje swój kod.
w Start uruchom StartCoroutine(Strzelaj()) a w samym Strzelaj zrób pętlę while(true) i w niej odczekuj 1s i twórz pocisk.
Kod: Zaznacz wszystko
Start(){
  StartCoroutine(Strzelaj())
}
Strzelaj(){
  while(true){
    Czekaj 1s
    wystrzel pocisk
  }
}
patrykas1000
 
Posty: 343
Rejestracja: 16 Sie 2013, 21:35
Has thanked: 0 time
Been thanked: 0 time

Re: Prefaby ;-;

Postprzez Hostur » 29 Mar 2019, 14:08

Kod: Zaznacz wszystko
private IEnumerator Strzelaj()
{   
   if(this == null || !gameObject.activeInHierarchy) yield break;
   yield return new WaitForSeconds(2);
   var pocisk = Instantiate(Pocisk);
   pocisk.transform.position = transform.position;
   pocisk.transform.rotation = transform.rotation;
    var pociskRigid = pocisk.GetComponent<Rigidbody2D>();
    pociskRigid.velocity = transform.right * Predkosc;
   StartCoroutine(Strzelaj());
 }
Hostur
 
Posty: 699
Rejestracja: 05 Sie 2015, 07:36
Has thanked: 0 time
Been thanked: 0 time

Poprzednia

Wróć do Wsparcie Unity

Kto jest na forum

Użytkownicy przeglądający to forum: Bing [Bot] oraz 1 gość

cron