Autor Wątek: Problem z wykrywaniem kolizji.  (Przeczytany 1889 razy)

Offline mateusy04

  • Użytkownik

# Maj 14, 2015, 21:11:55
Witam. Robię prostą grę 2D i mam problem z wykrywaniem kolizji. Chodzi mianowicie o to, że robię sterowanie UI przez klikanie w UI Image (sterowanie na urządzenia mobilne). Ruch w prawo i w lewo już mam ale jest problem ze skokiem. Trzeba poprawić niżej załączony kod tak, aby wykrywał on kolizje gracza z podłożem, ponieważ bez tego mogę skoczyć tylko raz, zmiennabool staje się true i nie wraca na false (nie wiem jak to napisać aby działało. Zmienna bool musi wrócić na false po zetknięciu się z podłożem (dodam też że OnCollisionEnter2D nie działa bo wtedy nie działają mi poprawnie kolizje z przeciwnikami). Załączam kod i proszę o pomoc.

public void Jump(float jumpHeight)
{


if (jump == false)
{
player.rigidbody2D.AddForce (Vector2.up * jumpHeight);
jump = true;
}

}

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Maj 14, 2015, 21:22:33
Dobrze robiłeś przez OnCollisionEnter2D, tylko musisz jeszcze sprawdzać czy to z czym kolidujesz to ziemia czy coś innego, np. poprzez tagi. Masz tu link do dokumentacji wraz z przykładem użycia.

Offline Gimer

  • Użytkownik
    • Portfolio

# Maj 14, 2015, 21:27:22
@Xirdus dobrze prawi :)

Jeśli natomiast naczworzyłeś w kodzie i trzeba łatać to dodaj pod nogami postaci pusty GameObject, a w nim  BoxCollider i oznacz go jako trigger, wtedy dodaj poniższy kod do obiektu pod nogami:

void OnTriggerEnter (Collider c) {
    if (c.tag == "ziemia") {
        transformGracza.GetComponent <nazwaSkryptu>().jump = false;
    }
}

a tak sobie napisałem. Lepiej zrób to jak @up :)

Offline mateusy04

  • Użytkownik

# Maj 14, 2015, 21:38:15
Xirdus właśnie coś mi to nie chce zadziałać - robię to przez tagi i nic. Nie wiem co robię źle i gdzie leży problem. A może ktoś mi powie czy nie da się tego ustawić jakoś w Event Trigger, bo tego używam i własnie może to przez to te kolizje nie są wykrywane?

Offline mateusy04

  • Użytkownik

# Maj 14, 2015, 22:05:25
Odnośnie tego Event Trigger niech mi ktoś powie, czy tam mogę dodać opcję do Pointer Down żeby wtedy było sprawdzane czy gracz jest na ziemi czy w powietrzu? Jest taka możliwość? (poniżej ss event trigger który jest podpięty do przycisku odpowiedzialnego za skok)

http://i.imgur.com/ARa2uWi.png

Offline Gimer

  • Użytkownik
    • Portfolio

# Maj 14, 2015, 22:24:04
Możesz mieć jeden Pointer Down ale w metodzie jaką on wywołuje możesz i nawet powinieneś tam sprawdzać czy obiekt jest na ziemi.

Offline mateusy04

  • Użytkownik

# Maj 14, 2015, 22:28:36
No a jak to zrobić? ;) bo ja już się pogubiłem trochę (jestem początkujący i nie za bardzo czaję).

Offline Gimer

  • Użytkownik
    • Portfolio

  • +1
# Maj 14, 2015, 23:14:19
Widzę, że tutaj jest problem innego rodzaju. Więc może zrób tak, że postać podskakuje w nieskończoność albo że skacze raz na jakiś czas?

Czas możesz pobrać z Time.time
http://docs.unity3d.com/ScriptReference/Time-time.html

Napiszesz ze 3-4 gierki i ogarniesz temat. Sam nie jestem specjalistą i jak spojrzę na to co pisałem 3 lata temu to uśmiech pełną gębą :D

Offline laggyluk

  • Użytkownik
    • twitter

# Maj 15, 2015, 13:13:26
Xirdus właśnie coś mi to nie chce zadziałać - robię to przez tagi i nic. Nie wiem co robię źle i gdzie leży problem.
może kod wklej

Offline mateusy04

  • Użytkownik

# Maj 16, 2015, 14:14:38
Temat do zamknięcia.
« Ostatnia zmiana: Maj 17, 2015, 18:14:29 wysłana przez mateusy04 »