• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podążanie za obiektem | Unity2D

VPS Starter Arubacloud
0 głosów
792 wizyt
pytanie zadane 2 września 2018 w OpenGL, Unity przez Yashe Dyskutant (7,720 p.)
zmienione kategorie 2 września 2018 przez Yashe

Witam serdecznie,

Tworzę sobie aplikację na androida i nie mam pomysłu na rozwiązanie pewnego problemu. 
Screen, aby lepiej sobie zobrazować: 

Gracz porusza się w lewo lub prawo -> gdy ktoś kliknie w ekran postać wskakuje wyżej o "poziom" (o ile nie uderzy w ścianę) 

Teraz potrzebuje zrobić skrypt, który wyszuka mi mojego obiektu, który znajduje się na przejściu i przekaże w jakim kierunku ma poruszać się gracz. Oczywiście musi szukać tego obiektu automatycznie i odwoływać się tylko do tego, na którym poziomie jest:

Obiekty "door" mają przypisany tag o tej samej nazwie, a wszystkie typy platform w tym wypadku od "One" do "Ten" mają tag "platform". Wybaczcie za chaotyczne nazwy, lecz próbowałem wielu sposób i nie było czasu na zmiany.

 

    void Start()
    {
        Movement();
    }

    public void Movement()
    {
       platform = GameObject.FindGameObjectWithTag("platform").GetComponent<Transform>();
       door = GameObject.FindGameObjectWithTag("door").GetComponent<Transform>();

        if(transform.position.x < door.position.x)
        {
            rb.velocity = new Vector3(speed, 0, 0);
            //Debug.Log("W prawo");
            Debug.Log("W prawo " + platform.position.y + " || " + transform.position.y);

        }
        else if (transform.position.x > door.position.x)
        {
            rb.velocity = new Vector3(-speed, 0, 0);
            //Debug.Log("W lewo");
            Debug.Log("W prawo " + platform.position.y + " || " + transform.position.y);
        }
        else
        {
            Debug.Log("Error");
            Debug.Log(platform.position.y + " || " + transform.position.y);
        }
    }

Aktualnie kod odnosi się tylko do jednego obiektu (pierwszego) i według niego określa swój kierunek. 
Potrzebuje, aby gracz skupiał się na innym przejściu co każdy poziom.

Gdy jest coś niezrozumiałe, odpowiem w komenatrzach na pytania

Pozdrawiam

komentarz 2 września 2018 przez criss Mędrzec (172,590 p.)
Do Unity jest specjalna kategoria
komentarz 2 września 2018 przez Yashe Dyskutant (7,720 p.)

Poprawione, nie zauważyłem wcześniej, że istnieje taka kategoria frown

1
komentarz 2 września 2018 przez criss Mędrzec (172,590 p.)
Luz :D Dzięki

1 odpowiedź

0 głosów
odpowiedź 2 września 2018 przez 10kw10 Pasjonat (22,880 p.)
edycja 2 września 2018 przez 10kw10
Dobrze by bylo jak bys to wytłumacz na jakims przykładzie (jakies zdjecie etc) bo przynajmniej ja średnio zrozumialem o co chodzi. Postac gracza ma sama wyszukiwać drzwi? Mozesz dac jakis collider lekko podniesiony do góry niz img gracza i jesli nie zachodzi kolizja tzn ze mozesz poruszac sie do gory. Problem w tym ze nie raz drzwi bd po prawej a przejscie po lewej. Btw masz w komentarzach dwa razy prawo.

 

Edit. Jesli drzwi to to przejście pomiędzy platformami to zawsze mozesz policzyc wektor kierunkowy = (koniec - poczatek) / długość tego wektora i wziac tylko wspolrzedna x

 

Edit2. Dobra chyba zrozumiałem xd nie lepiej by bylo trzymać te drzwi w jakiejs tablicy transformow lub vectorow? Po kazdym przejsciu inkrementowalbys zmienna poziom i odczytytal odpowiednia wartosc z tablicy
komentarz 3 września 2018 przez 10kw10 Pasjonat (22,880 p.)
to nie tworz pustego obiektu tylko zapisz sobie pozycje do tablicy.

Czy oleje? Musialbys sprawdzic, ale pewnie tak.
komentarz 3 września 2018 przez Yashe Dyskutant (7,720 p.)

uuu... no racja w sumie, tylko jak zapytam ? 
Generator działa tak, że ma prefaby.. i dostęp do nich. W skrypcie mam tablice objektów oraz tworzą się losowe liczby. No i dalej pewnie wiesz:
 

rand = Random.Range(0, poziomy.platforms.Length);
Instantiate(poziomy.platforms[rand], new Vector3(-12.2f, y_axis, 0), poziomy.platforms[rand].transform.rotation);
// sorry za robocze nazwy

 To nie za bardzo ogarniam jak by zapisywać pozycje coś w tablicy : /

1
komentarz 3 września 2018 przez 10kw10 Pasjonat (22,880 p.)
var positions = new List<Vector3>();
rand= Random.Range(0, poziomy.platforms.Length);
positions.add(new Vector3(-12.2f, y_axis, 0));
Instantiate(poziomy.platforms[rand], new Vector3(-12.2f, y_axis, 0), poziomy.platforms[rand].transform.rotation);

Pisane z pamieci, nie wiem jak masz to dokladnie zrobione ale tam gdzie masz pozycje y mozesz pomnozyc przez iterator, bo kazdy poziom jest o iles tam wyzej, no chyba ze jest roznie to nie wiem ;p

 

Edit. aaalbo jak juz tworzysz obiekt to zrob liste obiektow i dawaj Instantiate w add. Wtedy masz object.transform.position

komentarz 3 września 2018 przez Yashe Dyskutant (7,720 p.)

Nie wkleiłem całego kodu ! Tak, tak zgadza się, później mam y_axis += 1.2f  wink

I zaraz sprawdzę, co i jak z tym zapisywaniem w liście !

komentarz 3 września 2018 przez Yashe Dyskutant (7,720 p.)
Niestety poddaje się.. nie wychodzi mi nic co powinno, wrócę do tego za za kilka dni pewnie. Stworzenie tej listy z współrzędnymi obiektów nic nie dało, gdyż to pozycje (patrząc na screen) obiektów One / Two etc. A potrzeba wyszukać jego "dziecka" i wyczytać jego współrzędne

Dziękuje za pomoc !

Podobne pytania

0 głosów
1 odpowiedź 1,201 wizyt
pytanie zadane 27 kwietnia 2019 w C# przez Pytam_PL Użytkownik (520 p.)
0 głosów
3 odpowiedzi 1,896 wizyt
pytanie zadane 22 lutego 2017 w OpenGL, Unity przez Emil Panecki Bywalec (2,100 p.)
0 głosów
1 odpowiedź 898 wizyt

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...