[Unity] Niedokładność tworzenia obiektów, a całkowite zepsucie proceduralnego generowania mapy


#1

Witam.
Generuję sobie mapę funkcją - bardzo prosta sprawa, w skrócie, tworzy ona kopie prefaba typu cube o wielkosciach 30,1,15, w odstepach co 30.

Jednakze problem jest w tym, ze po “mapie” poruszam się cubem (rigidbody), a box collidery są włączone zarówno dla mapy jak i dla cuba (jest to konieczne).
Jak widac po screenach, mimo, iż rzekomo obiekty nie powinny o siebie zahaczać, chyba delikatnie to robią, stąd cube podczas “jazdy” po mapie w miejscu któregoś z kolei łączenia wyskakuje w powietrze, co swiadczy o tym ze gdzies jest jakis “prog” w miejscu polaczenia sie dwoch wygenerowanych kawalkow mapy.
Czy ktoś ma może jakiś pomysł?
PS:
Śliskie podłoże jest tylko po to żeby cube po nim się slizgal, i innej opcji nie ma. Nie ma w tym materiale nic więcej niż ustawienie wszystkich frictions na zero.
Zablokowanie Cube position Y nie wchodzi w gre.

(dodaje zdj. poprzez link, bo jest ograniczenie na 1 zdj dla nowych, a poprzez 1 zdj nic nie pokaze…)

https://zapodaj.net/images/2df9077d6e165.png

https://zapodaj.net/images/df22f015f68a7.png


#2

Odtworzylem takie kilka cube + maly cube 1x1x1. I za kazdym razem jak wlaczam to wszytko dziala normlanie i nic sie nigdzie nie zachacza.


#3

Aha… Możesz pokazać skrypt spawnujacy ew rzucić mi projekt z tym rozwiązaniem żebym zobaczył co u mnie w takim razie jest źle?


#4

Prosze bardzo:
plik 7z

dalem na szybko jeden skrypt na obiekcie Track (zmienne dalem publiczne ze mozna sobie zmieniac co potrzeba - szybciej i latwiej na testach), jak naciszniesz play to sie utworzy plansza (ilosc “klockow” ustawiasz na track’u) a button ustawi velocity na cubie.
Physical material tez dalem na cube(playera) -> jak chesz bez tego to zmien jego mase na cos niskiego + wiecej velocity.


#5

Piękne dzięki! Potem zerknę bo nie ma mnie w domu, i jak coś będę pisać.
Dzięki jeszcze raz!


#6

Dziala, z małym ale - mimo iz prefab jest wielkosci 100,1,10, a w Unity po zapauzowaniu też tak pokazuje inspector, to plansza jest niesamowicie szeroka - wklejam dwa zdjęcia aby pokazać Ci o co chodzi.

Tu jak to powinno wygladac, i jak wyglada pierwszy prefab (postawiony na sztywno)
https://zapodaj.net/images/ce95894a6554a.png

A tu dwa zdjęcia jak to wygląda podczas uruchomienia i generowania się mapy skryptem:
https://zapodaj.net/images/69bf9d0a532e3.png
(usun “dot” i “spacja” bo ogranicznie dwoch linkow…)
https:// SPACJA zapodaj DOT net/images/edff856b74b3c.png

  • gdybys mogl mi wytlumaczyc dwie rzeczy:
  1. Co to offset? Bo w sumie nic on nie zmienia, domyslam sie co to, ale nie rozumiem czemu jak robie go na 0, a na 1000, to jest taki sam efekt.
  2. Levelholder jest po to aby skrypt wiedzial odkad “zaczac” generowanie mapy?
  3. Co to quaternion?

#7

Ja mam tego cube w rozmiarze co pisales wczesniej czyl;i 30,1,15 - wydaje mi sie ze masz kamere nie ustawiona dlatego tak to wyglada.
1.
Offset -> co ile te klocki beda spawnowane. ustawione na 30 -> bo prefaby maja 30.
2.
LevelHolder to pusty obiekt w pozycji 0,0,0 ktory trzyma twoje elementy poziomu. dzieki temu nie ma balaganu w inspektorze bo mozesz zwinac LevelHolder i nie widzisz 100000000 elementow.
Do tego jest latwiej operowac poziomem, poruszasz caloscia, rotate tez caloscia, ogolnie tak sie robi. Bo np jak chesz zmienic polozenie/rotacje poziomu to latwiej jest to zrobic na jednym obiekcie niz na kazdym z osobna. Zawsze mozesz poziom wylaczyc/wlaczyc jedna komenda. Do tego mozesz zawsze znalezc cos przeszukujac Children

Quaternion:
Unity tak trzyma wartosci rotacji, to sa bardzo dziwne liczby itp. Dlatego uzywa sie przy ustawianiu np:
Quaternon.Euler(kat_x, kat_y, kat_z);
quaternion.Identity - dzieki temu rotacja bedzie zbiezna z rotacja “rodzica”. Zdaje sie ze jest to “hardcoded” i dziala szybciej niz mialbys pobierac transform z rodzica i dawac jako Quaternion.Euler(katy);

Niestety nie z Lodzi, chociaz tam bym sobie jakas robote w Unity chyba dorwal :smiley: