Unity3D

OGU4

Aktiivi jäsen
Terve!

Mie oon viime kesänä alottanut duunailemaan 3d RPG-peliä unity pohjalla. Kyseinen prototyyppi on lähinnä harjoitukseksi, eikä julkaistavaksi. MUTTA, tämän pohjalta olisi tarkoitus aloittaa vastaava projekti ja koittaa välttää aiempia virheitä.

Avaan vähän tässä vaiheita ja ominaisuuksia; olen avoin yhteistyöhön jos joku haluaa mukaan.

Kuvaus
Pelihahmossa on kolmannessa persoonassa pyöritettävä kamera ja tähtäin, tutoriaali kentän opasteet kertovat pelinäppäimet ja juonen. Ruudun alalaidassa näkyy pelihahmon [HP],[Oxygen],[Strength],[Intelligence],[Speed],[Jump] atribuutit,. Pelissä on monenlaisia esineitä joita voi löytää ja kerätä (E) maailmasta, hahmolla on mahdollista ottaa inventorystä (TAB) esine käteen ja käyttää esinettä lyömäaseena (MOUSE1) tai pelaaja voi myös heittää esineitä heiluttamalla pelihahmon kättä (MOUSE2) ja päästämällä irti esineestä (Q). Jotkin esineet tekevät enemmän vahinkoa tiettyihin objekteihin ja esimerkiksi miekka kädessään pelihahmo tekee huomattavasti enemmän vahinkoa, riippumatta [Strength] attribuutista.​
Pelaaminen
Pelihahmolle ilmenee tutoriaalikentässä, että hän on pahan minotauruksen kiroamassa maailmassa ja hänen on paettava. Pakeminen onnistuu, kun pelaaja hahmo on kerännyt 4 eri väristä avainta, joilla hän saa avattua labyrintin keskiosasta löytyvän huoneen. Labyrinttejä on yhteensä 3 ja pelaajan tulee valita oikea labyrintti päästäkseen pakoon, pelin alkaessa arvotaan aina eri loppulabyrintti, mutta kaikkiin kolmeen pääsee kuitenkin sisään. Pelaaja voi hankkia avaimia etsimällä eläimiä, jotka antavat eri raaka-aineisiin vastineeksi avaimen.​
Kun pelaaja poistuu tutoriaalikentästä, hän siirtyy "hubihuoneeseen", joka kulkee nimellä [Alkemiahuone]. Huoneessa pelaaja voi askarrella taikajuomia yhdistelemällä raaka-aineita huoneessa olevassa kattilassa. Tämän lisäksi [Alkemiahuone]:sta löytyy 3 ovea, joista pääsee eri kenttiin ja kentistä vice versa pääsee takaisin alkemiahuoneeseen, myös kuollessaan pelihahmo lennätetään [Alkeamiahuone]:een.​
Sisältö
Dokumentaatio, versiohallinta ja varmuuskopiot one drivessä.
[Alkemiahuone] : HUB + CRAFTING​
[GroundZero] : Kauppa, Miekka, Kylä​
[TreetopPark] : Tasohyppely- / kiipeilypuisto​
[WitchForest] : Vihollisia, vuorikiipeilyä, luolasukellusta, labyrintit​
-Inventory + RPG system​
-n.100 erilaista esinettä (raaka-aineet, avaruuskypärä, sanko,miekka, grapplehook, biljardikeppi, jne. Uusia esineitä on todella helppo lisätä)​
-Alkuperäistä grafiikkaa, 3D malleja, animaatioita.​
-Alkuperäistä ääninäyttelyä ja ääniefektejä​
-A*Pathfinder project (tekoäly), customoitu idle roaming scripti joka arpoo NPC:n liikkumisen suuntaa jos pelaaja ei ole havaitsemis etäisyydellä.​
-Minotaurus model asset​
-2 maksullista eläin model asset pakettia + ilmaisia assetteja​

Peli siis aika straightforward seikkailu-RPG, jonka tein lahjaksi äitilleni alunperin (tietenkin kokemusta itselleni), tämän takia ko. pelia ei julkaista. Mutta olen itsevarma sen suhteen, että seuraavan tekeminen on mutkattomampaa kun on jo kokemusta.

Tosiaan tähän olen kuluttanut hyvän lohkareen vapaa-ajastani, jos ihmisiä kiinnostaa osallistua, niin auttavat kädet ovat tervetulleita ihan jokaisella tuotantoalueella, koodaus, grafiikka, audio.

Suunnitellin tekeväni seuraavasta projektista jonkun youtube tai twitch videosarjan, jotenka sielläkin saa tulla moikkaamaan.
 

Liitteet

  • rabal.jpg
    rabal.jpg
    92,3 KB · Katsottu: 205
  • treetoppark.jpg
    treetoppark.jpg
    115,8 KB · Katsottu: 218
  • kerro mitä näät kuvassa.png
    kerro mitä näät kuvassa.png
    600,9 KB · Katsottu: 219
  • viirua vaille.png
    viirua vaille.png
    719,7 KB · Katsottu: 236
  • saved piccure.png
    saved piccure.png
    698,5 KB · Katsottu: 238
Viimeksi muokattu:
Seuraavaksi:

Project from scracth

-Aloitetaan uusi projekti, johon importoidaan pelkästään tarvittavat ja toimivat ominaisuudet alkuperäisen peliprojektin versioista.
-Luodaan duplikaatti tutoriaali kentästä ja riisutaan se kaikesta ylimääräisestä

Faux Gravity
Mahdollistetaan planeettojen pinnoilla kulkeminen ja mahdollinen planeettojen välinen matkustaminen.

Power Gauge
Voimankäytön skaala, esim (MOUSESCROLLWHEEL) + slider HUD:ssa
Voima slaideria voisi hyödyntää ihan kaikkeen, juoksu nopeus, hyppykorkeus, lyönnin tai taian voimakkuus jne. Luonnollisesti tarvitaan [Stamina]:n ja [Mana]:n kaltaisia resurssimaisia attribuutteja, joiden kulutus on suhteessa voimankäyttöön.
..[Knockback] on myös implementoimatta


!Destruction Sequence! (for the lack of a better name)
Dynaaminen objektien, sekä maaston hajottaminen mahdollisimman pieniin kappaleisiin, mahdollisimman pienellä rasituksella.
Maaston, rakennusten, kivien, puiden, mullan ja kaiken muunkin tulee jo tänä päivänä olla käsin kosketeltavissa ja haluan toteuttaa pelin jossa lusikalla saa kaivettua pieniä haukkuja ja lapiolla isompia monttuja kerrallaan. Suorituskyvy rasitus

joitain ongelmia ja ajatuksia
Polygonien määrä < -grafiikka-> Billboard renderöinti yms
Datan määrä, Datan tarkkuus, desync-ongelmat <-Palvelin-Päätelaite yhteydet -> Lentoratoja ennustava algoritmi, joka kineettiseen energiaan ja törmäävien objektien kestävyyteen perustuen, laskee törmäyksen kolmeulotteisen vaikutusalueen.

Tästä viimeisestä miulla on ollut pohjapiirrustuksia ja ajatuksia paljonkin, mutta ei se saamari se pittää vaa ruveta kokeilee kaikkee, muute se jää ajatuksen tasolle. Tämä on varmasti haastava toteuttaa ja vaatii luovaa ajattelua myös.
 
Viimeksi muokattu:
Nykytilanne 11/03/2023

-Implementoin joskus tammikuussa painovoima mekaniikat jotka mahdollistaa planeettojen tai muiden objektien vetovoiman konffaamisen. Unity kaupasta löytyi kätevä ja ilmainen assettipaketti: https://assetstore.unity.com/packag...gravity-interplanetary-movement-engine-122460

Suunnitteltu:
-RPG luokkia, kuten attribuutit, taidot, skilltree, "tittelit"
// Ripattu suoraan DnD 5e logiikasta
-Hahmotoimintoja:
---> Log //Kerää kaiken tiedon mitä pelissä tapahtuu
-> Pelihahmolla on siis jokin "päiväkirja" johon kerätään geneerisesti logia tapahtuneista asioista, login tietojen tarkkuus/oikeellisuus ja asioiden havaitseminen riippuu pelihahmon attribuuteista.
--> Mikäli hahmolla on aiempi kokemus, asiantuntemusta tai intuitiota, niin peli promptaa pelaajalle logiin linkin tyylillä "Hei, saatan tietää mihin tämä liittyy!".
---> Esimerkiksi: Joku pelihahmo kysyy toiselta pelihahmolta onko hän nähnyt perunaa, toinen vastaa, että on nähnyt perunan edellisen kerran kaupungintalon katolla.
<-- Hahmojen käyttäymistä varten luotava "Behaviour Manager" hallitsee hahmon automaattisesti tapahtuvia tehtäviä. // Mahdollistaa minkä tahansa pelihahmon konvertoimisen NPC:ksi



Behaviour Manager

-Luodaan mahdollisuus "makrottaa" mikä tahansa hahmo.
--> Hahmolle voi antaa suoria käskyjä tehdä mikä tahansa tehtävä Task -jonosta // Päiväkirjan tapahtumista voi tehdä täysin kustomeita tehtäviä

--> Hahmolle voi antaa vallan tehdä mitä vain tai sen voi jättää vaikka täysin passiiviseksi.
--> Hahmolle voi antaa määräyksiä toimia tietyllä tavalla tietyissä tilanteissa tai tiettyjen kriteereiden täyttyessä.
-----> Esim: IF [Enemy] [Queries] ABOUT [POTATO] -> {[LIE]}
-----> Esim: IF [Anybody] [Steals]-[POTATO] -> {[Kill]-[Anybody]} //huom pseudoa
--> Task Queue:

IF [Inventory]-[Potato] EQUALS [0]
{[Search] [Potato] FROM [Townhall Building]
[Query] FROM [Anybody] ABOUT [Potato]}


--> Task Log:
[Search] [Potato] FROM [Townhall Building]
[Query] FROM [Anybody] ABOUT [Potato]
[Move] TO [Townhall Building]

[Query] FROM [Chief] ABOUT [Potato] >> [SUCCESS: "Chieftain Matti Nönnönnöö knows where to find potato]
[Search] [Potato] FROM [Townhall Building]-[Roof] >> [SUCCESS: "Potato found!"]
Jne...

to be continued..
 
Viimeksi muokattu:
Nykytilanne 11/03/2023

-Implementoin joskus tammikuussa painovoima mekaniikat jotka mahdollistaa planeettojen tai muiden objektien vetovoiman konffaamisen. Unity kaupasta löytyi kätevä ja ilmainen assettipaketti: https://assetstore.unity.com/packag...gravity-interplanetary-movement-engine-122460

Suunnitteltu:
-RPG luokkia, kuten attribuutit, taidot, skilltree, "tittelit"
// Ripattu suoraan DnD 5e logiikasta
-Hahmotoimintoja:
---> Log //Kerää kaiken tiedon mitä pelissä tapahtuu
-> Pelihahmolla on siis jokin "päiväkirja" johon kerätään geneerisesti logia tapahtuneista asioista, login tietojen tarkkuus/oikeellisuus ja asioiden havaitseminen riippuu pelihahmon attribuuteista.
--> Mikäli hahmolla on aiempi kokemus, asiantuntemusta tai intuitiota, niin peli promptaa pelaajalle logiin linkin tyylillä "Hei, saatan tietää mihin tämä liittyy!".
---> Esimerkiksi: Joku pelihahmo kysyy toiselta pelihahmolta onko hän nähnyt perunaa, toinen vastaa, että on nähnyt perunan edellisen kerran kaupungintalon katolla.
<-- Hahmojen käyttäymistä varten luotava "Behaviour Manager" hallitsee hahmon automaattisesti tapahtuvia tehtäviä. // Mahdollistaa minkä tahansa pelihahmon konvertoimisen NPC:ksi



Behaviour Manager

-Luodaan mahdollisuus "makrottaa" mikä tahansa hahmo.
--> Hahmolle voi antaa suoria käskyjä tehdä mikä tahansa tehtävä Task -jonosta // Päiväkirjan tapahtumista voi tehdä täysin kustomeita tehtäviä

--> Hahmolle voi antaa vallan tehdä mitä vain tai sen voi jättää vaikka täysin passiiviseksi.
--> Hahmolle voi antaa määräyksiä toimia tietyllä tavalla tietyissä tilanteissa tai tiettyjen kriteereiden täyttyessä.
-----> Esim: IF [Enemy] [Queries] ABOUT [POTATO] -> {[LIE]}
-----> Esim: IF [Anybody] [Steals]-[POTATO] -> {[Kill]-[Anybody]} //huom pseudoa
--> Task Queue:

IF [Inventory]-[Potato] EQUALS [0]
{[Search] [Potato] FROM [Townhall Building]
[Query] FROM [Anybody] ABOUT [Potato]}


--> Task Log:
[Search] [Potato] FROM [Townhall Building]
[Query] FROM [Anybody] ABOUT [Potato]
[Move] TO [Townhall Building]

[Query] FROM [Chief] ABOUT [Potato] >> [SUCCESS: "Chieftain Matti Nönnönnöö knows where to find potato]
[Search] [Potato] FROM [Townhall Building]-[Roof] >> [SUCCESS: "Potato found!"]
Jne...

to be continued..
miksi osa on suomeks ja osa enkuks :D tuosta sun teksistä?
 
miksi osa on suomeks ja osa enkuks :D tuosta sun teksistä?
Koska molemmat on hyviä kieliä :'D


Realiaikainen strategia / RPG kuten Pillars of Eternity olisi hieno tavoite (ilman pausea koska moninpelinä kuitenkin tarkoitus toteuttaa)
//Heroes3 ja Dwarf Fortressista inspiraatiota myös

Sain aikasiksi suht unen pöpperössä väännettyy A*:lla pyörivän useamman ukkelin ohjauksen, videon lopulla raakile toiminta; nyt on jo idea että miten tää pitää toteuttaa järkevästi. Mut nukun välis
 
Viimeksi muokattu:
-Implementoitu alkuviikosta anyRPG järjestelmä, joka sisältää kaikki perus RPG ominaisuudet
-Opeteltu perus asiat järjestelmästä:
-> Luotu custom hahmoja, npc:tä ja pelaajia, custom quest + quest giver, custom esine ja ase ([lapio shovel])
-> Koodasin tässä viikonloppuna netcoden palvelimelle ja sain eilen viestin kulkemaan clientin ja serverin yhteisen instanssin välillä
:: baarireissulta devi striimiä: https://www.twitch.tv/videos/1769199359


Feels good me'in.....

EDIT: netcoden kanssa säätäes meniki 2 kokonaista päivää, VIDEON KOHDASSA 1:17:50--> näkyy miten se toimii tällä hetkellä.

---vasemmalla pienessä ikkunassa on peliclientti läppärillä ja oikealla RDP yhteys servulle jossa pyörii host ja server versio pelistä (editorissa ja buildissa), rämpyttämällä ylälaidassa olevaa "random teleport", oletushahmo liikkuu pikkusen ja sen sijainti päivittyy serverille.

Miulla on valmiiksi hahmojen sijainnin päivittävä skripti, mutta koitan hyödyntää ensin noita NetworkObject skriptejä, josko saisi helposti vaan kommunikoitua kokonaisia peliobjekteja (esim PlayerUnits objekti).
 
Viimeksi muokattu:
OGURPG v0.21a2 /kohta valmis, netcode ja content striimi tulilla **UPOTUS POISTETTU**

EDIT:
Tänä viikonloppuna ei edistynyt projekti ihan toivottuun tavoitteeseen, mutta ongelmakohtia on löytynyt ja uutta opittu. Unity Netcode alkaa olla jo tuttua, vaikkakin hiukan tuntui paikallaan polkemiselta tähän asti. (pieni tauko devauksessa korjaa moiset)

Ajatuksen tasolla tavoite:
>>
pitää luoda v0.22s5 buildin kaltainen async peliservu, mutta koska en osannut lisätä anyRPG natiivi pelaajakontrolleria NetworkBehaviour luokkaan, niin joudutaan improvisoimaan (tähän meni koko päivä)
>> Implementoin jo peliin Quantum Consolen, joka helpottaa devausta, mutta sen lisäksi ajattelin, että se toimisi täydellisesti chat-,komento- ja makropromptina. QS:ssä on valmiiksi hitosti perus consoli ominaisuuksia, kuten viestintä, peliserverin hallinta, makrotus, ennakoiva kirjoitus, jne.
(Mahdollistaa jo täyden pelin hallinnan, mutta clientin consolen komentoihin tulee luoda rajoitukset tietoturvan takia) ::esim AD tunnistautumiseen perustuvalla käyttöoikeudella, joka on jo implementoitu SecurityGrouppeihin (GameAdmin ryhmään kuuluvilla on kirjoitus+luku oikeus serverin C:\ogu44\ -kansioon, mutta ei muualle)

(Tactical RPG / RTS //isometrinen kuvakulma, hiirellä ja gamepadin joystickillä kameran ohjaus)
<< RTS-formaatti jota varten uusimmassa scenessä on hardcodatut pelaajaslot objektit, joiden tärkein ominaisuus on ylläpitää EventSystem dataa etäproseduurikutsuilla, eli käytännössä mitä pelaaja clikkailee, palvelin puhuu sitten takaisin ClientRPC:n kautta pelaajan peliin mitä missäkin tapahtuu;; (animaattorit tästä huolimatta saatava synkkaamaan)
<< Eli alkuun tehdään 4 pelaaja slotia, laitetaan kaikki omiin puolueisiinsa, joilla on omat [anyRPG+A*Pathfinder-AI] -Joukot.
<< PelaajaSlot täytyy hardcodata vastaamaan aina tiettyä OwnerID:tä jolla PlayerSlot "claimataan"
tietylle pelaajalle ja kullakin pelaajalla on täten suora ja yksinkertainen reitti datan välityksellisesti, esim jos vain yhden pelaajan hahmot tietää tai näkee jotakin niin palvelin viestii asiasta vain kyseiselle clientille ja muilla fog of war / out of vision tjsp.
(vaihdetaan dynaamiseen kun kirjautumistunnuksia voidaan käyttää ID matchaykseen)
(Ongelmia mm. NetworkObjektien animaattorin / controllerin omistajuudessa, sekä parentoinnissa)


Sitten kun perus pelimekaniikka on saatu luotua nettimoninpelipohjalle niin devausta voi jatkaa pelihahmojen, esineiden, taitojen, tarinoiden ja muun sellaisen pehmeän sisällön tuottamiseen.. Jatkuu seuraavassa jaksossa :D -kiitos
 
Viimeksi muokattu:
lol melkein unohdin esitellä toisen custom NPC:n jolla on keräys tehtävä (sokeri,hiiva,vesi) josta saa palkkioksi kilju potionin.

Here's [Viddu Mage] -tonttu (kuvassa oikealla)
1679803285384.png
 
Back