{"id":312,"date":"2016-03-10T14:10:36","date_gmt":"2016-03-10T13:10:36","guid":{"rendered":"http:\/\/www.clan-ei.com\/benvenuti\/?p=312"},"modified":"2016-03-10T15:00:03","modified_gmt":"2016-03-10T14:00:03","slug":"312","status":"publish","type":"post","link":"http:\/\/www.clan-ei.com\/benvenuti\/2016\/03\/10\/312\/","title":{"rendered":"Cosa sta succedendo ai Veicoli? Parte 1"},"content":{"rendered":"<p style=\"text-align: center\"><a href=\"http:\/\/www.clan-ei.com\/benvenuti\/wp-content\/uploads\/2016\/02\/m1Zpu4A.png\" rel=\"attachment wp-att-298\"><img loading=\"lazy\" class=\"alignnone size-medium wp-image-298\" src=\"http:\/\/www.clan-ei.com\/benvenuti\/wp-content\/uploads\/2016\/02\/m1Zpu4A-300x148.png\" alt=\"m1Zpu4A\" width=\"300\" height=\"148\" srcset=\"http:\/\/www.clan-ei.com\/benvenuti\/wp-content\/uploads\/2016\/02\/m1Zpu4A-300x148.png 300w, http:\/\/www.clan-ei.com\/benvenuti\/wp-content\/uploads\/2016\/02\/m1Zpu4A.png 335w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: center\"><b>Da 0 a 100!<\/b><\/p>\n<p style=\"text-align: center\">Ciao a tutti ragazzi,<\/p>\n<p>Il mio nome \u00e8 Garrett, Senior Programmer qui dentro ad OWI. Voi molto probabilmente mi conoscete come RoyAwesome qui sul forum e su Reddit. Lavoro su Squad \u00a0da pi\u00f9 di un anno, focalizzzandomi sull\u2019implementazioni di varie features come ad esempio il sistema dei vari Deployable, le varie modalit\u00e0 di gioco, le modalit\u00e0 AAS, bandiere, punteggi etc. Una delle mie \u201cmissioni\u201d principali negli ultimi mesi \u00e8 stata su una delle features pi\u00f9 richieste: i Veicoli.<\/p>\n<p>Ho iniziato i lavori sui veicoli a Settembre 2015. A quello stadio avevamo 2 prototipi entrambi in Blueprint (Sistema di scripting dell\u2019 Unreal Engines). Ne avete avuto un assaggio nel <a href=\"https:\/\/www.youtube.com\/watch?v=RBaQ4lo-igs\">trailer Kickstarter sulle Humvee<\/a>. Ho capito in tempi brevi che entrambi i prototipi avevano alcuni difetti fatali che mi hanno portato a scegliere di re-implementare da zero il sistema dei veicoli. Si \u00e8 dimostrata essere una scelta vicente, permettendoci di creare un sistema robusto permettendoci la creazione di vicoli unici.<\/p>\n<div class=\"full-width-image\"><img class=\"aligncenter\" src=\"https:\/\/i.imgur.com\/zY3eZbO.jpg\" alt=\"\" \/><\/div>\n<p style=\"text-align: center\"><i>Un Veicolo sulla Mappa di Testing<\/i><\/p>\n<p>Inoltre, prima di di scrivere qualsiasi linea di codice, dovevo sapere esattamente cosa volessimo che i veicoli fossero capaci di fare. Che tipo di azioni potevano fare? COsa sarebbe successo ad un mezzo colpito da un fucile? Un razzi? Un proiettile di carro? Cosa i passeggeri potevano fare? I mitraglieri? I guidatori? Avevo molte domande che richiedevano risposte che quindi ho girato ai nostri fantastici designers Z-Trooper e SgtRoss per aiutarmi nel brainstorm di alcune idee su come volessero rendere i Veicoli nella loro forma finale. Queste semplici domande hanno dato il via ad una grande discussione di design, portando poi alla costruzione di un corposo documento di design contenente tutte le idee pi\u00f9 importanti e le implementazioni da fare. Con un design in mano, potevo quindi inziare a darmi da fare.<\/p>\n<p>Partendo da un file di codice vuoto dovevo solo decidere da dove partire. I prototipi precedenti si erano focalizzati sulla Fisica ed il Movimento dei Veicoli e, siccome stavo partendo da 0, ho optato per iniziare dalla parte che nessuno di questi prototipi aveva affrontato: come entrare nel veicolo e come spostarsi tra le varie sedute al suo interno. L\u2019ultima feature in particolare era un punto focale nel design, quindi ho iniziato implementando una versione semplificata. Come ulteriore bonus questo ha permesso di condividere i progressi con le Armi Per Postazioni Fisse, siccome entrare od uscire da queste richiedeva del lavoro.<\/p>\n<p>L\u2019implementazione iniziale delle sedute e delle interazioni con queste \u00e8 stato un lavoro relativamente veloce, e verso la fine di Settembre ho iniziato a lavorare su di un prototipo di Veicolo statico che potesse avere un numero qualsiasi di posti a sedere. Ho incontrato vari problemi per il testing dove il gioco crashava ogni volta che entravo in un mezzo. Dopo una rapida investigazione ho scoperto che parte del codice presume che il \u00a0PlayerController (cosa voi siete) controllava sempre il Soldier (la vostra persona nel gioco). \u201cOh semplice\u201d ho pensato, \u201cfixero queste problematiche\u201d. Bh\u00e8 non era cos\u00ec semplice.<\/p>\n<div class=\"full-width-image\"><img class=\"aligncenter\" src=\"http:\/\/i.imgur.com\/VMxvkoE.png\" alt=\"\" \/><\/div>\n<p style=\"text-align: center\"><i>Configurazione delle Sedute in una Technical<\/i><\/p>\n<p>Per aiutarvi a capire il problema pi\u00f9 facilemente, l\u2019Unreal Engine presenta alcuni ogetti importanti. Il Giocatore \u00e8 rappresentato tramite il PlayerController. Il lavoro del \u00a0PlayerControllers \u00e8 di controllare gli input dei vari giocatori, oltre che a tracciare il loro stato nel gioco. Loro non esistono nel mondo di gioco, ma possono prendere posseso di oggetti chiamati Pawns (Pedine), oggetti nel mondo di gioco che possono essere controllati. Fin dall\u2019inizio dello sviluppo a ora avevamo solo un solo tipo di Pawn: il Soldier. A causa di questo alcuni sistemi core come le armi ed i danni funzionavano solo quando un PlayerController controllava un Soldier. Se il PlayerController controllava qualche altra cosa (poniamo il caso, un Veicolo), questo sistema andava in crash.<\/p>\n<div><img class=\"aligncenter\" src=\"https:\/\/i.imgur.com\/bdU9KYI.png\" alt=\"\" \/><\/div>\n<p style=\"text-align: center\"><i>Qui potete vedere come, attualmente, potete entrare in un veicolo<\/i><\/p>\n<p>Spezzare e riparare queste parti di codice mi ha portato via molto tempo, da Ottobre fino a Novembre. Alcune di queste erano facili da fixare, come istanze dove il codice creava un Pawn in un Soldier e non controllava se l\u2019azione falliva, altre invece non erano cos\u00ec semplici. Ho realizzato, all\u2019inizio d\u2019Ottobre, che potevamo fixare questi problemi e rilasciare le Armi Per Postazioni Fisse in Novembre. Per\u00f2 ho poi scoperto che le Armi davano per scontato \u00a0che il nostro Player Controller controllasse il Soldier. I progressi sul fixaggio di tali problematiche \u00e8 stato lento. Le Amri richiedevano di essere inserite in un Inventario che fosse parte integrante del Soldier. Ho dovuto suddividere il tutto in varie componenti (sperando di non compiere ulteriori problemi nel proceso). Ottobre si \u00e8 poi trasformato in Novembre e stavo ancora lavorando su istanze dove le armi venissero utilizzate dalle Animazioni del Soldier in ogni Pawn controllata (che ovviamente non funzionava con i Veicoli).<\/p>\n<div><img class=\"aligncenter\" src=\"https:\/\/i.imgur.com\/K9sLHpR.png\" alt=\"\" \/><\/div>\n<p style=\"text-align: center\"><i>Creazione di un Inventario per una calibro .50<\/i><\/p>\n<p>Per fortuna, mentre ero occupato a fixare questi problemi, Kory , un altro programmatore, concluse il suo lavoro ed inizio a lavorare ai Veicoli insieme a me. A questo punto avevamo mancato il rilascio per la patch di Novembre, ma miravamo a rilasciarli per l\u2019Early Access. Chiesi a Kory di occuparsi a rendere funzionante la fisica dei veicoli, rendendo l\u2019Humvee guidabile. A questo punto dovevo solo fixare tutte le problematiche legate al solo Soldier quindi guidare i veicoli era possibile. Abbiamo pensato di poter rendere almeno disponibili i mezzi di trasporti, quindi Kory cominci\u00f2 ad integrare il sistema dei veicoli dell\u2019UE4 nel sistema dei veicoli multiplayer che avevo costruito.<\/p>\n<p>A questo punto io e Kory abbiamo iniziato a guidare le Humvees nella nostra mappa per test. A questo punto, dopo aver attivato un sistema di lag fittizia, abbiamo riscontrato alcuni strani comportamenti, dove le Humvees e le Technicals presentavano rubber banding (effetto ad elastco n.d.r.) e del desync quando le si guidava. Abbiamo iniziato ad investigare ma, con il rilascio dell\u2019Alpha 3 dietro l\u2019angolo, abbiamo dovuto aspettare.<\/p>\n<div><img class=\"aligncenter\" src=\"https:\/\/i.imgur.com\/srOs1GB.png\" alt=\"\" \/><\/div>\n<p style=\"text-align: center\"><i>Veicoli sulla Mappa per test<\/i><\/p>\n<p>Pi\u00f9 o meno nello stesso periodo fixai i rimanenti problemi con le armi fisse, riuscendo finalemente a sparare per la prima volta con una cal .50 fissa. Per\u00f2, siccome alla release l\u2019Apha 3 era piena di bug, misi da parte questi lavori per concentrarmi insieme a Kory sulla v.3 e rendere il rilascio dell\u2019 Early Access fantastico. Aggiunsi un metodo di spawn per i veicoli in ogni mappa in modo che, nel post lancio, potessimo spawnare i veicoli su server pieni e vedere le performance.<\/p>\n<p>Dopo il rilascio dell\u2019EA abbiamo compiuto numerosi test, facendo spawnare Humvees e Technicals su server pieni per poter vedere come si comportassero. I risultati non furono incoraggianti, il problema che vedemmo con desync e rubber banding era addirittura peggio nei server pieni. Presi quindi un piccolo break dagi scontri con i bug post-release per investigare, e scoprii che il codice dei veicoli di default non aveva un netcode o una correzione di lag. I veicoli warpavano (si teletrasportavano in punti randomici n.d.r.) perch\u00e8 gli input del guidatore venivano inviati ad ogni Client ed il Server, e solamente la posizione del Server era corretta. A causa della natura dell\u2019engine fisico, ogni client presentava errori piccoli ma gravi in posizione e velocit\u00e0, causando ad ogni client di vedere i veicoli in posizioni differenti. Quando il server invia la posizione Corretta, il veicolo veniva teletrasportato nella posizione adeguata con un bruttissimo effetto di warp e rubber banding.<\/p>\n<p style=\"text-align: center\"><b>Il netcode per i Veicoli andava ricostruito <\/b><\/p>\n<p>Nella seconda parte parler\u00f2 del processo di riscrittura del Netcode per i Veicoli e di come abbia riunito i pezzi, oltre ad illustrarvi come modificarli voi stessi. Per ora spero che abbiate apprezzato questo sguardo al processo di sviluppo dei veicoli di questi mesi. Se avete qualsasi altra domanda potete seguirmi su Twitter,<a href=\"https:\/\/twitter.com\/royawesome\"> @RoyAwesome.<\/a><\/p>\n<p style=\"text-align: center\"><b>Offworld Out.<\/b><\/p>\n<p style=\"text-align: left\"><strong>Per discutere la News scrivete pure\u00a0<a href=\"http:\/\/www.clan-ei.com\/Newforum\/index.php?topic=221.0\">sul topic inerente <\/a>, per partecipare alla discussione generale di squad scrivete pure <a href=\"http:\/\/www.clan-ei.com\/Newforum\/index.php?topic=9.0\">su questo topic<\/a><\/strong><\/p>\n<p style=\"text-align: center\"><b>Traduzione: Aragorn89<\/b><\/p>\n<div class = 'socialMediaOnEveryPost'><div id=\"sgmbShare1-1\" class=\"sgmbShare jssocials-theme-classic sgmbWidget1-1\"><\/div><div class=\"dropdownWrapper dropdownWrapper1 dropdownWrapper-for-widget \" id=\"dropdownWrapper-for-widget\">\r\n\t\t\t\t\t\t<div class=\"dropdownLabel\" id=\"dropdownLabel-share-list\"><span class=\"sgmbButtonListLabel1\">Share List<\/span><\/div>\r\n\t\t\t\t\t\t<div class=\"dropdownPanel dropdownPanel1-1\">\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div><script>  SGMB_URL = \"http:\/\/www.clan-ei.com\/benvenuti\/wp-content\/plugins\/social-media-builder\/\"; jQuery(\".dropdownWrapper\").hide(); SGMB_GOOGLE_ACOUNT = \"\"; <\/script><script type=\"text\/javascript\">\r\n\t\tjQuery(document).ready(function($){var widget = new SGMBWidget();widget.show({\"id\":\"1\",\"title\":\"ALL\",\"options\":{\"currentUrl\":\"1\",\"url\":\"\",\"shareText\":\"\",\"fontSize\":\"12\",\"betweenButtons\":\"3px\",\"theme\":\"classic\",\"buttonsPosition\":\"\",\"socialTheme\":\"\",\"icon\":\"default\",\"buttonsPanelEffect\":\"No Effect\",\"buttonsEffect\":\"flip\",\"iconsEffect\":\"flip\",\"buttons\":\"{\\\"facebook\\\":{\\\"label\\\":\\\"Share\\\",\\\"icon\\\":\\\"default-facebook\\\"},\\\"twitter\\\":{\\\"label\\\":\\\"Tweet\\\",\\\"icon\\\":\\\"default-twitter\\\",\\\"via\\\":\\\"\\\",\\\"hashtags\\\":\\\"\\\"},\\\"linkedin\\\":{\\\"label\\\":\\\"Share\\\",\\\"icon\\\":\\\"default-linkedin\\\"},\\\"googleplus\\\":{\\\"label\\\":\\\"+1\\\",\\\"icon\\\":\\\"default-googleplus\\\"},\\\"email\\\":{\\\"label\\\":\\\"E-mail\\\",\\\"icon\\\":\\\"default-email\\\"},\\\"pinterest\\\":{\\\"label\\\":\\\"Pin this\\\",\\\"icon\\\":\\\"default-pinterest\\\"},\\\"mewe\\\":{\\\"label\\\":\\\"Share\\\",\\\"icon\\\":\\\"default-mewe\\\"}}\",\"roundButton\":\"\",\"showLabels\":\"on\",\"showCounts\":\"on\",\"showCenter\":\"\",\"showButtonsAsList\":\"\",\"setButtonsPosition\":\"\",\"sgmbDropdownColor\":\"\",\"sgmbDropdownLabelFontSize\":\"14\",\"sgmbDropdownLabelColor\":\"\",\"showButtonsOnEveryPost\":\"on\",\"showOnAllPost\":\"on\",\"sgmbPostionOnEveryPost\":\"Center\",\"textOnEveryPost\":\"\",\"showButtonsOnMobileDirect\":\"\"},\"buttonOptions\":{\"facebook\":{\"label\":\"Share\",\"icon\":\"default-facebook\"},\"twitter\":{\"label\":\"Tweet\",\"icon\":\"default-twitter\",\"via\":\"\",\"hashtags\":\"\"},\"linkedin\":{\"label\":\"Share\",\"icon\":\"default-linkedin\"},\"googleplus\":{\"label\":\"+1\",\"icon\":\"default-googleplus\"},\"email\":{\"label\":\"E-mail\",\"icon\":\"default-email\"},\"pinterest\":{\"label\":\"Pin this\",\"icon\":\"default-pinterest\"},\"mewe\":{\"label\":\"Share\",\"icon\":\"default-mewe\"}},\"button\":[\"facebook\",\"twitter\",\"linkedin\",\"googleplus\",\"email\",\"pinterest\",\"mewe\"]}, 1, '', 'http:\/\/www.clan-ei.com\/benvenuti\/wp-content\/uploads\/2016\/02\/m1Zpu4A-300x148.png', '', 'http:\/\/www.clan-ei.com\/benvenuti\/2016\/03\/10\/312\/'); });<\/script><\/div><script> jQuery(\".socialMediaOnEveryPost\").addClass(\"sgmb-center\") <\/script>","protected":false},"excerpt":{"rendered":"<p>Da 0 a 100! Ciao a tutti ragazzi, Il mio nome \u00e8 Garrett, Senior Programmer qui dentro ad OWI. Voi molto probabilmente mi conoscete come RoyAwesome qui sul forum e su Reddit. Lavoro su Squad \u00a0da pi\u00f9 di un anno, focalizzzandomi sull\u2019implementazioni di varie features come ad esempio il sistema dei vari Deployable, le varie &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"http:\/\/www.clan-ei.com\/benvenuti\/2016\/03\/10\/312\/\">Continua a leggere<\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"_links_to":"","_links_to_target":""},"categories":[3],"tags":[6,9],"_links":{"self":[{"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/posts\/312"}],"collection":[{"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/comments?post=312"}],"version-history":[{"count":3,"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/posts\/312\/revisions"}],"predecessor-version":[{"id":315,"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/posts\/312\/revisions\/315"}],"wp:attachment":[{"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/media?parent=312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/categories?post=312"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.clan-ei.com\/benvenuti\/wp-json\/wp\/v2\/tags?post=312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}