@jacku: matematyka pozostaje obojętna na ten problem bo nie ma z nim nic wspólnego, zobacz sobie na yt jak sie tworzy ściezki dźwiękowe do samochodów bo sa gotowe tutoriale
@MostlyRenegade: na tym się pewnie skończy( ͡°͜ʖ͡°) już coś mi świta żeby podejśc do tego generatywnie, ostatecznie może zrobię jakąś bieda wersję tego symulatora bo wiekszość tutoriali brzmi sztucznie
Na starcie gry skrypt tworzy dwie instancje samochodu: s1 i s2. Jak wewnętrzny skrypt w samochodzie może się dowiedzieć czy jest w s1 czy w s2 przed pojawieniem się?
W funkcji Start to jest proste bo wystarczy mu przesłać zmienną ale jak to zrobić w Awake? #unity3d #csharp
@jacku: Dobre zasady mówią żeby w Awake inicjalizować siebie, a dopiero w Start odwoływać się do innych obiektów. Jeśli będziesz korzystał w Awake z innych obiektów to niekoniecznie one same się zainicjalizują i będziesz natrafił na race conditions, gdy raz wykona się Awake w jednym skrypcie pierwszy a za innym razem Awake w drugim skrypcie.
@jacku: Awake się wywołuje w trakcie Insantiate więc się nie da. Albo zedytujesz prefab z którego tworzysz instancje i już będzie to info w trakcie Awake w serializowanym polu albo zapiszesz to na zewnątrz. Ja używam osobnej metody Init po instantiate do ustawienia instancji, więc dzieje się to odrazu po Awake ale długo przed Start.
Czy mogę czytać wartości ze Scriptable Object bezpośrednio w Update? Czy lepiej przepisać wartość raz na starcie do tymczasowej zmiennej i z niej korzystać? (chodzi o obroty silnika, nie chciałbym żeby mi co obrót coś robił na dysku tak jak to robi np. Debug.Log)
@jacku: Myśl o SO jako o typie klasie i tym jakie ma funkcjonalności. Podejrzewam że podobnie jak ja kiedyś ich wizję zaślepia ci fakt że Unity umożliwia ich zapisanie jako asset.
SO nie są w żaden sposób przeznaczone do przechowywania danych czy bycia "plikiem", one są tym samym czym jest MonoBehaviour, po prostu mają bardzo mało funkcji i nie mają rzeczy typu Update, czy OnEnable
Mirki z #csharp chciałbym dorobić do gry wyścigowej prosty system RPG czyli parametry samochodu (speed, power, grip). Najprościej chyba zrobić struct ze zmiennymi i je odczytać przed startem?
Z drugiej strony widzę ze jest mnóstwo rozbudowanych systemów do tego np. Scriptable Objects (które też ogarnę) i są też płatne gotowe skrypty. W co warto iść? Zależy mi żeby to było proste i łatwo edytowalne w przyszłości, żeby nie robić jakiegoś
@jacku: zdziwiłem się w sumie że wydałeś grę bez wiedzy o scriptable objectach, ale generalnie ja też mam kilka tytułów w portfolio bez użycia SO z początków mojego programowania xD
https://docs.unity3d.com/Manual/class-ScriptableObject.html Scriptable jest mega proste. Zrób sobie np CarParameters : ScriptableObject (przed nim musisz mieć argument [CreateAssetMenu] i w nim [serializefield] do struktury, np [serializable] struct CarHandling {}. W strukturze CarHandling masz niezbędne parametry, jak np z w/w Acceleration,TopSpeed,Handling etc. W
@jacku: to trochę złe podejście bo strukturę tak kodu jak i projektu warto mieć ogarniętą na start. Jeżeli to tylko prototyp, proof of concept na podstawie którego stworzysz docelową gierkę w nowym projekcie to jeszcze ujdzie, bo wiem jak męczące jest zamiast tworzyć mechaniki bawienie się w architekturze. Navmesha też nie używam ja czy w projekcie firmowym. Ale dlatego że mamy swój lightweightowy ( ͡°͜ʖ͡°
Mirki z #csharp mam problem z quaternionem: mam ludka w samochodzie a punkt na górze to wskaźnik inercji, rusza się wolniej niż samochód i ludek powinien w niego celować wtedy będzie się odchylać przy ruszaniu.
wyznaczyłem wektor do tego punktu:
Vector3 directionUp = car.position - point position;
@jacku: To może kąt pochylenia auta, potem ludka przechylić o tą samą wartość, dopisz zmienną która będzie ci mówić czy auto jest pochylone czy nie jest.
@Ulyssos: chyba nie, może jest błąd bo pisałem to trochę w ciemno, generalnie mult miał wzmacniać słabe typy noisa, gdzie wartości leca np. od 0.1 do 0.2, nie wiem czy to robi, może tam gdzieś powinien być Math.Pow
Mirki, dałoby się jakoś przesunąć tą linię podziału za pomocą skryptu? Potrzebuję ją często przesunąć do końca i znów wrócić do połowy, przełaczanie całego workspace'u nie ma sensu bo model jest wtedy inaczej obrócony i cieniowany. A maksymalizacja viewportu z kolei chowa boczny panel z outlinerem W skrótach klawiszowych są jakieś komendy do tego ale działają tylko jak kursor jest w Active Zone #blender
@jacku: targetFramerate to tylko do oszczędzania energii. Te updaty są osobno przeliczane i nie da się tego zsynchronizować. Jeśli np zwalniasz czas w grze (timescale) to nadal klatek fizycznych masz 50/ sekundę symulacji a rendering masz ok targetFramerate na realna sekundę. Żeby obiekty z fizyką ci nie skakały w zwolnionym tempie to np ustawiasz na rigidbody pozycję interpolowana wtedy obiekty będą przesuwane pomiędzy klatkami fizycznymi w klatkach renderowania.
@jacku: Miałem mnóstwo problemów z VSCode+Unity. Ciągłe wyłączanie intellisense, brak podpowiedzi, brak kolorowania kodu, niewykrywanie plików .sln i tym podobne.
Próbowałem wszystkiego co znalazłem w internecie i nic nie działało. Wkurzyłem się i zainstalowałem Visual Studio community z paczkami do C#. VS jest fajne ale IMO zbyt ciężkie do Unity. Otworzyłem więc VS Code i boom, wszystko działało.
Od tamtego czasu na nowych komputerach zawsze instaluję VSCode i Visual Studio
Jak zamienić Quaternion na Vector3 i odwrotnie? Siedzę pół dnia na tym ( ͡°ʖ̯͡°)
Mam w unity 2 obiekty i chciałbym żeby jeden kopiował rotację drugiego ale z lekkim skryptem modyfikujacym. Skrypt chce Vector3 a rotacje są jako Quaterniony. Musiałbym sprowadzić rotację pierwszego do Vector3, zaaplikowac skrypt i zamienić z powrotem
@jacku: No własnie musisz skumać że po takiej zamianie stopnie mogą się zmianić o wielokrotność 360 dlatego 1. Staraj się nie operowac na eulerach 2. Jesli juz musisz to tylko w jedną strone operuj, czyl icały czas tryzmaj gdzieś w postaci eulera i sobie przeliczaj i wrzucaj do tranforma, ale nie odczytuj z tranforma nowych eulerów bo moga byc inne
@jacku: NIgdzie nie ma błednych danych:P Problem wynika z tego że nie wszystkie funckje są odwracalne euler1->q2->euler1
euler1 != euler2 mimo że reprezentuja tą samą orientacje w przestrzeni
Jeśli masz 2 poruszające się obiekty i chcesz np coś naimowac miedzy nimi to będzie np ze zmienna prekościa to tylko operaje na quaternionach wchodza w grę
Robię podajnik jedzenia dla szczura na #arduino i chyba najlepszym pomysłem wydaje się 5 komorowe koło i obroty o 72° co 12h
Na symulacji wyszedł mi taki kształt komór, da się tu coś lepszego wymyślić żeby komora brała max. jedzenia ale jednocześnie żeby jak najmniej wysypywała przy każdym położeniu? Teraz da się zapakować 1/3 objętości, inaczej nie wysypie całości #fizyka #elektronika
Zrobiłem sobie stronę na pionowy i poziomy ekran i działa ok ale w trybie "mobile" przegladarka sama powiększa fonty. Czy to znaczy że istnieje jakiś ukryty skrypt który po wykryciu telefonu pomija moje ustawienia?
Mam w Blenderze takie ekrany i chciałbym szybko zmieniać ich zawartość, jak to ogarnąć w shaderze? Najlepiej byłoby mieć jeden materiał który sobie zmienia teksturę na podstawie jakiegoś parametru. Ale ten parametr musiałby być gdzieś zdefiniowany w modelu? #blender
Mirki, multiplayer po paru testach działa następująco:
- można się ścigać i zderzać, działa fizyka obu samochodów - zderzenia z terenem działają ok - zderzenie z przeciwnikiem może dać glitch z powodu opóźnień kalkulacji fizyki - na razie lepiej się nie zderzać
Fajny dokument powstał o tym jak tworzono pierwszego Tomb Raidera: 5 osób w 1994 r. zrobiło koncept na kartkach i zatrudnili studenta żeby im napisał engine. Fajnie pokazana jest faza projektowa kiedy nie zdawali sobie jeszcze sprawy że tworzą coś kultowego, mogło to wypalić lub nie, nic nie było pewne bo seria Tomb Raider jeszcze nie istniała #gamedev
Mirki od #unity3d i Photon, mam w multiplayerze synchronizowane Rigidbody: position, rotation, velocity, angular velocity. Czy jest sens nakładać jeszcze na to synchronizację transforma obiektu w którym to Rigidbody się znajduje?
Działa to akceptowalnie, chciałbym jeszcze opóźnić synchro pozycji żeby oszczędzić transfer, lepiej to zrobić IEnumeratorem czy można jakoś wskazać Photonowi żeby tą zmienną synchronizował np. co 2 sek:
@jacku: Photon ma komponenty które dodajesz i się synchronizuje. position, rotation z rigidbody to to samo co z transform. photon ma tylko globalny sendrate PhotonNetwork.sendRateOnSerialize. Wszystko co "wysyłasz" od ostatniego wysłania jest cachowane i potem leci jedna paczką. jak zmienisz np 10 razy to samo pomiędzy paczkami to poleci raz
@jacku: Nie wiem jak teraz tam jest ale kiedyś rigidbodyView miało tylko prędkość i prędkość kątowa a transform pozycja i kąt I trzeba było użyć dwóch, skoro rigidbody ma teraz pozycję to nie wiem jak to wpływa na siebie
int rpm=10; //10=idle 100=maxfloat freqPercent;
jak podstawię w ten sposób to działa:
freqPercentźródło: rat_racer_03
Pobierz