Unity3d OneLine – problemy, które da się rozwiązać w jednej linii kodu. Dosłownie!

Linia: Jak wprowadzić losowość w grach.

Kodu będzie bardzo malutko, bo dosłownie tyle co w tytule. Linijka:

No są dwie, bo możemy losować liczbę całkowitą (int) oraz zmiennoprzecinkową (float). Nasze liczby A i B oraz Af i Bf to zakresy z których losujemy liczby. Oczywiście mogą być tam też liczby ujemne.

Jeżeli chcemy wylosować liczbę zmiennoprzecinkową powinniśmy to zaznaczyć przez podanie również zmiennoprzecinkowych parametrów, czyli przykładowo:

Jednak pasuje dodać trochę teorii odnośnie losowania. Tzn. system losowania stosujemy najczęściej przy wprowadzaniu elementów losowości do gry. Np. z obliczeń wynika, że gracz ma 64% szans trafienie, albo 30% na znalezienie magicznego przedmiotu w skrzyni. Jak takie coś zrealizujemy? Chodzi tutaj głównie o prawdopodobieństwo.

Musimy zacząć od tego, co znaczy że mamy 30% szans na znalezienie magicznego przedmiotu? Oznacza to, że na 100 prób w 30 próbach powinniśmy otrzymać magiczny przedmiot. Więc jak to wprowadzić do kodu:

Czyli prosta sprawa. Losujemy liczbę od 1 do 100 i jeśli wylosowana liczba jest mniejsza od 30 to znaczy, że trafiliśmy w te 30% i dodajemy graczowi magiczny miecz.

Kwestia obliczenia samego prawdopodobieństwa zależy już od samej gry i tego od czego prawdopodobieństwo ma być uzależnione.

Ta druga część może wydawać się prozaiczna, ale bylem o to kilka razy pytany, więc stwierdziłem, że warto rozwiązać ten problem raz na zawsze.

  • Pawel Spychalski

    może poradnik jak poprawić grafikę w unity 3d [tzn dodanie lepszego cieniowanie, fizyki, oświetlenia]

    • Na pewno dobry pomysł na poprawę grafiki to wstawienie lepszych modeli z teksturami o wyższej rozdzielczości ;)

      Fizyka obliczana jest przez silnik fizyczny i tutaj nie da się nic zrobić. W sumie też nie wiem, jak fizyka miałaby wpłynąć na lepszy wygląd gry.
      Lepsze cieniowanie jest w Unity w wersji Pro, dokładniej jest tam dynamiczne cieniowanie. Statyczne cienie możesz poprawić, przez wypalenie ich w wyższej rozdzielczości.
      W przypadku oświetlenia, można bawić się parametrami systemów oświetlenia. Bawić się shaderami, dodawać efekty mgły etc. Po za tym też ogranicza nas silnik przez to jak mapuje światło i z tym też nic się nie da zrobić.

  • Konrad Gałęzowski

    W praktyce czasem przydaje się dodatkowo określenie precyzji, np gdy obliczona szansa to 0,05% (w grach czasami się zdarzają tego typu szanse np na rzadkie przedmioty).

    Najlepiej całe losowanie sprowadzić do jednej funkcji np dice(0.05, 2) – wylosuje liczbę z przedziału 0-9999 i zwróci true jeśli jest mniejsza niż 5 (domyślnie precyzja = 0).
    if (dice(szansa_w_procentach)) { /* udało się */ }