Imparare C#Principianti

Programmare da Zero

 

Quando  installiamo Unity, insieme ad esso ci verrà installato anche un altro programma integrato con l’engine, chiamato MonoDevelop (nelle vecchie versioni) o Visual Studio Community (nelle versioni più recenti).

Dunque dalla versione 2018.1 di Unity non troveremo più MonoDevelop ma il più professionale Visual Studio.

Visual Studio Community è la versione free di Visual Studio programma di produzione Microsoft, dunque differente da quella di Unity.  Unity non permette la scrittura di codice all’interno di esso, per questo si affida ad un editor di scripts come appunto Visual Studio.  Quando cliccheremo due volte su uno script dentro Unity, esso si aprirà su Visual Studio.

UNITY è un editor che permette la creazione, il posizionamento, l’assegnazione della parte grafica, ecc… degli oggetti del nostro gioco.
VIsual Studio è l’editor che permette la programmazione, ovvero la scrittura di codice che farà muovere gli oggetti del nostro gioco.

Per semplicità definiremo Visual Studio come un editor di scripts. Esso si presenta con un normale editor di testo, ma con qualche caratteristica in più. Tenete conto che è possibile scrivere scripts anche con il semplice Notepad di Windows o qualunque altro editor di testo. L’unica differenza sta negli aiuti che il Visual Studio dà allo sviluppatore, con consigli durante la scrittura, la rilevazione di errori, il controllo di sintassi, l’uso dei colori per identificare le parole chiave, ecc.

Visual Studio è dunque l’editor di scripts  allegato con Unity con cui scriveremo il codice del nostro gioco.

 

Prentesi informativa: cosa vuol dire “programmare”?

Come dice la parola stessa, programmare significa preparare qualche cosa per il futuro, nel nostro caso si può dire che tenteremo di “dare istruzioni al computer che poi dovrà comportarsi così come gli abbiamo detto di fare”. 

Ricordiamoci però che il computer è un oggetto inanimato .
Ciò lo rende molto differente da che se fosse per esempio una una persona, a cui si potrebbe semplicemente indicare:
“se piove prendi l’ombrello”. O dal nostro cane a cui si può insegnare un determinato gesto o parola che poi lui interpreterà come “vai a cuccia” e gli farà compiere l’azione di andare a cuccia.

Il computer è un oggetto, come una penna, un tavolo, un motorino ecc.. Non è affatto una macchina intelligente, non esistono macchine intelligenti. Esistono solo macchine molto veloci a fare operazioni, peculiarità che permette di simulare un certo tipo di intelligenza grazie alla possibilità di eseguire miliardi di operazioni in meno di un secondo così che possa trovare la risposta più consona ad una certa richiesta esaminando miliardi di possibili risposte in un millisecondo.

Il computer è un insieme di pezzi di plastica, rame e silicio. Si tratta di una macchina, come il tuo motorino, a cui se vuoi “comandare” di andare avanti, devi usare l’acceleratore.
Il tuo motorino ha il suo modo di interagire con te e comprendere i tuoi comandi, come ogni altra macchina.
Dunque, per comandare al computer che quando si preme un tasto dovrà fare questa o quella cosa avrai bisogno di un linguaggio che lui possa comprendere.

Il problema è che l’unico linguaggio che comprende il computer è proprio quello che non capiresti tu. E’ un linguaggio fatto di 1 e di 0 molto complicato e che risulterebbe troppo dispendioso in tempo se tentassimo di scriverlo a mano.
Essendo il computer una macchina, non può far altro che recepire l’accesso o lo spento, appunto: 1 e 0. Il linguaggio binario.

Allora, visto che il computer ha la peculiarità di essere velocissimo, anche se saranno necessari tante operazioni, potremmo fargli tradurre ciò che scriviamo nella nostra lingua, nel linguaggio che possa capire.

Questa procedura è detta compilazione ed è quello che fa automaticamente Unity quando gli diremo di creare la Build del nostro gioco.
Build significa letteralmente “costruisci” o “costruzione”.


Ma attenzione a non fare confusione.

Prima di creare una Build passerà molto tempo perché essa è  l’operazione che si esegue alla fine dello sviluppo o quando si vuol fare qualche test creando un’eseguibile da poter testare su altri computer o da passare ad altre persone.
Una build è la versione finale del nostro gioco, l’insieme di cartelle e files, compreso di file .exe da eseguire per avviare il gioco.

Build” è l’operazione finale che ci permette la creazione del gioco che sarà eseguibile dall’utente.

Durante lo sviluppo del nostro gioco potremmo testarlo in qualunque momento senza dover creare necessariamente una build ad ogni test, direttamente nell’editor di Unity, semplicemente premendo il tasto PLAY presente al centro della barra superiore di Unity.

Scriveremo in linguaggio C# su Visual Studio e poi andremo a testare il nostro lavoro premendo il tasto Play su Unity.

Il testo che scriveremo su Visual Studio è comunemente chiamato codice e il file del nostro progetto su cui lavoreremo sarà chiamato sorgente o più semplicemente script.
Uno script è fondamentalmente un file con estensione .cs (che sta per C Sharp) che si potrà assegnare ad un gameObject (oggetto del gioco) per fargli compiere le azioni che noi vogliamo che faccia.
Il file eseguibile che “nascerà” dalla compilazione sarà il programma compilato, il nostro gioco, pronto per essere eseguito da chiunque sul proprio PC/console/cellulare/Tablet ecc…
Basterà dunque eseguire l’operazione di build su Unity per trasformare il nostro lavoro nella versione eseguibile e giocabile dall’utente. Questo avverrà solo al termine del nostro lavoro, una volta che avremo completato lo sviluppo del gioco o per fare dei test saltuari durante lo sviluppo.

Per compilazione si intende dunque quel processo tramite il quale un programma, scritto in un linguaggio di programmazione, viene tradotto in istruzioni eseguibili dal processore.

Dunque, se noi scrivessimo questa frase su uno script: “Se viene premuto il tasto freccia destra, fai muovere il modello verso destra” e lo assegnassimo ad un gameObject, dovrebbe funzionare…
Peccato però che Unity non comprenda l’italiano e che (per fortuna) recepisca solo una grammatica meno ricca di una qualsiasi lingua parlata. Tutti i linguaggi di programmazione usano come base la lingua inglese e dunque tutte le istruzioni dovranno essere scritte in inglese. Non preoccupatevi se non parlate inglese, se fosse italiano o ostrogoto, non cambierebbe nulla, non risulterebbe ne più facile ne più difficile.

Ciò che dovremmo scrivere in inglese sarebbe: “Se tasto destro premuto, coordinata X dell’oggetto aumenta di tot” .
Già sarebbe meglio, ma non si muoverà nulla e ancora una volta il nostro compilatore non saprebbe come tradurre quello che abbiamo scritto nel linguaggio comprensibile alla macchina e ci rimanderà un errore. Come detto bisogna usare una sintassi adeguata fatta di parentesi e parole chiave.

La sintassi corretta sarebbe SE(tasto.destra=premuto){modello.x=modello.x+tot;}. Ovvero, se viene premuto il tasto destro del mouse, aumenta la coordinata x del modello, così da farlo muovere.
Quasi ci siamo, ma non è ancora la sintassi corretta.
Ogni volta che vogliamo dire al computer di fare una cosa solo quando si verifica una determinata condizione (nel nostro caso il tasto destro è premuto), incontreremo una parolina che è sicuramente l’istruzione più importante di tutte, qualunque linguaggio si usi: SE. Appunto, la condizione. A condizione che il tasto destro sia premuto, allora fai questo o quello.. In inglese: IF.

Come avrete notato ci sono dei “segni uguale” delle parentesi tonde, delle parentesi graffe e un punto e virgole che non sappiamo bene cosa ci stiano a fare. Quei simboli sono necessari per una sintassi corretta, come se stessimo scrivendo una frase in italiano.
Questa è la sintassi del  linguaggio C#(si pronuncia C Sharp) che il Unity e Visual Studio comprenderanno e che riusciranno finalmente a compilare, trasformando le nostre istruzioni dal linguaggio C# al linguaggio macchina che creeranno il nostro programma/gioco.
Se su un tema di italiano scrivessimo la frase “forse :domani!andrò]al(mare…” la nostra professoressa di darebbe un bel 2 in grammatica(e forse ci farebbe vedere da uno specialista), perché ciò che abbiamo scritto in italiano non è corretto, anche se il senso si capisce, ci sono degli errori grammaticali, dunque è sbagliato. Stessa cosa quando scriviamo in un linguaggio di programmazione, la sintassi deve essere quella corretta, non ce la possiamo inventare altrimenti ci verrà evidenziato un errore e la compilazione si bloccherà.

if ( condizione ) { fai questo; }

Eccoci qua, questa è finalmente la grammatica corretta della lingua che stiamo parlando, il C#.

  1. Prima di tutto l’istruzione IF che verifica la condizione, cioè se quello che abbiamo scritto all’interno delle parentesi tonde sia vero o falso.
  2. Appena chiusa la parentesi tonda della condizione troviamo una parentesi graffa che si apre. All’interno delle parentesi graffe ci va il codice che vogliamo che venga eseguito quando la condizione risulterà vera.
  3. L’operazione termina con un punto e virgola che sta sempre a determinare la fine dell’operazione che vogliamo far fare al computer.

    Come avrete capito la simbologia è molto importante, sarà necessario utilizzare simboli come l’uguale, il minore, il maggiore ecc…

Alcuni esempi per prendere confidenza…

Per esempio, se volessimo eseguire un’operazione solo quando il punteggio di un giocatore sarà pari a 1000, scriveremmo:

if(punteggio == 1000){ ...fai questo... ;} 

se invece volessimo far fare la stessa cosa quando il punteggio sarà uguale o superiore a 1000, scriveremmo una cosa del genere:

if(punteggio >= 1000){ ...fai questo... ;} 

dove >= sta a significare “uguale o maggiore “.

Ma perché per verificare un’uguaglianza si usa == e non semplicemente =? Cioè, perché usare due simboli uguale uno dopo l’altro? Lo vedremo nella sessione 1.4 in cui spiego più approfonditamente la prima istruzione di controllo, if  ed else. Ricordate però di non saltare le sessioni precedenti!

Conclusioni finali

Siete un po’ confusi? E’ normale. Continuate ad andare avanti e non scoraggiatevi.
Non c’è guida migliore dell’esperienza. Facendo le prime prove inizierete ad entrare nella mentalità giusta e vedrete che avrete tutto più chiaro.
Vi ricordo che, se non avete capito qualche cosa, potete tranquillamente scrivere un commento sotto ad ogni lezione.

11 pensieri su “Programmare da Zero

  1. Cioè, ma davvero? Tu sei quello della guida su XNA da Zero?
    Grazie di esistere. Un patrimonio per l’italianità. 😉

  2. salve ho appena installato unity ma al posto di MonoDevelop mi ha installato VisualStudio 2017, mi chiedevo se può essere un problema o non sia meglio disinstallare VisualStudio e installare Monodevelop a parte ?

    1. MonoDev è diventato obsoleto e non viene più inserito nel bundle di Unity dalla versione 2018.1.
      La versione “personal” di Visual Studio è gratuita e di gran lunga migliore!

  3. Ciao, complimenti per il corso.
    Vorrei chiederti alcune cose.
    La UI di Unity serve soltanto a posizionare e inserire oggetti, in pratica a costruire la scena, mentre tutte le istruzioni vanno letteralmente scritte (programmate). La domanda è: possibile che anche le funzionalità più basiche come il controllo del Player (muoversi, orbitare) o del nemico (segui il Player, spara) debbano essere ogni volta totalmente riscritte? Mi sembra una “lungaggine” assurda che ci costringe a sapere utilizzare C# alla perfezione, altrimenti non riesci neppure a far camminare il Player.
    Mi chiedo se questi script non esistano già pronti, magari sotto forma di addon o widget, semplicemente da assegnare come componente. Ciò ridurrebe i tempi di game managing del 50%.
    Io ho giocherellato con Unreal Engine 4 e con Game Guru che, pur concependo la “logica” della programmazione alla base del progetto, ti permettono di creare un gioco senza conoscere una sola riga di codice. Ho letto che anche per l’ultima versione di Unity è stato previsto il visual Scripting dedicato. Dove si può recuperare? E dove si possono recuperare script basici o addon che ti permettano di eseguire almeno le funzionailtà principali, se esistono?
    Ti ringrazio.
    Andrea

    1. Ciao Andrea,
      se si vuole veramente imparare a creare videogiochi il saper programmare è essenziale. Non esistono scorciatoie a meno che non si abbia nessuna ambizione di imparare e crescere in bravura ed esperienza in questo campo.

      Se poi non si vuole imparare ma solo creare un qualcosa di semplice solo per se stessi, esistono diversi tool di visual scripting per Unity (il migliore è sicuramente Bolt oppure PlayMaker) ma queste sono tutte scorciatoie che non portano da nessuna parte e fanno solo perdere un sacco di tempo nell’imparare ad usarli (oltre che soldi, visto che non sono gratuiti), tempo che si potrebbe dedicare nello studio di un vero linguaggio che prima o poi, se si vuole progredire in questo campo, sarà necessario.

      Ci sono poi “engine” anche per chi non ha grosse prestese. I vari Game Maker, Construct ecc… Con questi programmini si riesce a far camminare il player anche con pochi click. Ovviamente non si potranno mai fare giochi degni di nota con questi programmi, il migliore mai fatto con essi è comunque sconosciuto nel mondo dei videogiochi. Anche dopo anni di utilizzo di questi programmi non si sarà appreso nulla nel campo dello sviluppo dei videogiochi.
      Unity non è programmino per ragazzini ma un vero engine di livello professionale.

      Il fine ultimo sarebbe quello di fare dello sviluppo di videogiochi un lavoro. E non è certo possibile creare un videogioco di alto livello senza saper programmare. Nessun gioco degno di questo nome è mai stato creato senza qualcuno che l’abbia programmato o che abbia usato scorciatoie. Inoltre, se si ambisce a diventare sviluppatori si capirà presto che nessuna casa di sviluppo sarà mai alla ricerca di un utilizzatore di Construct o Game Maker che nel settore sono considerati “giocattoli per bambini”.

      Comunque, sullo store di Unity ci sono migliaia di asset già pronti. A dire il vero anche gli Standard Asset (gratuiti) possiedono molti scripts basilari per far muovere il personaggio, o un’automobile o uno sprite… ma dipende da che tipo di gioco si vuole fare, un conto è far muovere Mario Bros e un conto è il personaggio di Doom.
      Poi c’è Unify Community in cui trovare milioni di scripts preconfezionati da poter usare.

      Ma come detto, i videogiochi vanno programmati con codice creato ad hoc per le proprie esigenze, onde evitare di creare migliaia di cloni tutti uguali e poco interessanti, con le stesse identiche meccaniche di mille altri.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *